do-while循环使用if语句,只在一次迭代后打印一条消息?

时间:2015-02-22 14:03:13

标签: c++

这可能只需要基本的问题解决技巧,但我试图创建一个非常简短的方法:询问用户输入,并且只说输入在没有通过条件检查至少一次之后是不合法的。一个while循环似乎适合..

我在下面如何实现它总是会产生一个问题,即1个特定数字会产生错误,即如果用户输入0,你就不会得到消息,我可以将它改成一个非常特殊的数字但仍然存在这个前端错误。我来自Java背景,其中null是默认值,这使得这很容易,但由于效率原因,这似乎不是c ++中的情况。我可以声明一个bool,但这似乎太过于一种解决方法。

以下是我现在的代码:

int birthYear = 0;
do {
    if (birthYear != 0) cout << "Your input " << birthYear << " is not a legit birthday";
    cout << "What is the year you were born?: "; cin >> birthYear;
} while (birthYear < 1900 || birthYear > 2100);

2 个答案:

答案 0 :(得分:4)

这是一个典型的例子,whiledo / while循环都不合适,因为你需要在检查循环条件之前和之后做一些事情。< / p>

将循环重写为“永久”循环,中间带有break

for (;;) {
    cout << "What is the year you were born?: ";
    cin >> birthYear;
    if (birthYear >= 1900 && birthYear <= 2100) {
        break;
    }
    cout << "Your input " << birthYear << " is not a legit birthday";
}

答案 1 :(得分:1)

你可以尝试添加一个标志:

int birthYear = 0;
bool birthYearInvalid = false;
do {
    if (birthYearInvalid) cout << "Your input " << birthYear << " is not a legit birthday";
    cout << "What is the year you were born?: "; cin >> birthYear;
    birthYearInvalid = (birthYear < 1900 || birthYear > 2100);
} while (birthYearInvalid);

一个额外的变量..可能是好的(更多的自我文档)