我仍然不明白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?
最佳答案
scanf
逻辑很简单。它返回:EOF
,即使不是单个字符也可以从流中读取。
如果EOF
,%c
或扫描集以外的转换只能读取直到错误或文件结尾的前导空白字符,则%s
(因为前导空白不是这些转换的一部分)。0
如果读取的第一个字符与扫描集不匹配,或者空格后的第一个字符与标量转换的格式不匹配。
否则,它至少返回1
。
关于c - 从SCANF返回EOF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58578912/