检查 cin 输入,清除输入缓冲区
checking cin input, clearing input buffer
C++ 新手 - 尝试检查输入格式。什么都试过了,束手无策。任何帮助,将不胜感激。我已将我的问题分解为这个基本案例:
while(1) {
cin >> x;
cout << "asked!" << endl;
cin.ignore(1000, 'n');
}
将导致 "asked!" 在第一个无效输入(为 x 输入非整数)后无限循环。我想处理不正确的输入。以下将不起作用:
do {
cin.clear();
cin >> x >> y;
if (cin.fail())
{
cout << "Invalid input." << endl;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
} while (cin.fail());
您应该在 std::cin.ignore()
之前立即使用 std::cin.clear()
来清除流的错误状态,否则所有未来的 cin
操作都将 exit/fail。也可以更直接的测试std::cin
操作是否成功...
do {
if (std::cin >> x >> y) break;
std::cout << "Invalid input, please try again...\n";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
} while (true);
以下有效:
do {
if (cin >> customers >> chairs)
break;
if (cin.fail())
{
cout << "Invalid input." << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
} while (true);
感谢托尼 D
C++ 新手 - 尝试检查输入格式。什么都试过了,束手无策。任何帮助,将不胜感激。我已将我的问题分解为这个基本案例:
while(1) {
cin >> x;
cout << "asked!" << endl;
cin.ignore(1000, 'n');
}
将导致 "asked!" 在第一个无效输入(为 x 输入非整数)后无限循环。我想处理不正确的输入。以下将不起作用:
do {
cin.clear();
cin >> x >> y;
if (cin.fail())
{
cout << "Invalid input." << endl;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
} while (cin.fail());
您应该在 std::cin.ignore()
之前立即使用 std::cin.clear()
来清除流的错误状态,否则所有未来的 cin
操作都将 exit/fail。也可以更直接的测试std::cin
操作是否成功...
do {
if (std::cin >> x >> y) break;
std::cout << "Invalid input, please try again...\n";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
} while (true);
以下有效:
do {
if (cin >> customers >> chairs)
break;
if (cin.fail())
{
cout << "Invalid input." << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
} while (true);
感谢托尼 D