第1个回答 2010-04-29
可以,因为cin执行的操作时从输入缓冲区读入一个东西。这个时候如果在S前面有东西,当然就不能读到这个字符。你可以在“cin>>i;
”后面加一个函数“getch(word)”从缓冲区把你不需要的那个字符拿走,就可以了。这个方法很多地方都用得上。不过函数我可能记得不对。
第2个回答 2010-04-29
我运行了一下你写的程序,你写的不会将那个字符串赋值给s,在进行i输入的时候,类型不匹配,cin就被关闭了,i和s都没有值,不过i有一个系统默认值。我是这样改了一下。
#include <iostream>
using namespace std;
void main()
{
int i;
char s[7];
cin>>i;
cin.clear();
cin>>s;
cout<<i<<endl;
cout<<s<<endl;
}
在输入i的时候,类型不匹配,cin的一些状态位被设置,cin就被关闭了,你所输入的内容也保留在了内存了,也不会赋值给s,因为 cin>>s得时候,cin还是被关闭的,所以要想赋值就要重新打开cin,很简单,就一条语句, cin.clear()。这句话的意思是由于 cin>>i出错,cin的状态被设置(即意味着不能在进行输入),而cin.clear()就把所有状态位清楚(意思是就可以输入了)。
但一般安全起见会这样写
#include <iostream>
using namespace std;
void main()
{
int i;
char s[7];
while(!(cin>>i))//直到输入正确为止
{
cin.clear();//输入不正确,就清除位,以便重新输入
while (cin.get()!='\n')//抛弃内存里面剩下的数据
{
continue;
}
}
// cin.clear();
while(!(cin>>s))//直到输入正确为止
{
cin.clear();//输入不正确,就清除位,以便重新输入
while (cin.get()!='\n')//抛弃内存里面剩下的数据
{
continue;
}
}
cout<<i<<endl;
cout<<s<<endl;
}
第3个回答 2010-04-29
加个判断语句吧
在cin >> i;后面加上个判断语句
while (!cin)
{
cin.clear();
while (cin.get()!='\n')
{
continue;
}
cout << "输入类型错误,请重新输入";
cin >> i;
}