3

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

#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

4 回答 4

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;
  }
}
于 2013-03-02T15:08:17.830 回答
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;

}
于 2013-03-02T15:13:01.633 回答
2

其他答案都有效,并且有一些关于改进程序流程的知识,但我相信你要求的技巧是continue关键字,它跳过了循环迭代的其余部分。

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

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

你想让你的代码尽可能的可读。在这个例子中,它的使用是不必要的(正如其他海报所示);但这是对“如何在循环的此迭代中跳过其余处理并继续到下一个迭代?”问题的答案。通常,这种破坏流程的指令实际上会使代码更难阅读。但有时情况恰恰相反。continue任何可以用or完成的事情(或者,至少,几乎任何事情)都可以break在没有它们的情况下完成,所以如果你要使用它们,你需要有一个明确的理由这样做。通常,当我使用 时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,如果他输入任何不适合整数的东西,你会得到意想不到的行为。

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

于 2013-03-02T15:18:59.030 回答
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
}
于 2013-03-02T15:43:01.737 回答