while(!feof(file))读取额外的行

时间:2012-06-09 05:04:00

标签: c file-io

我有一个问题从文件中读取行。基本上我的代码是在一个额外的行中读取,而所有变量都是'0'i.e。

如果我的文件是:

0, 0, 3, 64, 0, 0, 0, 0
2, 0, 6, 64, 0, 0, 0, 0
4, 0, 4, 64, 0, 0, 0, 0
6, 0, 5, 64, 0, 0, 0, 0
8, 0, 2, 64, 0, 0, 0, 0

它会读入:

Object 1:  0, 0, 3, 64, 0, 0, 0, 0
Object 2:  2, 0, 6, 64, 0, 0, 0, 0
Object 3:  4, 0, 4, 64, 0, 0, 0, 0
Object 4:  6, 0, 5, 64, 0, 0, 0, 0
Object 5:  8, 0, 2, 64, 0, 0, 0, 0
Object 6:  0, 0, 0,  0, 0, 0, 0, 0

这是我的阅读算法:

while (!feof(pfile)) { 

        PcbPtr p = createnullPcb();
        fscanf(pfile, "%d,%d,%d,%d,%d,%d,%d,%d", &p->arrivaltime, &p->priority, &p->remainingcputime, 
        &p->memalloc, &p->pr,  &p->sc, &p->mo, &p->cd);
        char cwd[1024];
        char *tmp = getcwd(cwd, sizeof(cwd));
        strcat(tmp, "/process");
        p->args[0] = tmp;
        p->args[1] = NULL;

        if (!headi) {
            headi = p;
        } 
        else {
            enqPcb(&headi, p);
        }

    }

为什么会这样?谢谢你的帮助!

1 个答案:

答案 0 :(得分:3)

当尝试阅读结束时,feof返回true会发生什么。当您处于文件末尾但尚未尝试阅读其他任何内容时,feof将返回false

简单来说:feof不代表位于文件末尾,但尝试访问文件末尾

请注意,当您位于文件末尾并尝试读取该额外行时,fscanf将失败。您可以检查其返回值以查看它是否能够读取任何内容。