边做边循环的麻烦

Trouble with do-while-loop

本文关键字:麻烦 循环      更新时间:2023-10-16

我正在尝试编写一个计算素数的程序,但我使用的循环有问题。

法典:

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    unsigned long int lower_limit;
    unsigned long int upper_limit;
    cout << "n" << "Program calculates prime numbers in a given range between 2 and 4.294.967.295.";
    cout << "n" << "Input range in which prime numbers are to be calculated... ";
    do
    {
        cout << "nn" << "Lower Limit:t";     cin >> lower_limit;     
        cout << "n" << "Upper Limit:t";       cin >> upper_limit;     
        if(lower_limit >= upper_limit)
        {
            cout << "nInvalid Input: Value of Upper Limit has to be bigger than value of Lower Limit.";
            cout << "nSelect new numbers.";
        }
        if(!(cin >> lower_limit) || !(cin >> upper_limit))
        {
            cout << "nInvalid Input: Values of Lower Limit and Upper Limit have to be integers.";
            cout << "nSelect new numbers.";
        }
    }while(lower_limit >= upper_limit || !(cin >> lower_limit) || !(cin >> upper_limit));
    return(0);
}

如果我输入值来触发Lower Limit >= Upper Limit它会正确触发第一个错误,但之后不会重复 do-while-loop,也不会关闭程序(return(0))......因此,程序不会重复 do-while-loop,程序也不会退出它。我真的不知道它在那里实际在做什么。

如果我输入值来触发!(cin >> lower_limit) || !(cin >> upper_limit)("adfd"等),整个程序就会变得精神错乱,并迅速重复 do-while-循环,甚至忽略cin >> lower_limit;cin >> upper_limit;语句。

没有人有可以帮助我的想法?

干杯!

一点是,如果输入无效,则需要通过以下方式清除错误状态:

cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');

您的循环应更改为以下内容:

do
{
  while ( !(cin >> lower_limit >> upper_limit) ) {
    cout << "Invalid input, Please re-entern";      
    cin.clear();
    cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
  }
  if(lower_limit >= upper_limit)
  {
    cout << "nInvalid Input: Value of Upper Limit has to be bigger than value of Lower Limit.";
    cout << "nSelect new numbers.";
  }

} while(lower_limit >= upper_limit);