此程序将继续阅读下20行,直到用户输入' 或文件阅读完成。
现在文件阅读已完成部分,我在此计划的第29行{i}条件<{1}}
根据我的理解,fgets()在达到EOF后返回NULL但这个条件不起作用。如何在读取文件后停止循环?
我使用this file进行测试,这是我的计划:
flag != NULL
答案 0 :(得分:3)
您没有退出外循环。在外部while循环更改
while (c != 'q');
到
while ((c != 'q') && (flag !=NULL));
答案 1 :(得分:3)
即使达到EOF,用户输入do-while
之前,您的外q
循环也不会终止。
do {
do {
i++;
flag = fgets(buffer1, 999, fp);
printf("%s", buffer1);
//printf("%d***\n", i); //debug - print line number
} while (i % 20 != 0 && flag != NULL);
scanf(" %c", &c);
} while (c != 'q'); // no EOF checking here
这可能会做你想要的:
do {
do {
i++;
flag = fgets(buffer1, 999, fp);
// only print if fgets() returned new data
if (flag != NULL) {
printf("%s", buffer1);
}
//printf("%d***\n", i); //debug - print line number
} while (i % 20 != 0 && flag != NULL);
scanf(" %c", &c);
} while (c != 'q' && flag != NULL);