为什么这个 'for loop' 不退出? C

Why isn't this 'for loop' exiting? C

我是 C 的初学者,我只是想知道为什么这个 'for loop' 没有退出:

int main()
{
    FILE *openfile;
    int notenumber;

    openfile = fopen("test.txt", "w");

        if (openfile == NULL)
        {
            printf("Error opening file\n");
        }
        else
        {
            for (notenumber=1; notenumber<=16; notenumber++)
            {
                notenumber = aserveGetNote();
                fprintf(openfile, "Notenumber = %d\n", notenumber);         
            }

        }

        fclose(openfile);


    return 0;
}

我不明白为什么循环不退出。即使我删除了 if else 循环而只有 for 循环,我仍然有同样的问题?

aserveGetNote()notenumber 的值更改为低于 16 的值,因此循环永远不会退出,因为 notenumber<=16; 始终为真。

您可以这样解决问题:

int test=aserveGetNote();
fprintf(openfile, "Notenumber = %d\n", test);
// or fprintf(openfile, "Notenumber = %d\n", notenumber); as I don't know which value do you want to store

notenumber = aserveGetNote(); : 如果 aserveGetNote() 总是 returns 小于 16,则 for 循环无法完成。

尝试

for (notenumber=1; notenumber<=16; notenumber++)
        {
            int note = aserveGetNote();
            fprintf(openfile, "Note = %d Notenumber %d\n", note,notenumber);         
        }

并遵循@iharob 的建议:将 fclose() 放在测试的 else 部分,以避免在 NULL.[=18= 上调用 fclose() ]

欢迎使用 Whosebug!

问题已经回答。另一个提示:您确实在 fopen 之后检查 NULL。但是,如果您收到 NULL 并致电 fclose 会怎样?在我的机器上出现分段错误。