急~救救菜鸡吧,C++用cin.clear()和cin.sycn()清空缓存区一直清不了!

望大牛解答!!!

为什么用cin.clear()和cin.sycn()之后,输入非法字符,会自动变成之前输入的东西??

看代码

#include<iostream>
using namespace std;
void main(){
	int choice;
	int i=1;

	cout<<"第"<<i<<"次输入"<<endl;
	cout<<"cin.fail()="<<cin.fail()<<endl;
	cin>>choice;
	i++;
	cout<<choice<<endl;
	


	cout<<"第"<<i<<"次输入"<<endl;
	cin.clear();
	cin.sync();
	//fflush(stdin);
	//cin.ignore(numeric_limits<streamsize>::max(),'\n'); 
	cout<<"cin.fail()="<<cin.fail()<<endl;
	cin>>choice;
	i++;
	cout<<choice<<endl;


	cout<<"第"<<i<<"次输入"<<endl;
	cin.clear();
	cin.sync();
	//fflush(stdin);
	//cin.ignore(numeric_limits<streamsize>::max(),'\n'); 
	cout<<"cin.fail()="<<cin.fail()<<endl;
	cin>>choice;
	i++;
	cout<<choice<<endl;

	cout<<"第"<<i<<"次输入"<<endl;
	cin.clear();
	cin.sync();
	//fflush(stdin);
	//cin.ignore(numeric_limits<streamsize>::max(),'\n'); 
	cout<<"cin.fail()="<<cin.fail()<<endl;
	cin>>choice;
	i++;
	cout<<choice<<endl;


	system("pause");
}

看输出效果

我输入感叹号!后,为什么结果是1啊??我想让他是非法的。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^