在c中执行scanf和无开关情况

在c中执行scanf和无开关情况,c,C,这个代码应该用来计算闰年。我还没做完 包括所有计算该值的案例,但不管怎样,它不会进入每个案例,而是跳转到默认值。我刚开始练习C 所以详细的解释在这里会很有帮助 #include <stdio.h> int main() { int year; printf("Enter a year you wish to check is a leap year\n"); scanf(" %d", &year); switch(year) {

这个代码应该用来计算闰年。我还没做完 包括所有计算该值的案例,但不管怎样,它不会进入每个案例,而是跳转到默认值。我刚开始练习C 所以详细的解释在这里会很有帮助

#include <stdio.h>

int main()
{
    int year;

    printf("Enter a year you wish to check is a leap year\n");
    scanf(" %d", &year);

    switch(year)
    {
        case 1: //does not go into this case 
            if(year%4 == 0)
            {
                printf("leap year\n"); 
            }
            break;
        case 2: //does not go into this case
            if(year%100 == 0 && year%400 == 0)
            {
                printf("leap year\n"); 
            }
            break;
        default:
            printf("not a leap year\n");
    }

    return 0;
}
#包括
int main()
{
国际年;
printf(“输入您希望检查的年份是闰年\n”);
scanf(“%d”和“年”);
开关(年)
{
案例1://不适用于本案例
如果(第%4年==0)
{
printf(“闰年”);
}
打破
案例2://不适用于本案例
如果(年份%100==0和年份%400==0)
{
printf(“闰年”);
}
打破
违约:
printf(“非闰年”);
}
返回0;
}

switch
语句没有像“子句1”和“子句2”这样的编号子句,而是根据文本值
1
2
测试
year
。你的意思可能是:

int is_leap_year(year) {
  return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
}
然后,您可以在代码主体中使用该函数:

if (is_leap_year(year)) {
  printf("Is leap year\n");
}
else {
  printf("Is not leap year\n");
}

通过将其放入函数中,您可以针对多种情况快速进行测试。您希望确保1900年不是闰年,2000年和2004年不是,2100年不是。

switch
语句没有像“子句1”和“子句2”这样的编号子句,而是根据文本值
1
2
测试
year
。你的意思可能是:

int is_leap_year(year) {
  return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
}
然后,您可以在代码主体中使用该函数:

if (is_leap_year(year)) {
  printf("Is leap year\n");
}
else {
  printf("Is not leap year\n");
}

通过将其放入函数中,您可以针对多种情况快速进行测试。您希望确保1900年不是闰年,2000年和2004年不是,2100年不是。

现在,您的代码正在检查输入1或2作为年份的用户。对于任何其他年份(如2018年),它都将直接跳转到
默认值
标签

我猜(但我承认我不确定)你想要的东西更像:

switch ( year % 4 ) { 
    case 0:
        if (year % 100 == 0 && year % 400 != 0) {
            printf("Not a leap year");
            break;
        }
    default:
        printf("leap year");
}

不过,我们并没有从使用
开关
中获得太多好处——它也可以是
if

现在,您的代码正在检查输入1或2作为年份的用户。对于任何其他年份(如2018年),它都将直接跳转到
默认值
标签

我猜(但我承认我不确定)你想要的东西更像:

switch ( year % 4 ) { 
    case 0:
        if (year % 100 == 0 && year % 400 != 0) {
            printf("Not a leap year");
            break;
        }
    default:
        printf("leap year");
}

不过,我们并没有从使用
开关
中获得太多好处——它也可以是
if

看来您对switch语句有点误解。这是您给出的示例:

switch(year)
{
    case 1: //does not go into this case 
        if(year%4 == 0)
        {
            printf("leap year\n"); 
        }
        break;
    case 2: //does not go into this case
        if(year%100 == 0 && year%400 == 0)
        {
            printf("leap year\n"); 
        }
        break;
    default:
        printf("not a leap year\n");
}
这是使用if语句的等价形式

