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

10-12 22:43
查看更多