#include <iostream>
#include <Windows.h>
#include <string>
int main(void) {
int a;
int b;
int c;
std::cin >> a >> b >> c;
std::cout << "a=" << a << std::endl;
std::cout << "b=" << b << std::endl;
std::cout << "c=" << c << std::endl;
system("pause");
return 0;
}
解决方案:
#include <iostream>
#include <limits> // 用于 std::numeric_limits
using namespace std;
int main(void) {
int a, b, c;
while (true) {
cout << "请输入a: ";
cin >> a;
if (cin.fail()) {
cout << "输入错误,应该输入一个整数" << endl;
cin.clear(); // 清除错误标志
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 清空缓冲区
} else {
break; // 输入正确,退出循环
}
}
while (true) {
cout << "请输入b: ";
cin >> b;
if (cin.fail()) {
cout << "输入错误,应该输入一个整数" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
} else {
break;
}
}
while (true) {
cout << "请输入c: ";
cin >> c;
if (cin.fail()) {
cout << "输入错误,应该输入一个整数" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
} else {
break;
}
}
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << c << endl;
system("pause");
return 0;
}
//不用循环隔开,可能当cin.fail()触发后,cin会进入失败状态,后续的输入操作(如cin >> b和cin >> c)会直接跳过,
cin.ignore()
是 C++ 中用于清空输入缓冲区的函数
cin.ignore() 有两个参数:
std::streamsize count:表示要忽略的最大字符数。如果为 std::numeric_limits<streamsize>::max(),则表示忽略缓冲区中的所有字符,直到遇到终止字符。
int delim:表示终止字符,默认值是换行符\n。当遇到这个字符时,忽略操作停止。