C++ 不要在循环工作不正常时进行操作
我希望用户输入的日期应在2016年5月30日之前或等于2016年1月12日之前。如果输入无效,则应返回并再次向用户提问。问题是,C++ 不要在循环工作不正常时进行操作,c++,C++,我希望用户输入的日期应在2016年5月30日之前或等于2016年1月12日之前。如果输入无效,则应返回并再次向用户提问。问题是,do…当loop没有循环时,它会在输入无效后停止。代码如下: #include<iostream> using namespace std; int main(){ int month,day,year; char symbol; do{ cout<<"Enter date: "; ci
do…当
loop没有循环时,它会在输入无效后停止。代码如下:
#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;
}
#包括
使用名称空间std;
int main(){
int月、日、年;
字符符号;
做{
月份>>符号>>日>>符号>>年;
如果(符号=='/'&&month)
由于&&
,原始表达式要求所有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 >> symbol1 >> day >> symbol2 >> year;
^ ^
当然,也要相应地更改代码的其余部分
更新
代码可以在这里进行测试
输入
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
你应该检查负值。你知道一周中的某一天有公式,你不必写无数的if语句列出所有的日期。像if(day==3 | day==10 | day==17 | day==24 | day==31)
可以简化为if(day%7==3)
。谢谢,我会从维基百科上读到。但是我怎样才能让while循环工作呢?请参阅发布的答案。问题是你的while条件是错误的。!(第5个月)
。或者,您可以使用德摩根定律组合所有条件,这可能会使情况更清楚。循环现在正在工作,但它不会停止输出“输入日期:您输入了无效输入。”…我看起来像一个矩阵。呵呵。这是为什么?@Dem-那一定是因为输入的值无效。对于调试,请在cin
@Bamar之后添加一个cout
值-是的,它可以写得不同-我想保留OP的样式以产生差异clear@Dem您希望它设置什么month
当您输入Dem
而不是数字时,您的代码只是检查金额,您永远不会测试输入是否正确格式化为数字。
cin >> month >> symbol1 >> day >> symbol2 >> year;
^ ^
dem/dem/dem
1/1/2016
Enter date: You have entered an invalid input.
Enter date: 1/1/2016 is Friday.
int month = 13;
int day = 32;
int year = 0;
char symbol = 'x';