fgets麻烦射击

时间:2013-10-29 05:30:14

标签: c fgets

#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

并且遗漏了最后的“成功”。我完全不知道为什么这样做。

3 个答案:

答案 0 :(得分:3)

如果两个字符串相等,

strcmp()将返回0。

尝试使用strcmp()将条件更改为:

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

解释为什么要获得您发布的输出:

  1. 第一行的fgets将以下内容转换为line

    C\n
    
  2. 所以当你strcmp(line, "C") == 1成功时,strcmp()会返回&gt; 0如果第二个参数&gt;第一个论点。

  3. 对于除最后一行之外的所有行都会发生这种情况。

  4. 因此,在最后一行strcmp()返回0,因为字符串相等而您不打印成功

  5. 要解决这个问题,要么做Gangadhar在他的帖子中建议的内容,要么是我在上面所展示的内容。

答案 1 :(得分:1)

当字符串相等时,strcmp()的返回值为0

答案 2 :(得分:1)

您可以使用strncmp()并比较1个字符

 if (strncmp(line, "C" ,1)==0)
            printf("Success");