2

我已经完成了程序的输入和处理部分,但我不知道如何用 EOF 终止程序。这是我的 int main(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。提前谢谢

4

3 回答 3

4

检查输入函数的返回值。scanf如果遇到文件结束,将返回存储的项目数或 EOF。

正如 Anthon 所说,您可以将while(1)其用作循环控件,并用于break;退出循环。

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

不要试图使用被调用的函数,feof()因为它只检查 FILE 结构中的标志,即。它只会在您尝试阅读后检测到 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

您可以从while has characters left添加cin和获取输入:preorderpreorder

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