如何使用feof(FILE*f)?

k-m*_*man 2 c loops while-loop eof feof

我在do-while循环中遇到了困难,当我们到达文件末尾时应该停止.这是循环代码:

do  {
    if (pcompanyRow[0] != '#' && pass == 1) {
        strtok(pcompanyRow, ":");
        pcompanyName = strcpy(pcompanyName, strtok(NULL, ""));
        pass = 2;
        fgets(pcompanyRow, 1024, f);
    }
    if (pcompanyRow[0] != '#' && pass == 2) {
        strtok(pcompanyRow, ":");
        pcompanySMSPrice = strcpy(pcompanySMSPrice, strtok(NULL , ""));
        pass = 3;
        fgets(pcompanyRow, 1024 , f);
    }
    if (pcompanyRow[0] != '#' && pass == 3) {
        strtok(pcompanyRow, ":");
        pcompanyMMSPrice = strcpy(pcompanyMMSPrice, strtok(NULL, ""));
        pass = 4;
        fgets(pcompanyRow, 1024, f);
    }
    if (pass == 4)  {
        AppendCompanyNode(pcompanyList, pcompanyName, pcompanySMSPrice, pcompanyMMSPrice);
        pass = 1;
    }
} while (!feof(f));
Run Code Online (Sandbox Code Playgroud)

在使用调试器运行之后,我注意到我遇到的所有崩溃问题都是因为即使它到达整行也不会离开这个循环.

我该怎么写得正确?

Mil*_*lan 8

你永远不应该使用feof()作为循环的退出指示符.feof()仅在读取文件结束(EOF)后才为TRUE,而不是在达到EOF时

来源于.它还详细解释了问题以及如何解决它.