如何切换到c中读取多个字符

时间:2014-07-04 10:49:15

标签: c string switch-statement

我一直在编写一些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;

4 个答案:

答案 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)

你根本做不到。

相反,您必须使用多个ifelse 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?????
}