Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用EOF停止程序代码_C_Eof - Fatal编程技术网

C 如何使用EOF停止程序代码

C 如何使用EOF停止程序代码,c,eof,C,Eof,我已经完成了程序的输入和处理部分,但我不知道如何用EOF终止程序。这是我的int mainvoid代码: 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++)

我已经完成了程序的输入和处理部分,但我不知道如何用EOF终止程序。这是我的int mainvoid代码:

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预先检查输入函数的返回值。scanf将返回存储的项目数,如果遇到文件结尾,则返回EOF

正如Anthon所说,您可以使用while1作为循环控制,并使用break;退出循环

while(1) {
    if (scanf(...) == EOF)
        break;
}
不要试图使用名为feof的函数,因为它只检查文件结构中的一个标志,也就是说,只有在您尝试读取它之后,它才会检测到EOF。不过,它可以在多层错误处理结构中使用

while(1) {
    if (scanf(...) < N_elements_specified) {
        if (feof(...)) {
            /* EOF detected */
            break;
        } else {
            /* some other cause of insufficient data */
        }
    }
}

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

正如Anthon所说,您可以使用while1作为循环控制,并使用break;退出循环

while(1) {
    if (scanf(...) == EOF)
        break;
}
不要试图使用名为feof的函数,因为它只检查文件结构中的一个标志,也就是说,只有在您尝试读取它之后,它才会检测到EOF。不过,它可以在多层错误处理结构中使用

while(1) {
    if (scanf(...) < N_elements_specified) {
        if (feof(...)) {
            /* EOF detected */
            break;
        } else {
            /* some other cause of insufficient data */
        }
    }
}

您希望执行以下操作:

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

}

您希望执行以下操作:

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

}
您可以添加cin并从preorder获取输入,而preorder还剩下字符:

while (cin >> preorder)
{
    ...
}
您可以添加cin并从preorder获取输入,而preorder还剩下字符:

while (cin >> preorder)
{
    ...
}

查看在while之后放置任何真值,例如while1,如果用户点击Ctrl-Z,您希望显式中断。值得注意的是,在Windows控制台上,EOF是用Ctrl+Z发送的,但在Linux中是Ctrl+D。查看在while之后放置任何真值,例如while1,如果用户点击Ctrl-Z,您希望显式中断。值得注意的是,在Windows控制台上,EOF是用Ctrl+Z发送的,但在Linux中是Ctrl+D。您通常在。。。对于scanf…==EOF?这完全取决于具体的程序。对于任何有效参数,scanf将返回EOF或not。您通常在。。。对于scanf…==EOF?这完全取决于具体的程序。对于任何有效参数,scanf将返回EOF或not。