先看一段代码:代码①
int main()
{
int n = 'A';
printf("%d", n);
return 0;
}
这段程序不需要读取,只需要将A的ASC II码值,用10进制的形式打印出来!
再看代码③
{
int n = 0;
int m = 0;
int ret = scanf("%d %d", &n, &m); //输入A 8
printf("%d",ret); //打印 0
return 0;
}
{
int n = 0;
int m = 0;
int ret = scanf("%d %d", &n, &m); //输入Ctrl + z 8
printf("%d",ret); //打印 -1
return 0;
}
再看代码⑥
int main()
{
int n = 0;
int m = 0;
int ret = scanf("%d %d", &n, &m); //输入8 Ctrl + z
printf("%d",ret); //打印 1
return 0;
}
解析:
此时第一个%d成功读取到数字8,会读取成功,再读取到EOF,会被认为读取失败。
scanf的返回值是成功读取的元素个数,为 1
因为只有n是成功被读取的,m并没有被成功读入(m还是初始化的值)。
所以ret 为 1
总结:当死循环、莫名读取的时候,学会使用Sleep来检查缓冲区!!!
2.当读取的类型不符合时,不会跳过此元素
3.EOF会读取失败