从SCANF返回EOF

时间:2019-10-27 11:23:46

标签: c scanf eof

我仍然不明白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

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

在第2种情况下,我按CTRL- Z进入第一个输入,scanf返回-1 因此,scanf返回EOF的唯一方法是按CTRL-Z?否则请通过示例代码向我解释

1 个答案:

答案 0 :(得分:0)

scanf的逻辑非常简单。它返回:

  • EOF甚至根本无法从流中读取单个字符。
  • EOF,如果对于 %c%s或扫描集(因为前导空格不是这些的转换的一部分。
  • 0,如果读取的第一个字符与扫描集不匹配,或者空格后的第一个字符与标量转换的格式不匹配。
  • 否则,它至少返回1
相关问题