void main()
{
char day[20];
printf("Enter the short name of day");
scanf("%s", day);
switch(day)
{
case "sun":
printf("sunday");
break;
case "mon":
printf("monday");
break;
case "Tue":
printf("Tuesday");
break;
case "wed":
printf("wednesday");
break;
case "Thu":
printf("Thursday");
break;
case "Fri":
printf("friday");
break;
case "sat":
printf("saturday");
break;
}
}
这是我的代码。我在开关盒part.switch的情况下得到一个错误,没有检查这些情况。请帮助我。 提前谢谢。
答案 0 :(得分:5)
使用c,我唯一知道的方法是:
if (strcmp(day, "sun") == 0)
{
printf("sunday");
}
else if (strcmp(day, "mon") == 0)
{
printf("monday");
}
/* more else if clauses */
else /* default: */
{
}
答案 1 :(得分:2)
如上所述,switch
语句不适用于C中的字符串。您可以执行类似的操作以使代码更简洁:
#include <stdio.h>
static struct day {
const char *abbrev;
const char *name;
} days[] = {
{ "sun", "sunday" },
{ "mon", "monday" },
{ "tue", "tuesday" },
{ "wed", "wednesday" },
{ "thu", "thursday" },
{ "fri", "friday" },
{ "sat", "saturday" },
};
int main()
{
int i;
char day[20];
printf("Enter the short name of day");
scanf("%s", day);
for (i = 0; i < sizeof(days) / sizeof(days[0]); i++) {
if (strcasecmp(day, days[i].abbrev) == 0) {
printf("%s\n", days[i].name);
break;
}
}
return 0;
}
答案 2 :(得分:0)
这应该有用 (但仅限于4字节或更少的字符串)
这将字符串视为4字节整数。
这被认为是丑陋的,“hacky”,而且风格一点都不好。
但它确实做了你想做的事。
#include "Winsock2.h"
#pragma comment(lib,"ws2_32.lib")
void main()
{
char day[20];
printf("Enter the short name of day");
scanf("%s", day);
switch(htonl(*((unsigned long*)day)))
{
case 'sun\0':
printf("sunday");
break;
case 'mon\0':
printf("monday");
break;
case 'Tue\0':
printf("Tuesday");
break;
case 'wed\0':
printf("wednesday");
break;
case 'Thu\0':
printf("Thursday");
break;
case 'Fri\0':
printf("friday");
break;
case 'sat\0':
printf("saturday");
break;
}
}
在MSVC2010中测试
答案 3 :(得分:-1)
在const列表中查找字符串。如果找到,请使用索引切换。
enum daysOfWeek { EwdMon,EwdTues,EwdWed....};
是个好地方。