读取文件完成后,循环条件不会终止

时间:2017-01-11 11:14:47

标签: c

此程序将继续阅读下20行,直到用户输入' 文件阅读完成

现在文件阅读已完成部分,我在此计划的第29行{i}条件<{1}}

根据我的理解,fgets()在达到EOF后返回NULL但这个条件不起作用。如何在读取文件后停止循环?

我使用this file进行测试,这是我的计划:

flag != NULL

2 个答案:

答案 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);