Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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中断while循环_C_While Loop_Eof - Fatal编程技术网

C 通过EOF中断while循环

C 通过EOF中断while循环,c,while-loop,eof,C,While Loop,Eof,我正在努力解决这个问题,我需要你的帮助 我有这个密码 while(a != EOF){ scanf("%f",&a); ... } …我想通过按CTRL+D终止此循环。它可以工作,但我需要按两次。我试着用这个 while(getchar() != EOF){ scanf("%f",&a); ... } 但结果是一样的。有没有办法只按一次CTRL+D来结束这个循环? 感谢您的回复。尝试测试scanf返回:如果您的流已结束,它将返回EOF。尝试测试scanf返回:

我正在努力解决这个问题,我需要你的帮助

我有这个密码

while(a != EOF){
  scanf("%f",&a);
  ...
}
…我想通过按CTRL+D终止此循环。它可以工作,但我需要按两次。我试着用这个

while(getchar() != EOF){
  scanf("%f",&a);
  ...
}
但结果是一样的。有没有办法只按一次CTRL+D来结束这个循环?
感谢您的回复。

尝试测试scanf返回:如果您的流已结束,它将返回EOF。

尝试测试scanf返回:如果您的流已结束,它将返回EOF。

您可以直接在scanf中检查EOF:

while (scanf("%f",&a) != EOF) {
    ...
}

有关更多信息,请阅读其中scanf上的文档。

您可以直接在scanf中检查EOF:

while (scanf("%f",&a) != EOF) {
    ...
}

有关更多信息,请阅读scanf上的文档。

您至少有两种解决方案:

一,

而扫描%f,&a!=EOF{ ... }

二,。
从文件描述符中获取一个文件描述符您至少有两种解决方案:

一,

而扫描%f,&a!=EOF{ ... }

二,。
从文件描述符中获取一个值,您应该检查scanf调用的结果,不仅检查EOF,还应确保正确解析值。scanf返回成功扫描的项目数,在您的特定情况下,如果成功扫描一个浮点,它将返回1。如果解析不成功,那么在此之后就不能依赖a的值

int result;
do
{
    while ((result = scanf("%f", &a)) != EOF)
    if (result == 1)
    {
        // scan was successful, you can safely use the value of "a"
    }
    else
    {
        // scan was unsuccessful
        // you can skip to the next line, produce an error, etc.
    }
}

您应该检查scanf调用的结果,不仅检查EOF,还应确保正确解析值。scanf返回成功扫描的项目数,在您的特定情况下,如果成功扫描一个浮点,它将返回1。如果解析不成功,那么在此之后就不能依赖a的值

int result;
do
{
    while ((result = scanf("%f", &a)) != EOF)
    if (result == 1)
    {
        // scan was successful, you can safely use the value of "a"
    }
    else
    {
        // scan was unsuccessful
        // you can skip to the next line, produce an error, etc.
    }
}

试试这个,这可能会对您有所帮助:

while(1) {
    scanf("%f",&a);
    if(a==EOF)
    break;
    ......
}

试试这个,这可能会对您有所帮助:

while(1) {
    scanf("%f",&a);
    if(a==EOF)
    break;
    ......
}

如果scanf返回0,这将导致一个无限循环,如果无法将输入解析为float.Right,则会出现这种情况。A==1而不是!=EOF可能用于这种情况,但当参数数量发生变化时,很难进行维护。如果scanf返回0,这将导致无限循环,如果输入无法解析为浮点值,则会出现这种情况。对。A==1而不是!=EOF可能用于这种情况,但当参数数量发生变化时,很难进行维护。通常这不是一个好主意,因为如果scanf失败,并且他没有检查scanf结果,他将使用无效数据执行操作。如果他确实检查了扫描结果,就不需要feoftsdin。通常这不是一个好主意,因为如果扫描失败,他不检查扫描结果,他将使用无效数据执行操作。如果他确实检查了扫描结果,就不需要费奥夫丁了。