2

ファイルからの行の読み取りに問題があります。基本的に、私のコードは、すべての変数が '0' である必要があるよりも 1 行余分に読み取っています。

私のファイルが次の場合:

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

    }

なぜこうなった?助けてくれてありがとう!

4

1 に答える 1

4

何が起こっているかというと、最後まで読み込もうとしたときにfeof返されます。trueファイルの最後に達したが、まだ何も読み取ろうとしていない場合は、feofが返されfalseます。

簡単に言えば、は is at the end of file をfeof表していませんが、 forはfileの末尾を超えてアクセスしようとしました

fscanfファイルの最後で余分な行を読み取ろうとすると、失敗することに注意してください。戻り値をチェックして、何かを読み取ることができたかどうかを確認できます。

于 2012-06-09T05:05:03.673 に答える