我仍然不明白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?否则请通过示例代码向我解释
答案 0 :(得分:0)
scanf
的逻辑非常简单。它返回:
EOF
甚至根本无法从流中读取单个字符。EOF
,如果对于 %c
,%s
或扫描集(因为前导空格不是这些的转换的一部分。0
,如果读取的第一个字符与扫描集不匹配,或者空格后的第一个字符与标量转换的格式不匹配。1
。