如果条件为真,则使if语句返回,如果while条件为真则使其返回

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个回答

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
作为一种改进,我们可以摆脱无用的布尔标志:while (true) { /*...*/ else break; }(我知道你保留它来坚持原始代码,这个评论更多地是针对 OP 的)。 - syam
@syam,我本来想把这个加到我的答案里,但是被其他事情分心了。谢谢! - Joseph Mansfield

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;

}

O_o!! 从现在开始我将使用这些技巧! - user1953285

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来提高代码可读性。对于简单的代码,可能不应使用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循环的方法。

我一直认为,在阅读不同的C语言书籍时,continue函数很少被使用。因此,我也不想使用它。但在那些情况下...使用它似乎是个不错的选择。 - user1953285
但是你能告诉我如何添加迭代吗? 比如说,当输入10个条目后,程序自动停止。 - user1953285

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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接