do while循环工作不正常
do while loop not working properly
我希望用户输入一个日期,该日期在2016年5月30日之前或等于2016年1月1日。如果输入无效,那么它应该返回并再次向用户提问。问题是do...while
循环没有循环,它在输入无效后停止。这是代码:
#include<iostream>
using namespace std;
int main(){
int month,day,year;
char symbol;
do{
cout<<"Enter date: ";
cin>>month>>symbol>>day>>symbol>>year;
if(symbol=='/'&&month<=05&&day<=31&&year==2016){
cout<<month<<symbol<<day<<symbol<<year;
if(month==01){ // this code is for month of January
if(day==3||day==10||day==17||day==24||day==31){
cout<<" is Sunday.";
}
else if(day==4||day==11||day==18||day==25){
cout<<" is Monday.";
}
else if(day==5||day==12||day==19||day==26){
cout<<" is Tuesday.";
}
else if(day==6||day==13||day==20||day==27){
cout<<" is Wednesday.";
}
else if(day==7||day==14||day==21||day==28){
cout<<" is Thursday.";
}
else if(day==1||day==8||day==15||day==22||day==29){
cout<<" is Friday.";
}
else if(day==2||day==9||day==16||day==23||day==30){
cout<<" is Saturday.";
}
}
else if(month==02){ //this code is for month of February
if(day==7||day==14||day==21||day==28){
cout<<" is Sunday.";
}
else if(day==1||day==8||day==15||day==22||day==29){
cout<<" is Monday.";
}
else if(day==2||day==9||day==16||day==23){
cout<<" is Tuesday.";
}
else if(day==3||day==10||day==17||day==24){
cout<<" is Wednesday.";
}
else if(day==4||day==11||day==18||day==25){
cout<<" is Thursday.";
}
else if(day==5||day==12||day==19||day==26){
cout<<" is Friday.";
}
else if(day==6||day==13||day==20||day==27){
cout<<" is Saturday.";
}
}
else if(month==03){ //this code is for month of March
if(day==6||day==13||day==20||day==27){
cout<<" is Sunday.";
}
else if(day==7||day==14||day==21||day==28){
cout<<" is Monday.";
}
else if(day==1||day==18||day==15||day==22||day==29){
cout<<" is Tuesday.";
}
else if(day==2||day==9||day==16||day==23||day==30){
cout<<" is Wednesday.";
}
else if(day==3||day==10||day==17||day==24||day==31){
cout<<" is Thursday.";
}
else if(day==4||day==11||day==18||day==25){
cout<<" is Friday.";
}
else if(day==5||day==12||day==19||day==26){
cout<<" is Saturday.";
}
}
else if(month==04){ //this code is for month of April
if(day==3||day==10||day==17||day==24){
cout<<" is Sunday.";
}
else if(day==4||day==11||day==18||day==25){
cout<<" is Monday.";
}
else if(day==5||day==12||day==19||day==26){
cout<<" is Tuesday.";
}
else if(day==6||day==13||day==20||day==27){
cout<<" is Wednesday.";
}
else if(day==7||day==14||day==21||day==28){
cout<<" is Thursday.";
}
else if(day==1||day==8||day==15||day==22||day==29){
cout<<" is Friday.";
}
else if(day==2||day==9||day==16||day==23||day==30){
cout<<" is Saturday.";
}
}
else if(month==05){ //this code is for month of May
if(day==1||day==8||day==15|day==22||day==29){
cout<<" is Sunday.";
}
else if(day==2||day==9||day==16||day==23||day==30){
cout<<" is Monday.";
}
else if(day==3||day==10||day==17||day==24||day==31){
cout<<" is Tuesday.";
}
else if(day==4||day==11||day==18||day==25){
cout<<" is Wednesday.";
}
else if(day==5||day==12||day==19||day==26){
cout<<" is Thursday.";
}
else if(day==6||day==13||day==20||day==27){
cout<<" is Friday.";
}
else if(day==7||day==14||day==21||day==28){
cout<<" is Saturday.";
}
}
break;
}
else{
cout<<"You have entered an invalid input.n"<<endl;
}
}while(symbol!='/'&&!(month<=05)&&!(day<=31)&&year!=2016);
return 0;
}
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都为true。使用||
的表达式只需要其中一个为true。
还请注意,您不需要该检查,因为您已经在里面有了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
,你就应该检查负值。
相关文章:
- 不确定要在我的main中放入什么才能使我的代码正常工作
- C++中的memset函数工作不正常
- 为什么 HeapFree() 不能正常工作?
- 如果不在窗口 10 中声明名为 openCV 的 openCV namedWindow,QT 图像显示将无法正常工作
- 通用线程池类工作不正常
- 循环仅对第一行正常工作.其他行不受 for 的影响
- 为什么在C++中使用关系运算符创建的模板函数不能对字符串正常工作?
- C++自定义删除运算符不能正常工作?
- 为什么使用 exec() 重新启动程序不能正常工作?
- C++:返回本地对象,但不能正常工作
- 名为DLL的C++windows服务程序工作不正常
- C++-循环中的If语句工作不正常
- 为什么带lcov的codecov在Travis上不能正常工作,而在我当地的Linux Mint上却不能正常工作
- While循环和if/else语句工作不正常
- 为什么sizeof函数在这里不能正常工作
- 异步操作的 Asio 处理程序在其同步对应项正常工作时不会调用
- C++:最大数组值函数工作不正常
- 图像上的按钮不正常工作在QT
- 透明SDL2游戏(WIN32色键不正常工作)
- Qt 5.3 QSystemTrayIcon不正常工作[Linux]