这段代码似乎同时给了我 if 语句和 else 语句的结果,为什么

本文关键字:语句 if else 为什么 结果 代码 段代码 | 更新日期: 2023-09-27 18:20:34

Console.WriteLine("Hello welcome to the Next-Day calendar");
Console.WriteLine("Please write down the day");
int day = int.Parse(Console.ReadLine());
int day_next = day + 1;
Console.WriteLine("Please write down the month number");
int month = int.Parse(Console.ReadLine());
Console.WriteLine("Please write down the year");
int year = int.Parse(Console.ReadLine());
switch (month) 
{
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
        if (day_next <=31 && day > 0) 
        {
            Console.WriteLine("The date is " + day_next + '/' + month + '/' + year);
        }
        if (day_next == 32) 
        {
            Console.WriteLine("The day is " + 1 + '/' + (month+1) + '/' + year); 
        }
        else
        {
            Console.WriteLine("Error!");
        }
        break;
    case 2:
        if (year % 4 == 0 && day_next <= 29 && day > 0 || year % 4 != 0 && day_next <= 28 && day > 0) 
        {
            Console.WriteLine("The date is " + day_next + '/' + month + '/' + year); 
        }
        if (year % 4 == 0 && day_next == 30 && day > 0 || year % 4 != 0 && day_next == 29 && day > 0) 
        {
            Console.WriteLine("The date is " + 1 + '/' + (month+1) + '/' + year); 
        }
        else
        {
            Console.WriteLine("Error!");
        }
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        if (day_next <= 30 && day > 0) 
        {
            Console.WriteLine("The date is " + day_next + '/' + month + '/' + year);
        }
        if (day_next == 30) 
        {
            Console.WriteLine("The date is " + 1 + '/' + (month + 1) + '/' + year);
        }
        else 
        {
            Console.WriteLine("Error");
        }
        break;
    case 12:
        if (day_next <=31 && day > 0) 
        {
            Console.WriteLine("The date is " + day_next + '/' + month + '/' + year);
        }
        if (day_next == 32) 
        {
            Console.WriteLine("The day is " + 1 + '/' + 1 + '/' + (year + 1)); 
        }
        else
        {
            Console.WriteLine("Error!");
        }
        break;
    default:
        Console.WriteLine("Error!");
        break;
}

例如,如果我输入:天 = 22,月 = 2,年 = 2015 它将写"日期是 23/2/2015",下一行将写错误!谁能解释一下?

这段代码似乎同时给了我 if 语句和 else 语句的结果,为什么

您可以使用else if来"链接"条件:

if (day_next <=31 && day > 0) 
{
    Console.WriteLine("The date is " + day_next + '/' + month + '/' + year);
}
else if (day_next == 32) 
{
    Console.WriteLine("The day is " + 1 + '/' + (month+1) + '/' + year); 
}
else
{
    Console.WriteLine("Error!");
}
break;

正在发生的事情是第一个if语句为真,并执行 - 下一个if语句为假,因此它执行else。 使用 else if 有效地链接语句,使它们更像switch

它相当于:

if (day_next <=31 && day > 0) 
{
    Console.WriteLine("The date is " + day_next + '/' + month + '/' + year);
}
else 
{
    if (day_next == 32) 
    {
        Console.WriteLine("The day is " + 1 + '/' + (month+1) + '/' + year); 
    }
    else
    {
        Console.WriteLine("Error!");
    }
}
break;

我要指出的是,从月/日/年输入生成日期的方法要简单得多,但这就是您看到的结果的原因。