在while循环中使用,然后在cin为真时执行for循环

时间:2017-09-24 02:26:12

标签: c++ loops

int main()
{
    int in;
    cout << "please enter a number between 1 and 70" << endl;
    cin >> in;
    string star = "*";
    const int lessthan = in < 1;
    const int greaterthan = in > 70;
    while (true) {
        if  (lessthan || greaterthan) {
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
            cout << "please enter a number between 1 and 70" << endl;
        }
        else {
            for (int looptimes = 0; looptimes <=in ; ++looptimes ) {
                cout.width(looptimes);
                cout << star << endl;
                break;
            }
        }
    }
}

基本上我只想弄清楚如何在输入正确时结束循环。此外,我希望能够在输入正确后停止询问。

1 个答案:

答案 0 :(得分:0)

在进入逻辑之前,让我们谈谈变量的编码风格和用法。你根本不需要大部分。

  

基本上我只是想弄清楚如何在输入正确时结束循环

从您的代码判断,我假设正确 intput由一个范围为1 >= x >= 70的整数组成。这是一个可以用作while()循环条件的可靠语句

int some_number = 0;
do{
    std::cout << "Please enter a number between 1 and 70: ";
    std::cin >> some_number;
while(some_number < 1 && some_number > 70);

在这个(更简单的)代码片段中,您可以看到,只要输入的数字是有效整数超出所需范围,我们就会要求输入。

如果您希望用户可以输入除整数之外的其他内容(例如,而不是232,则用户可能会输入some text),您可能希望使用其他解决方案。

std::string line;
int some_number = 0;
do{
    std::cout << "Please enter a number between 1 and 70: ";
    std::getline(std::cin, line);
    try{
        some_number = std::stoi(line);
    } catch (...){
        some_number = 0;
    }
} while(some_number < 1 && some_number > 70);

这将继续要求所需范围内的整数,即使用户输入的内容无效(此处 - 不是数字)。我们简单地扫描输入并将其放入std::string。然后我们将该字符串解析为int。如果我们成功,则将返回值分配给我们的变量。如果我们不这样做(在输入无效的情况下)抛出并捕获将some_number设置为0的异常,则再次执行do-while循环。