我希望用户输入的日期早于或等于2016年5月30日且不低于2016年1月1日。如果输入无效,则应返回并再次向用户提问。问题是<div class="wrapper" style="background-color:lightgrey;">
<div class="container">
<h1 id="titleHead">Projects</h1>
<div class = "ulContainer">
<ul>
<li>
<div class ="circle1">
<div id ="btn1"></div>
</div>
</li>
<li>
<div class ="circle2">
<div id ="btn2"></div>
</div>
</li>
</ul>
</div>
</div>
</div>
循环没有循环,它在输入无效后停止。这是代码:
do...while
答案 0 :(得分:2)
while(symbol!='/'&&!(month<=05)&&!(day<=31)&&year!=2016);
必须是
while(symbol!='/' || !(month<=05) || !(day<=31) || year!=2016);
或@Barmar建议
while(symbol!='/' || (month>05) || (day>31) || year!=2016);
由于&&
,您的原始表达式要求所有4都为真。使用||
的表达式只需要其中一个为真。
另请注意,由于您内部已有if
,因此您不需要检查。
所以你可以这么做:
while (true) {
cout<<"Enter date: ";
cin>>month>>symbol>>day>>symbol>>year;
// clear cin
cin.clear();
cin.ignore(10000,'\n'); // Or better:
// std::numeric_limits<std::streamsize>::max()
// instead of just 10000
if(symbol=='/' && month<=05 && day<=31 && year==2016){
// code for handling valid date here
// This will end the while loop
break;
}
else{
cout<<"You have entered an invalid input.\n"<<endl;
}
};
无关:也请注意此行
cin>>month>>symbol>>day>>symbol>>year;
^^ ^^
这里你读了symbol
两次,即第二个值只会覆盖第一个值。相反,你需要
cin >> month >> symbol1 >> day >> symbol2 >> year;
^ ^
并且因此会相应地更改其余代码。
更新
可以在此处测试代码https://ideone.com/KvCy1e
使用输入
dem/dem/dem
1/1/2016
输出
Enter date: You have entered an invalid input.
Enter date: 1/1/2016 is Friday.
更新2
正如@Barmar在评论中所注意到的那样,你应该在循环之前将变量初始化为某个无效日期。
int month = 13;
int day = 32;
int year = 0;
char symbol = 'x';
顺便说一下:由于你使用ints
,你应该检查负值。