0

特定の問題があります。2 つのファイルから文字列を読み取り、それらを 1 文字ずつ比較して、どの行で違いがあり、どれだけの文字が異なるかを判断する必要があります。ポインターとすべてのものを作成しましたが、問題は最初のファイルの最後に来るときです (短いファイルの長さだけを読み取る必要があります) for ループが終了するまで最後の文字列を比較できません'\n' であり、最後の行には \n がありません。しかし、反対に for ループに「\0」を入れると、「\n」も char としてカウントされるため、間違った結果が得られます。この問題を処理するにはどうすればよいですか? 提案?文字の差を数える必要があるため、 strcmp() を使用したくありません。また、他にも満たすべき条件がいくつかあります。これが私の問題です:

while(!feof(fPointer)){
    zeichnen = 0;
    fgets(singleLine, 150, fPointer);
    fgets(singleLine2, 150, fPointer2);
    length = strlen(singleLine);            // save the length of each row, in order to compare them
    length2 = strlen(singleLine2);
    if(length <= length2){
        for(i=0; singleLine[i] != '\n'; i++){
                singleLine[i] = tolower(singleLine[i]);
                singleLine2[i] = tolower(singleLine2[i]);
            if(singleLine[i] != singleLine2[i]){
                     zeichnen++;
                }
        }
        printf("Zeile: %d \t Zeichnen: %d\n", zeile, zeichnen);   // row, char
4

1 に答える 1

0
for(i=0; i < min(length, length2); i++) {
      if ( singeLine[i] == '\n' || singleLine2[i] == '\n')
        break;
       /* Do work */
}       

代わりに、論理 and 演算子を使用して、for ループの条件部分で 2 つ以上の条件をテストすることもできます。

fgets マニュアルページから:

char *fgets(char *s, int size, FILE *stream);

fgets() は、成功した場合はsを返し、エラーの場合、または文字が読み取られていないときにファイルの終わりが発生した場合は NULL を返します。

そのため、while(true) ループを使用して、両方の fgets の戻り値で入力の終わりを確認する必要があります。

于 2016-10-22T12:46:36.373 に答える