【问题标题】:Return EOF from SCANF从 SCANF 返回 EOF
【发布时间】:2020-02-23 00:14:19
【问题描述】:

我还是不明白scanf如何返回EOF值。窗口中运行的程序。

来自scanf的描述:

"如果在第一次转换(如果有)完成之前发生输入失败,scanf 函数返回宏 EOF 的值。否则,scanf 函数返回分配的输入项的数量,可以少于提供的,甚至为零,以防早期匹配失败。”

代码是

int main()
{
int status,a1,a2,b1;
char str1[100];

b1=EOF;
printf("b1=%d\n",b1);
printf("Enter input\n");
status=scanf("%d%d",&a1,&a2);
printf("status=%d",status);

return 0;
}

案例1 输入:

hello

输出

status=0

案例2 输入:

^z  (press CTRL-Z) 

输出

staus=-1

万一是第一次转换前输入失败?如果是第一次转换前的输入失败 为什么scanf返回0。

在情况 2 中,我按 CTRL-Z 进行第一次输入,然后 scanf 返回 -1 所以scanf返回EOF的唯一方法是按CTRL-Z?如果不是,请用示例代码解释我

【问题讨论】:

  • “输入失败”与“解析输入失败”不同。 “输入失败”是指文件结尾或实际读取错误。

标签: c scanf eof


【解决方案1】:

scanf 逻辑相当简单。它返回:

  • EOF 如果根本无法从流中读取单个字符。
  • EOF 如果只能读取前导空白字符,直到出现错误或文件结尾才能进行转换 %c%s 或扫描集(因为前导空白不是这些的部分转化。
  • 0 如果读取的第一个字符与扫描集不匹配,或者空格后的第一个字符与标量转换的格式不匹配。
  • 否则至少返回1

【讨论】:

    猜你喜欢
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    相关资源
    最近更新 更多