如题所述
其实是有可能输入了非数字,导致死循环了。
EOF是-1。如果scanf用%d扫描到非数字,就会返回0。但是不会消耗掉数据,然后又进来扫描,还是扫描到非数字,你运行一下下面的程序就好了。
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
int ret=0;
int n=0;
#if 1
printf("EOF %d\n",EOF);
ret=scanf("%d",&n);
printf("ret %d n=%d\n",ret,n);
while(ret!=EOF)
{
ret=scanf("%d",&n);
printf("ret %d n=%d\n",ret,n);
}
#else
while(scanf("%d",&n)!=EOF);
#endif
return 0;
}
EOF是-1。如果scanf用%d扫描到非数字,就会返回0。但是不会消耗掉数据,然后又进来扫描,还是扫描到非数字,你运行一下下面的程序就好了。
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
int ret=0;
int n=0;
#if 1
printf("EOF %d\n",EOF);
ret=scanf("%d",&n);
printf("ret %d n=%d\n",ret,n);
while(ret!=EOF)
{
ret=scanf("%d",&n);
printf("ret %d n=%d\n",ret,n);
}
#else
while(scanf("%d",&n)!=EOF);
#endif
return 0;
}
温馨提示:答案为网友推荐,仅供参考