首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fgets问题解决

fgets问题解决
EN

Stack Overflow用户
提问于 2013-10-29 05:30:14
回答 3查看 67关注 0票数 3
代码语言:javascript
复制
#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“。例如,我的文本文件如下所示

代码语言:javascript
复制
C
C
C
C

我想把它打印出来

代码语言:javascript
复制
C
Success
C
Success
C
Success
C
Success

但是,出于某种原因,它只打印了这个

代码语言:javascript
复制
C
Success
C
Success
C
Success
C

忽略了最后的“成功”。我完全不知道它为什么要这么做。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-29 05:34:36

如果两个字符串相等,strcmp()将返回0。

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

代码语言:javascript
复制
if (line[0] == 'C') {
    printf("Success");
}

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

  1. 第一行的fget将以下内容输入到line中: C\n
  2. 因此,当您使用strcmp(line, "C") == 1时,它会成功,因为strcmp()返回>0,如果是第二个参数>第一个参数。
  3. 除了最后一行外,所有的行都会出现这种情况。
  4. 因此,在最后一行中,strcmp()返回0,因为字符串是相等的,并且没有打印成功

为了解决这个问题,要么做Gangadhar在他的帖子中的建议,要么做我在上面展示的。

票数 3
EN

Stack Overflow用户

发布于 2013-10-29 05:33:53

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

票数 1
EN

Stack Overflow用户

发布于 2013-10-29 05:41:29

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

代码语言:javascript
复制
 if (strncmp(line, "C" ,1)==0)
            printf("Success");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19650381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档