我如何修复我的c代码为我的学校项目

kxe2p93d  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(114)

我正在用C语言为我的编程课程做一些中国十二生肖的作业,我不确定是否有一种方法可以用更少的行来写这个:

int main() {

int year;

printf("Enter your year of birth: \n");
scanf_s("%i", &year);

if (year % 12 == 0) {
    return 0;
} else if (year % 12 == 1) {
    return 1;
} else if (year % 12 == 2) {
    return 2;
} else if (year % 12 == 3) {
    return 3;
} else if (year % 12 == 4) {
    return 4;
} else if (year % 12 == 5) {
    return 5;
} else if (year % 12 == 6) {
    return 6;
} else if (year % 12 == 7) {
    return 7;
} else if (year % 12 == 8) {
    return 8;
} else if (year % 12 == 9) {
    return 9;
} else if (year % 12 == 10) {
        return 10;               
} else if (year % 12 == 11) {
    return 11;
}

我想知道是否有办法优化这段代码。

g6ll5ycj

g6ll5ycj1#

您可以缩短函式,如下列程式码片段所示。

#include <stdio.h>
#include <stdlib.h>

int zodiac(void)
{
    int year;

    printf("Enter your year of birth: \n");
    scanf("%d", &year);

    if ((year % 12) == 0)
    {
        return 12;
    }
    else
    {
        return (year % 12);
    }
}

int main()
{

    printf("Your zodiac year is: %d\n", zodiac());
    return 0;
}

测试该输出将给出以下终端输出。

@Dev:~/C_Programs/Console/Zodiac/bin/Release$ ./Zodiac 
Enter your year of birth: 
1955
Your zodiac year is: 11

给予一下,看看它是否符合你的项目的精神。

ccrfmcuu

ccrfmcuu2#

year % 12将年份缩减到范围[-11... 11]。使用该范围作为起始点来获取数字[0...11]。

int chinese_zodiac = year % 12;
if (chinese_zodiac < 0) {
  chinese_zodiac += 12;
}
printf("Chinese zodiac index %d\n", chinese_zodiac);
printf("Chinese zodiac number %d\n", chinese_zodiac + 1);
static const char *animal[12] = { "Rat", "Ox", "Tiger", /* rest for OP to add */ };
printf("Chinese zodiac animal %s\n", animal[chinese_zodiac]);

参考:中国十二生肖
注:2022年2月1日至2023年1月21日是虎年(第3年)。OP的year可能需要偏移。

相关问题