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。通常这不是一个好主意,因为如果扫描失败,他不检查扫描结果,他将使用无效数据执行操作。如果他确实检查了扫描结果,就不需要费奥夫丁了。