繁体   English   中英

无法理解 - 从C中的文件中读取字符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM