gpt4 book ai didi

c - C 中的 fscanf() - %s 和 %c 之间的区别

转载 作者:太空宇宙 更新时间:2023-11-04 04:25:10 25 4
gpt4 key购买 nike

我正在使用 fscanf() 函数读取如下所示的文本文件:

d 5.234 f
a 4.234 b
d 53.5 c
...

等等。我想总结中间列中的值,但仅限于第一个字母为 d,第二个字母为 f 的行。我的代码如下所示:

FILE *p;
char x[2], z[2];
float y, sum=0;
p=fopen("file.txt", "r");
if(p==NULL) return 1;

while(!feof(p))
{ fscanf(p, "%s %f %s", &x, &y, &z);
if (x[0]=='d' && z[0]=='f') sum+=y;
}

它工作正常——只要 x 和 z 是数组。如果我将它们声明为单个字符,然后告诉 fscanf() 扫描此类 (%c),由于某种原因它会两次遍历文件的最后一行。因此,如果最后一行满足要求,则总和大于应有的总和。谁能说出有什么区别?

最佳答案

你的错误是feof()。

如果最后一个操作导致 EOF,它会触发。对于 %s,这将发生,匹配器将继续读取直到它到达 EOF。使用 %c 它不会。对 fscanf() 的下一次调用失败,但您没有检查它。

  while(!feof(fp))
{
/* read from fp */
}

是常见的反模式或错误。

关于c - C 中的 fscanf() - %s 和 %c 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42356070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com