2017-09-24 105 views
-3
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; 
      } 
     } 
    } 
} 

基本上我只想弄清楚如何从输入正确时结束循环。此外,我希望能够在输入正确时停止询问。在while循环中使用,然后执行for循环一次cin为真

+0

哇,这是一些丑陋的缩进。 – melpomene

+0

出于好奇 - 为什么'star'是'string'而不是'char','lessthan'和'greaterthan'是'const int's而不是'const bool's? – Fureeish

+0

谭的风格代码...我拒绝阅读。 – iBug

回答

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); 

在代码中你可以看到,我们所要求的输入,只要输入的号码是有效的整数这个(简单得多)段是不在理想范围内的。

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

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循环再次执行。

+0

我并不是故意忽视这一点。但我已经尝试过这一点,如果你在这个while循环中包含for循环,那么while循环并没有做它应该做的事情,所以我想我可以缩小到内部for循环是我的问题,因为它看起来外部的while循环只会尽其所能。感谢您的帮助,我很欣赏我的代码正在像您的反馈一样被查看。 – rolaandoes

+0

@rolaandoes这个答案解释了如何处理错误输入的问题,只要前一个错误就要求输入错误。如果您遇到其他困难,请注明。我假设你想在你收到正确的输入后执行一些代码。你的'for'循环应该如何处理正确的输入?我猜你想打印某种模式,但是我在循环体的末尾发现了一个'break'声明。尝试删除它,看看它是否工作 – Fureeish

+0

我希望它连续询问何时输入错误,所以我希望循环在询问后等待输入,并且一旦输入正确后,使用该模式运行for循环,然后停止模式在第一次印刷之后。 – rolaandoes