问关于 c++ 开关和 if 程序

Q about with c++ switch and if program

本文关键字:if 程序 开关 c++      更新时间:2023-10-16

嗨,我试图做一个从用户那里获取日期的程序,检查日期是否正确并返回带有月份的日期作为单词如果日期不正确,程序应退出但是当我输入数字时,它什么都没有请帮助我

{
    int day,month,year;
    cout<<"enter dayn";
    cin>>day;
    cout<<"enter monthn";
    cin>>month;
    cout<<"enter yearn";
    cin>>year;
    if ( (   (((month==1)|| (month==3)|| (month==5)|| (month==7)|| (month==8)|| (month==10)|| (month==12) )&&((day<32)&&(day>0)))      ||      (((month==4)|| (month==6)|| (month==9)|| (month==11))&&((day<31)&&(day>0)))  ||  ((month==2)&&((day<29)&&(day>0)))  ) && ((year>-1)&&(year<3001))   )
     {
          switch(month)
          {
               case 1:
                   cout<<day<<"/"<<"january/"<<year;
                   break;
               case 2:
                   cout<<day<<"/"<<"febuary/"<<year;
                   break;
               case 3:
                   cout<<day<<"/"<<"march/"<<year;
                   break;
               case 4:
                    cout<<day<<"/"<<"april/"<<year;
                    break;
               case 5:
                    cout<<day<<"/"<<"may/"<<year;
                    break;
               case 6:
                    cout<<day<<"/"<<"june/"<<year;
                    break;
               case 7:
                   cout<<day<<"/"<<"july/"<<year;
                   break;
               case 8:
                   cout<<day<<"/"<<"August/"<<year;
                   break;
               case 9:
                   cout<<day<<"/"<<"September/"<<year;
                   break;
               case 10:
                   cout<<day<<"/"<<"October/"<<year;
                   break;
               case 11:
                   cout<<day<<"/"<<"November/"<<year;
                   break;
               case 12:
                   cout<<day<<"/"<<"December/"<<year;
                   break;
               default;
                   cout<<"not correct";
          }
      }
      else 
      {
          cout<<"false";
      }
      return 0;
};

它甚至不应该编译 - "default;"应该是"default:"。

如果这是固定的,并且被适当的 #include 包围,使用命名空间 std (yuk) 和 int main(int argc, char **argv),那么它确实编译并输出一些东西。

不过,也有一些错误。

C:>D:ProjectstempDebugtemp.exe
enter day
30
enter month
12
enter year
2000
30/December/2000not correct
C:>

您可以使用数组来动态和可理解的代码

int day,month,year;
std::string months [] = { "january" , "febuary" , "march" , "april" , "may" , "june" , "july" , "August" , "September" , "October" , "November" , "December" } ;
int total_day [12];
total_day [0] = 31;
total_day[1] = 29;
total_day[2] = 31;
total_day[3] = 30;
total_day[4] = 31;
total_day[5] = 30;
total_day[6] = 31;
total_day[7] = 31;
total_day[8] = 30;
total_day[9] = 31;
total_day[10] = 30;
total_day[11] = 31;
std::cout<<"enter day :n";
std::cin>>day;
std::cout<<"enter month :n";
std::cin>>month;
std::cout<<"enter year :n";
std::cin>>year;
if ( (month > 0 && month <= 12) && (day > 0 && day <= total_day[month-1]) && (year > -1 && year < 3001))
{
    std::cout << day << "/"<< months[month-1] << "/" <<year;
}
else
{
    std::cout << "Wrong Date";
}