在C++控制台程序中,常常需要用cin输入某个类型的变量,但是因为客户可能输入与变量类型不相符的情况。此时需要在处理数据前判断输入是否正确,不正确的时候重新输入。
简单的处理过程如下所示:
#include <iostream> using namespace std; int main() { int nFunc = -1; do { cout << "AAA: "; if (cin >> nFunc) { int n = 1; } else{ continue; } switch (nFunc) { case 1: cout << "111\n"; break; case 2: cout << "222\n"; break; default: break; } } while (nFunc!=0); } 以上代码的目的是,当输入的不是整型数的时候(如输入w),继续循环,重新输入nFunc。实际观察可以看到,程序并不会给第二次输入的机会,而是会不断输出AAA: 。产生上述的原因我觉得应该是错误格式的w被一直放在输入流中,导致每回cin都是取到w,然而w并不是我们要的int格式,所以一直输出AAA。解决办法是清空输入流的数据。这里如果用C的fflush(stdin)是没有用的,应该使用C++的clear等方法。具体如下所示:
#include <iostream> using namespace std; int main() { int nFunc = -1; do { cout << "AAA: "; cin.clear(); // 重置 cin 输入状态 cin.sync(); // 清除 cin 缓冲区未读取信息 if (cin >> nFunc) { int n = 1; } else{ continue; } switch (nFunc) { case 1: cout << "111\n"; break; case 2: cout << "222\n"; break; default: break; } } while (nFunc!=0); }