if (year == 1) 
{
    if(year%4 == 0)
    {
        printf("leap year\n"); 
    }
} 
else if (year == 2) 
{
    if(year%100 == 0 && year%400 == 0)
    {
        printf("leap year\n"); 
    }
} 
else 
{
    printf("not a leap year\n");
}

每个“案例”实际上只是将年份与给定值进行比较。相反,我建议使用if语句来检查它是否是闰年

if(year%4 == 0)
{
    printf("leap year\n"); 
}
else if(year%100 == 0 && year%400 == 0)
{
    printf("leap year\n"); 
}
} 
else 
{
    printf("not a leap year\n");
}
如果您想了解有关switch语句的更多信息,请参阅以下资源:
您似乎对switch语句有点误解。这是您给出的示例:

switch(year)
{
    case 1: //does not go into this case 
        if(year%4 == 0)
        {
            printf("leap year\n"); 
        }
        break;
    case 2: //does not go into this case
        if(year%100 == 0 && year%400 == 0)
        {
            printf("leap year\n"); 
        }
        break;
    default:
        printf("not a leap year\n");
}
这是使用if语句的等价形式

if (year == 1) 
{
    if(year%4 == 0)
    {
        printf("leap year\n"); 
    }
} 
else if (year == 2) 
{
    if(year%100 == 0 && year%400 == 0)
    {
        printf("leap year\n"); 
    }
} 
else 
{
    printf("not a leap year\n");
}

每个“案例”实际上只是将年份与给定值进行比较。相反,我建议使用if语句来检查它是否是闰年

if(year%4 == 0)
{
    printf("leap year\n"); 
}
else if(year%100 == 0 && year%400 == 0)
{
    printf("leap year\n"); 
}
} 
else 
{
    printf("not a leap year\n");
}
如果您想了解有关switch语句的更多信息,请参阅以下资源:
#包括
int main()
{
国际年;
printf(“输入您希望检查的年份是闰年\n”);
scanf(“%d”和“年”);
交换机(第%4年)
{
案例0:
如果(年份%100==0)
{
printf(“世纪”不能是闰年\n);
}
其他的
printf(“闰年”);
打破
案例3:
printf(“明年是闰年。\n”);
违约:
printf(“非闰年”);
打破
}
返回0;
}
#包括
int main()
{
国际年;
printf(“输入您希望检查的年份是闰年\n”);
scanf(“%d”和“年”);
交换机(第%4年)
{
案例0:
如果(年份%100==0)
{
printf(“世纪”不能是闰年\n);
}
其他的
printf(“闰年”);
打破
案例3:
printf(“明年是闰年。\n”);
违约:
printf(“非闰年”);
打破
}
返回0;
}

您投入的是哪一年?我们无法神奇地知道你给程序的输入@cece你提供了什么信息?显示输出日志。输入是2012年,输出是默认的printf语句。您输入的是哪一年?我们无法神奇地知道你给程序的输入@cece你提供了什么信息?向我们展示输出日志。输入是2012年,输出是默认的printf语句。谢谢,这完全有道理。我不知道如何使用开关,因为我只是在学习,但在这种情况下,我认为我最好的办法是使用if和elseif语句。谢谢,这完全有道理。我不知道如何使用开关,因为我只是在学习,但在这种情况下,我认为我最好的办法是使用if和else if语句。来自[维基百科]:每年被4整除就是闰年,除了被100整除的年份,但如果这些百年可以被400整除,那么它们就是闰年。因此,我认为实际的等式是:
year%4==0&&(year%100!=0 | | year%400==0)
(即100术语使用
!=
vs
=
)@CraigEstey感谢您的审核。我没有机会测试它。根据[维基百科]进行相应调整:每年被4整除就是闰年,但被100整除的年份除外,但如果这些百年被400整除就是闰年。因此,我认为实际的等式是:
year%4==0&&(year%100!=0 | | year%400==0)
(即,100术语使用
!=
vs
==