关于scanf和cin的问题

来源:百度知道 编辑:UC知道 时间:2024/06/24 10:18:04
写了个简单的代码,如下
int main()
{
int i = -1;

while (scanf("%d", &i) != EOF && i == -1)
{
printf("%d\n", i);
}

return 0;
}
运行时,我输入字符'a',程序死循环了?这是为什么呢?它不会把'a'当成97赋值给i吗?
使用cin>>i,也有这个问题。求答人解答

输入字符‘a'.输入错误输入,一旦输入了错误的类型,你的程序不是死锁,就是得到一个错误的结果。
解决方法:scanf()函数执行成功时的返回值是成功读取的变量数,也就是说,你这个scanf()函数有几个变量,如果scanf()函数全部正常读取,它就返回几。
所以你的函数为了避免输入错误,应该改为
#include <stdio.h>
int main()
{
int i = -1;

while (scanf("%d", &i) == 1 && i == -1)
{
printf("%d\n", i);
}

return 0;
}

首先我我指出改正的方法吧
while (scanf("%d", &i) != EOF && i == -1)
改成
while (scanf("%d", &i) && i == -1)
关于你的问题
首先scanf函数的原型是int scanf(const char * _Format,...)函数的第一个参数是格式控制符,后面的输入的参数列表,当输入的参数不满足前面的格式控制时候,返回值0;就比如说你程序里面的输入a,就是字符‘a’,但是他要求是一个整数,所以返回0,
然后在头文件<stdio.h>中我们发现这样一条预处理#define EOF (-1)也就是说,eof实际上就是-1,
这个时候当然满足了0!=-1,和i==-1的了哟,但是由于scanf函数错误,所以就无限循环了
至于cin流输入,基本是一个道理,不过他是流的状态出错(这里好像是,有点忘,基本没有用过)
以上是个人理解,欢迎一起交流,同时欢迎你光临我的空间