【发布时间】:2021-12-28 23:29:15
【问题描述】:
我正在尝试编写一个从文件中读取数据的特定程序,但我意识到当我使用 fgetc 读取文件时,如果我稍后使用 fgets,它没有任何输出。
例如这段代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE * arq = fopen("arquivo.txt", "r");
char enter = fgetc(arq);
int line_count = 1;
while(enter != EOF) {
if (enter == '\n') line_count++;
enter = fgetc(arq);
}
printf("%d", line_count);
char str[128];
while(fgets(str, 128, arq)) printf("%s", str);
}
第二个while 不打印任何内容,但如果我删除第一个while,代码会打印文件内容。为什么会这样?
【问题讨论】:
-
如果你循环直到到达 EOF,你希望之后能读到什么?
-
旁白:
fgetc(arq)返回 257 个不同值中的 1 个。保存在char会丢失一些东西。使用int enter。 -
非常感谢您的澄清。那么,如何重置呢?
-
使用
fseek()回到开头。 -
为什么需要第一个循环?如果要获取行数,只需计算您调用
fgets()的次数即可。