在C中检测EOF

its*_*ode 25 c stdio

我使用以下C代码从用户获取输入,直到EOF发生,但问题是此代码不起作用,它在第一次输入后终止.任何人都可以告诉我这个代码有什么问题.提前致谢.

float input;

printf("Input No: ");
scanf("%f", &input);

while(!EOF)
{
    printf("Output: %f", input);
    printf("Input No: ");
    scanf("%f", &input);
}
Run Code Online (Sandbox Code Playgroud)

CB *_*ley 42

EOF只是一个带有值的宏(通常为-1).您必须针对某些内容进行测试EOF,例如getchar()调用的结果.

测试流结束的一种方法是使用该feof功能.

if (feof(stdin))
Run Code Online (Sandbox Code Playgroud)

请注意,"流结束"状态仅在读取失败设置.

在您的示例中,您应该检查scanf的返回值,如果这表明没有读取字段,则检查文件结束.

  • 请注意Brian的评论:stdin通常不会注册EOF,因为用户可以输入更多内容.在Unixy系统上,这通常意味着控制-D. (3认同)

A. *_*evy 9

EOF是C中的常量.您没有检查EOF的实际文件.你需要做这样的事情

while(!feof(stdin))
Run Code Online (Sandbox Code Playgroud)

这是feof的文档.您还可以检查scanf的返回值.它返回成功转换的项目数,或者EOF它是否到达文件末尾.