其他答案都有效,并且有一些关于改进程序流程的知识,但我相信你要求的技巧是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
循环使用。