如果条件为真,则返回if条件,如果为真,则返回

时间:2013-03-02 15:04:55

标签: c++

当条件为真或假时,如何让它返回并再次提出问题,让用户重新输入值? 这是我想要实现的:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()
{
    int n;
    cout<<"Enter numbers. Press 5 to stop: ";
    cin>>n;
    bool tr=true;
    while(tr)
    {
        if(n!=5)
            cout<<"You entered "<<n; //How to make it return again, since its false? I keep getting infinite loops :( ;
        else 
            tr=false;
    }
    return 0;
}

4 个答案:

答案 0 :(得分:3)

您需要在 while循环中提示用户,以便它在每次迭代中发生:

int n;
bool tr = true;
while(tr)
{
  cout << "Enter numbers. Press 5 to stop: ";
  cin >> n;
  if(n!=5) {
    cout << "You entered " << n;
  } else {
    tr = false;
  }
}

答案 1 :(得分:2)

将所有代码(除'n'和'tr'定义除外)放入while循环中,如下所示:

int main()
{
int n;
bool tr=true;
while(tr)
{
cout<<"Enter numbers. Press 5 to stop: ";
cin>>n;
    if(n!=5)
        cout<<"You entered "<<n;

    else 
        tr=false;
}
return 0;

}

答案 2 :(得分:2)

另一个回答了所有的工作,并且有一些东西可以学习如何从它们改进程序流程,但我相信你要求的技巧是continue关键字,它会跳过这个迭代的剩余部分。循环。

bool tr = true;
int n;
while (tr)
{
    cout << "Enter numbers...";
    cin >> n;
    if (n != 5)
        continue;
    else
        tr = false;
}

编辑第1部分:在continue关键字上。

您希望尽可能使代码可读。在这个例子中,它的使用是不必要的(正如其他海报所示);但它是问题的答案“我如何在循环的迭代中跳过剩余的处理并继续下一次迭代?”。通常,这种破坏性指令实际上使代码更难阅读;但有时情况恰恰相反。使用continuebreak可以完成的任何事情(或者至少几乎任何事情)都可以在没有它们的情况下完成,所以如果你打算使用它们,你想要有一个明确的理由这样做。通常,当我使用continue时,这是因为我循环遍历输入集合,并且我想在输入不是我期望的格式时跳过处理循环。像这样的东西(伪代码)......

foreach (Input i in ReceivedInputs)
{
    if (i.isBad())
    {
        cout << "Bad input";
        continue;
    }
    // Do massive block of calculating here.
}

比这更容易阅读...

foreach (Input i in ReceivedInputs)
{
    if (i.isBad())
        cout << "Bad input";
    else
    {
        // Do massive block of calculating here.
    }
}

因为第二个版本会让你更难跟踪你所处的范围,如果你正在寻找大量计算结束的话。在这种情况下,我通过continue获得了代码可读性,因此我使用它。但简单的代码可能不应该使用它。 break关键字类似,但提出break有益的示例要容易得多。

编辑第2部分:多次迭代

这只是设置循环的问题;这里没有神奇的关键词。我能提出的最短路可能是这样的:

int n = 0;
int numberToTake = 10;

for ( int numbersTaken = 0; numbersTaken < numberToTake; ++numbersTaken)
{
    cout << "Enter numbers...";
    int n = 0;
    for (cin >> n; n != 5; cin >> n)
        cout << "Try again.";
    // Do whatever processing on n you want to do here.
}

虽然我应该指出,这样做,你将从用户获得的唯一价值是5,如果他输入任何不适合整数的东西,你将得到意想不到的行为。 / p>

编辑3:在更全面地阅读评论后,我认为您只是在寻找for循环的更传统用法。

答案 3 :(得分:0)

无需额外的bool变量。

成语可以是:无限循环,直到用户输入5

for(;;) {  // Loops infinitely
  cout << "Enter numbers. Press 5 to stop: ";
  cin >> n;
  if(n == 5)
    break;  // Exits the loop
  cout << "You entered " << n;  // Before the if if you want to print 5 as well
}