Несколько символов в SWITCH CASE в C - PullRequest
3 голосов
/ 10 марта 2020

У меня есть школьный проект, и я работаю над меню, в котором пользователь выбирает то, что он хочет сделать. Я хочу, чтобы переменная выбора была char, а не int. Могу ли я добавить несколько символов в одном switch случае? Я искал решение, но нашел только одно, когда значение int, а не char. Я попробовал это, но это не сработало:

char choice;
scanf("%c", &choice); 
switch(choice)
{
case 'S', 's':
    // do something
    break;
case 'I', 'i':
    // do another thing
    break;
default:
    printf("\nUnknown choice!");
    break;
}

Ответы [ 3 ]

6 голосов
/ 10 марта 2020

Вы можете использовать провал как это:

case 'S':
case 's':
    // do something
    break;
case ...
6 голосов
/ 10 марта 2020

Для начала используйте следующий формат в scanf

char choice;
scanf( " %c", &choice ); 
       ^^^

(см. Пробел перед спецификатором преобразования). В противном случае функция также будет читать пробельные символы.

Вы можете использовать несколько меток соседних регистров, например, например

switch(choice) 
{
    case 'S':
    case 's': 
        //do something
        break;

    case 'I':
    case 'i': 
        //do anotherthing
        break;

    default: 
        printf("\n Unknown choice !");
        break;
}

Альтернативный подход заключается в преобразовании введенного символа в верхний регистр до переключатель. Например

#include <ctype.h>

//...

char choice;
scanf( " %c",&choice ); 

switch( toupper( ( unsigned char )choice ) ) 
{
    case 'S':
        //do something
        break;

    case 'I':
        //do anotherthing
        break;

    default: 
        printf("\n Unknown choice !");
        break;
}
2 голосов
/ 10 марта 2020

Вы можете поместить несколько case меток друг за другом:

switch(choice) {
case 'S':
case 's':
    //do something
    break;
case 'I':
case 'i': 
    //do anotherthing
    break;
default: 
    printf("\n Unknown choice !");
    break;
}
...