我在从文件中读取行时遇到问题。基本上,我的代码是在一个额外的行中读取,所有变量都是“0”,即。
如果我的文件是:

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);
        }

    }

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

最佳答案

所发生的是当有人试图读取超过结尾的内容时,feof返回true。当您在文件末尾,但尚未尝试读取任何其他内容时,feof将返回false
简单地说:feof不代表is在文件的末尾,而是for试图访问超过文件结尾的内容。
请注意,当您在文件的末尾并尝试读取额外的行时,fscanf将失败。您可以检查它的返回值,看看它是否能够读取任何内容。

关于c - while(!feof(file))读多余的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10958514/

10-10 14:08