Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不要在循环工作不正常时进行操作_C++ - Fatal编程技术网

C++ 不要在循环工作不正常时进行操作

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

我希望用户输入的日期应在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: ";
        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';