3
#include <stdio.h>
#include <string.h>
int main()
{
    FILE *pInFile;
    pInFile = fopen("fileName.txt", "r");
    char line[200];

    while (fgets(line, sizeof(line), pInFile)) { 
        printf("\n%s", line);
        if (strcmp(line, "C")==1)
            printf("Success");

    }

    return 0;
}

したがって、プログラムの目標は、この場合は「C」である行を読み取るたびに「成功」​​を出力することです。たとえば、私のテキストファイルは次のようになります

C
C
C
C

そして、私はそれを印刷したい

C
Success
C
Success
C
Success
C
Success

しかし、なぜかこれを印刷するだけです

C
Success
C
Success
C
Success
C

そして、最後の「成功」を除外します。なぜこれを行っているのか、私にはまったくわかりません。

4

3 に答える 3

3

strcmp()2 つの文字列が等しい場合は 0 を返します。

条件を次のように変更してみてくださいstrcmp():

if (line[0] == 'C') {
    printf("Success");
}

投稿した出力が得られる理由についての説明:

  1. 最初の行の fgets は、次のものを に取得しますline

    C\n
    
  2. したがって、strcmp(line, "C") == 1成功するとstrcmp()、第 2 引数 > 第 1 引数の場合 >0 が返されるためです。

  3. これは、最後の行を除くすべての行で発生します。

  4. したがって、最後の行でstrcmp()は、文字列が等しく、正常に出力されないため、0 が返されます。

これを解決するには、Gangadhar が彼の投稿で提案したこと、または私が上に示したことを実行してください。

于 2013-10-29T05:34:36.963 に答える
1

strcmp()文字列が等しい場合の戻り値は 0 です

于 2013-10-29T05:33:53.960 に答える
1

1文字を使用strncmp() して比較できます

 if (strncmp(line, "C" ,1)==0)
            printf("Success");
于 2013-10-29T05:41:29.507 に答える