切换语句与数组条件

时间:2015-02-19 09:22:28

标签: c switch-statement

我正在努力完成这项工作。它只是没有完整选项的代码运行示例。

该程序需要的是用户输入选项1-3或a-c。我正在使用一个字符串,以防用户输入的不仅仅是一个字符。然后,switch case应该只比较数组中的第一个char和case。 do while循环是为了确保它继续运行直到它们输入正确的字符。

#include <stdio.h>
#define SIZE 81

void main(){
    char thing[SIZE] = {3};
    int rvalue;
    do
    {
        scanf_s("%s", thing);
        switch (thing[0])
        {
        case 'a':
        case 1:
            printf("first\n");
            rvalue = 1;
            break;
        case 'b':
        case 2:
            printf("second\n");
            rvalue = 2;
            break;
        case 'c':
        case 3:
            printf("third\n");
            rvalue = 3;
            break;
        default:
            printf("Wrong\n");
            rvalue = 4;
            break;
        }
    } while (rvalue == 4);
}

2 个答案:

答案 0 :(得分:2)

更改

scanf_s("%s", thing);

scanf_s("%s", thing,(unsigned int)sizeof(thing)); //Read the comments to know why the cast is required

这样做是因为scanfscanf_s功能不同。 scanf_s有一个额外的参数可以阻止buffer overflows 也改变这些

case 1:
case 2:
case 3:

case '1':
case '2':
case '3':

因为字符1('1')和其余部分与整数1不同。字符(用单引号括起来的字符)的值在ASCII table中表示。

答案 1 :(得分:1)

就目前而言,当first字符串中的第一个字符为thinga时,您希望打印1,依此类推。

问题是case 1: case '1':不一样1int'1'char,当您比较字符串的第一个字符时,您需要更改case陈述了一点。

代码:

#include <stdio.h>
#define SIZE 81

void main(){
    char thing[SIZE] = {3};
    int rvalue;
    do
    {
        scanf_s("%s", thing,SIZE);
        switch (thing[0])
        {
        case 'a':
        case '1':
            printf("first\n");
            rvalue = 1;
            break;
        case 'b':
        case '2':
            printf("second\n");
            rvalue = 2;
            break;
        case 'c':
        case '3':
            printf("third\n");
            rvalue = 3;
            break;
        default:
            printf("Wrong\n");
            rvalue = 4;
            break;
        }
    } while (rvalue == 4);
}