目标:运行一个while循环,该循环将重复,直到用户输入1-3(包括1-3(之间的整数。因此,如果输入了小于1或大于3的整数,或者输入了任何字符或字符串,则循环重复。
我的常识是:当用户输入是整数时,我知道如何比较用户输入,但当它是char或string数据类型输入时,我得到的只是一个无限循环。另外,我将inputtable变量声明为一个整数,所以不知道该如何处理。
我在谷歌上搜索了一些,但似乎找不到与我相似的问题
非常感谢您的建议:(
以下代码:
int Decision1 = 4;
while ( Decision1 < 1 || Decision > 3)
{
std::cout << "Enter answer here: ";
std::cin >> Decision1;
std::cout << "nn";
}
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;
CCD_ 2运算符查找数字字符并计算出这些字符代表的值。如果无法将字符转换为整数值,则提取失败。流具有到bool
的转换,该转换告诉流是否处于良好状态,或者尝试的操作是否失败。因此:
int i;
if (std::cin >> i)
std::cout << "got a value!n";
要编写一个提示有效输入的循环,您需要反转测试:
int i;
while (!(std::cin >> i) {
std::cout << "bad inputn":
// 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 inputn":
// 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 inputn":
std::cin.clear();
std::cin::ignore(std::numeric_limits<std::streamsize>::max(), 'n');
}
是的,当输入是有效整数但超出范围时,这会清除流状态并刷新输入;这是无害的。这是浪费时间,但键盘输入的速度受到用户键入速度的限制,这比这个循环中的代码慢得多。