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



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

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;
}

我想知道是否有任何方法来优化这段代码。

您可以像下面的代码片段那样缩短函数。

#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: %dn", zodiac());
return 0;
}

测试出来会得到以下终端输出:

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

试一试,看看它是否符合你的项目精神。

year % 12将年份简化为[-11…]11)。用它作为起始点来获取数字[0…11]。

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

Ref: Chinese zodiac

注:2022年2月1日至2023年1月21日为虎年(第3年)。OP的year可能需要偏移。

最新更新