这可能只需要基本的问题解决技巧,但我试图创建一个非常简短的方法:询问用户输入,并且只说输入在没有通过条件检查至少一次之后是不合法的。一个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);
答案 0 :(得分:4)
这是一个典型的例子,while
和do
/ 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);
一个额外的变量..可能是好的(更多的自我文档)