字符数组可以在c中使用switch case

时间:2013-09-03 11:32:51

标签: c

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的情况下得到一个错误,没有检查这些情况。请帮助我。 提前谢谢。

4 个答案:

答案 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....};是个好地方。