我一直在编写一些C代码,我希望switch
比较字符串中的多个字符,但目前我只能检查一个字符。
我真正想要的是测试输入是否为是,而不仅仅是输入的第一个字符,所以在这种情况下,y或n。
这是我的代码:
switch (d[0]){
case 'y':
printf("Welcome ");
printf("%s\n", c);
break;
case 'n':
printf("Please Select A New User Name\n");
memset(&c[0], 0, sizeof(c));
goto name;
break;
case 'N' :
printf("Please select a new user name\n");
memset(&c[0], 0, sizeof(c));
goto name;
break;
case '\n':
printf("that is not a valid command, please try again\n");
memset(&d[0], 0, sizeof(d));
goto LOOP;
break;
case 'Y':
printf("Welcome ");
printf("%s\n", c);
break;
default :
printf("That is not a valid command, please try again\n");
goto LOOP;
break;
答案 0 :(得分:2)
这不是switch
的用途,而是根据整数值表达式做出决定。
您需要使用strcmp()
来比较字符串:
if(strcmp(d, "y") == 0)
{
printf("Welcome");
/* ... */
}
else if(strcmp(d, "n") == 0 || strcmp(d, "N") == 0)
{
printf("Please select a new user name\n");
/* ... */
}
请注意,上述内容假定d
是一个正确终止的字符串,即不仅仅是char
。
答案 1 :(得分:1)
ISO 9899 6.8.4.2
The controlling expression of a switch statement shall have integer type.
因此传递字符串是不可能的。
答案 2 :(得分:0)
你根本做不到。
相反,您必须使用多个if
和else if
语句来比较单个字符或使用strcmp
来比较字符串。
答案 3 :(得分:0)
你可以这样做吗?
switch (d[0])
{
case 0x79:
printf("Welcome ");
printf("%s\n", c);
break;
case 0x6E:
printf("Please Select A New User Name\n");
memset(&c[0], 0, sizeof(c));
goto name;
break;
case 0x4E:
printf("Please select a New user name\n");
memset(&c[0], 0, sizeof(c));
goto name;
break;
case 0x0A:
printf("that is not a valid command, please try again\n");
memset(&d[0], 0, sizeof(d));
goto LOOP;
break;
case 0x59:
printf("Welcome ");
printf("%s\n", c);
break;
default :
printf("That is not a valid command, please try again\n");
goto LOOP;
break; // Does it really need a break here?????
}