我已经设置了一个过滤掉错误输入的while循环。我正在输入第一个while循环的条件为false,2和35的数字,但它正在打印“请输入两个正整数”到屏幕。它不应该,我找不到我的错误。对不起,如果这是一个愚蠢的问题,非常新的初学者。任何帮助深表感谢!谢谢
这是打印到屏幕的内容:
输入范围以测试素数。输入两个正整数,小整数,用空格分隔。
2
35
请输入两个正整数。
//Input range
cout << "Enter range to test for primes. Enter two positive integers, the smaller first, separated by whitespace.\n";
cin >> range_min >> range_max;
cout << range_min << range_max;
//Check if input is valid.
while (range_min < 0)
{
cout << "Please input two *positive* integers.\n";
cin >> range_min >> range_max;
while (range_max < 0)
{
cout << "Please input two *positive* integers.***\n";
cin >> range_min >> range_max;
while (range_min > range_max)
{
cout << "Please input the smaller integer first.\n";
cin >> range_min >> range_max;
}
}
}
答案 0 :(得分:0)
您可以通过在while
语句中添加另一个表达式来获益:
while ((range_min < 0) || (range_max < 0))
{
cout << "Please enter positive range values: ";
cin >> range_min >> range_max;
}
“||”意味着逻辑OR。它被读作而range_min&lt; 0 OR range_max&lt; 0
答案 1 :(得分:0)
正确,您使用它时的构造也将接受值3和-1作为合法范围,因为外部while循环只检查range_min值。如果range_min为3且因此大于0,则while循环将不会执行。
因此,在某些情况下,您希望用户输入新值:
1)其中一个是否定的或两个
2)两者都是正数但相等或range_min大于range_max
while ((range_min < 0 || range_max <= 0) || ((range_min>0 && range_max>0) && (range_min-range_max)<=0 )) {
cout << "Invalid range! Enter two new values: ";
cin >> range_min >> range_max;
}
但是好的,这仍然没有解释你所描述的行为的原因。 我编译了你的代码并没有注意到这种行为。第一个问题是,如果这是一个可重现的&#34;错误&#34;?这两个数字总是保持不变吗?