[英]Unable to understand - reading characters from files in C
我刚开始学习C语言中的文件处理,并想知道我是否可以通过读取文件中的输入来执行数学计算,这里只是读取字符并在控制台上显示的代码:
int main(void)
{
FILE *p;
char a, b, c, ch;
p = fopen("numbers.txt", "a+");
while((ch = getc(p)) != EOF)
{
fscanf(p, "%c %c %c\n", &a, &b, &c);
printf("%c %c %c\n", a, b, c);
}
fclose(p);
return 0;
}
numbers.txt包含(每个字符前有一个空格):
2 + 3
5 + 6
6 + 7
获得的输出是:
2 + 3
+ 6
+ 7
我无法理解为什么第一行输出符合预期,但第二行和第三行缺少字符,即使在numbers.txt中的每个表达式之后给出了新行。
在while
循环的每次迭代开始时扫描另一个字符
while((ch = getc(p)) != EOF)
尝试将fscanf()
语句作为while
循环的条件并检查其返回值。 根据cplusplus.com :
成功时,该函数返回成功填充的参数列表的项数 。 由于匹配失败,读取错误或文件结束的范围,此计数可以匹配预期的项目数或更少(甚至为零)。
如果在读取时发生读取错误或达到文件结尾,则设置正确的指示符(feof或ferror)。 并且,如果在成功读取任何数据之前发生了任何一个, 则返回EOF 。
因此,请尝试将您的while条件更改为以下任何一项:
while (fscanf(p, " %c %c %c", &a, &b, &c) != EOF)
要么
while (fscanf(p, " %c %c %c", &a, &b, &c) == 3)
使用scanf
格式说明符中的空格,就像使用\\n
,匹配任意数量的空格。 将消耗\\n
和下一行的前导空格,从而导致getc
删除第一个数字而不是前导空格。
我完全跳过了getc
,因为@BLUEPIXY建议:
while (fscanf(p, " %c %c %c", &a, &b, &c) == 3) {
printf("%c %c %c\n", a, b, c);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.