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;
}

所以程序的目标是在每次读取该行后打印“Success”,在本例中为“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()如果两个字符串相等,将返回 0。

尝试将条件更改为strcmp()

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

解释为什么你会得到你发布的输出:

  1. 第一行的 fgets 将以下内容放入line

    C\n
    
  2. 因此,当您strcmp(line, "C") == 1成功时,strcmp()如果第二个参数> 第一个参数,则返回 >0。

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

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

要解决这个问题,请按照 Gangadhar 在他的帖子中建议的或我上面显示的。

于 2013-10-29T05:34:36.963 回答
1

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

于 2013-10-29T05:33:53.960 回答
1

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

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