问题描述
目标:运行 while 循环,该循环将重复直到用户输入 1-3(含)之间的整数。因此,如果输入一个小于 1 或大于 3 的整数或输入任何字符或字符串,则循环重复。
我的菜鸟知识:当用户输入是整数时,我知道如何比较用户输入,但是当它是字符或字符串数据类型输入时,我得到的只是一个无限循环。另外,我将 inputtable 变量声明为整数,所以不知道如何继续。
我在 Google 上进行了一些搜索,但似乎找不到与我的问题相似的问题。
高度赞赏的建议:)
代码如下:
int Decision1 = 4;
while ( Decision1 < 1 || Decision > 3)
{
std::cout << "Enter answer here: ";
std::cin >> Decision1;
std::cout << "\n\n";
}
解决方法
int Decision1;
while(std::cin >> Decision1) {
if(Decision1 >= 1 && Decision1 <= 3) break;
// todo
}
,
您可以使用 ASCII 码来检查数字或字符。
#include <iostream>
int main() {
char Decision1 = '0';
while ( (Decision1 < 49 && Decision1 >=47) || (Decision1 >51 && Decision1 <=57 ))
{
std::cout << "Enter answer here: ";
std::cin >> Decision1;
std::cout << Decision1;
std::cout << "\n";
}
}
希望对你有帮助。
,请记住:当您阅读来自 std::cin
的输入时,您正在阅读在控制台输入的文本。流提取器尝试将该文本转换为目标类型。也就是说,在
int i;
std::cin >> i;
>>
运算符查找数字字符并计算出这些字符代表的值。如果字符无法转换为整数值,则提取失败。流具有到 bool
的转换,它告诉您流是否处于良好状态,或者尝试的操作是否失败。所以:
int i;
if (std::cin >> i)
std::cout << "got a value!\n";
要编写一个提示输入有效的循环,您需要反转测试:
int i;
while (!(std::cin >> i) {
std::cout << "bad input\n":
// now clear the input stream,so it's back in a good state
}
要也检查该值是否在所需范围内,只需执行以下操作:
int i;
while (!(std::cin >> i) || i < 1 || i > 3) {
std::cout << "bad input\n":
// now clear the input stream,so it's back in a good state
}
要清除输入流,您必须重置其内部标志。你用 std::cin.clear();
做到这一点。而且,根据您认为输入的内容,您可能希望删除用户输入的任何其他字符。你用 std::cin::ignore(std::numeric_limits<std::streamsize>::max(),'\n')
做到这一点。这告诉流丢弃字符,直到它到达换行符(按 ENTER),或者直到它读取了大量字符。
综合起来:
int i;
while (!(std::cin >> i) || i < 1 || i > 3) {
std::cout << "bad input\n":
std::cin.clear();
std::cin::ignore(std::numeric_limits<std::streamsize>::max(),'\n');
}
是的,当输入是有效整数但超出范围时,这会清除流状态并刷新输入;那是无害的。这是浪费时间,但键盘输入的速度受用户键入速度的限制,这比此循环中的代码执行的任何操作慢得多。