在while循环中找不到错误?

时间:2015-02-18 23:35:27

标签: c++ debugging while-loop

我已经设置了一个过滤掉错误输入的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;
        }
    }
}

2 个答案:

答案 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;?这两个数字总是保持不变吗?