2

プログラムの入力と処理の部分は完了しましたが、EOFでプログラムを終了する方法がわかりません。これが私のintmain(void)コードです:

int main(void)
{
    int size;

    int n;

    char preorder[26];
    char inorder[26]; 

    while(/* I don't know what to put on this part...*/)
    {
        for(n = 0; n < maxSize; n++)
        {
            preorder[n] = ' ';
            inorder[n] = ' ';
        }
        preIndex = 0;

        scanf("%s %s", preorder, inorder);

        size = strlen(preorder);

        struct node *root = constructTree(inorder, preorder, 0, (size - 1));
        printPostorder(root);
        printf("\n");
    }

    return 0;
}

すべての機能は正常に機能しています。個別に確認しました。基本的に、ユーザーはCtrl + Zを押してこのプログラムを終了したいと考えています(私はWindowsで作業しているので、Zです)。EOFを使用する必要があります。事前にThx

4

3 に答える 3

4

入力関数の戻り値を確認してください。scanf保存されたアイテムの数、またはファイルの終わりに遭遇した場合はEOFを返します。

Anthonが言うようにwhile(1)、ループコントロールとして使用し、ループbreak;を終了するために使用できます。

while(1) {
    if (scanf(...) == EOF)
        break;
}

feof()呼び出された関数はFILE構造体のフラグのみをチェックするため、使用しようとしないでください。EOFを読み取ろうとしたにのみ、EOFが検出されます。ただし、多層エラー処理構造で使用できます。

while(1) {
    if (scanf(...) < N_elements_specified) {
        if (feof(...)) {
            /* EOF detected */
            break;
        } else {
            /* some other cause of insufficient data */
        }
    }
}
于 2013-03-24T08:22:40.873 に答える
3

次のようなことをしたい:

while (scanf(...) != EOF) {

}
于 2013-03-24T08:23:39.477 に答える
-1

文字が残っている間は、次の文字を追加cinして入力を取得できます。preorderpreorder

while (cin >> preorder)
{
    ...
}
于 2017-06-19T11:54:27.400 に答える