我在执行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));


使用调试器运行后,我注意到我遇到的所有崩溃问题是因为即使到达整行,它也不会退出此循环。

我应该如何正确书写?

最佳答案

我将更改您的循环和逻辑以使用此代码:

while (fgets(pcompanyRow, 1024, f) != NULL) {

    /* do things */

}


当fgets()尝试读取文件末尾时,它将返回NULL,您将跳出循环。您仍然可以继续使用pass和其他标志/逻辑,但是要检查的条件会稍有不同。

10-04 21:16