Are*_*yan 2 c enums switch-statement
这是练习:
编写一个名为的函数
monthName(),它将一个类型的值作为其参数enum month(如本章所定义),并返回一个指向包含月份名称的字符串的指针.通过这种方式,您可以enum month使用以下语句显示变量的值 :
printf("%s\n", monthName(aMonth));
我写了我的版本并获得了我期望的输出.但是,我确信必须有一个更好的方法来实现它,而不必每个月使用一个case的switch语句.如何用更好的设计编写这个功能?
#include <stdio.h>
enum month { January = 1, February, March, April, May, June,
July, August, September, October, November, December };
char *monthName(enum month m){
switch (m) {
case January:
return "January";
break;
case February:
return "February";
break;
case March:
return "March";
break;
case April:
return "April";
break;
case May:
return "May";
break;
case June:
return "June";
break;
case July:
return "July";
break;
case August:
return "August";
break;
case September:
return "September";
break;
case October:
return "October";
break;
case November:
return "November";
break;
case December:
return "December";
break;
default:
return "Not a valid month";
}
}
int main(void)
{
enum month aMonth = 1;
printf("%s\n", monthName(aMonth));
aMonth = 2;
printf("%s\n", monthName(aMonth));
aMonth = 6;
printf("%s\n", monthName(aMonth));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您可以创建一个包含字符串的数组,并使用枚举对其进行索引.
const char *monthNames[] = { "Not a valid month", "January", "February", "March",
"April", "May", "June", "July", "August", "September",
"October", "November" "December" };
const char *monthName(enum month m)
{
if (m < 1 || m > 12) {
return monthNames[0]; // string for invalid month
} else {
return monthNames[m];
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用简单的查找表,因为枚举以1开头:
#include <stdio.h>
enum month { January = 1, February, March, April, May, June,
July, August, September, October, November, December };
const char *months_str[] = {
"January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December", NULL
};
const char *monthName(enum month m) {
if(m < January || m > December)
return "Invalid month";
return months_str[m-1];
}
int main(void)
{
enum month aMonth = 1;
printf("%s\n", monthName(aMonth));
aMonth = 2;
printf("%s\n", monthName(aMonth));
aMonth = 6;
printf("%s\n", monthName(aMonth));
return 0;
}
Run Code Online (Sandbox Code Playgroud)