Проблема программирования C с оператором switch - PullRequest
0 голосов
/ 18 апреля 2019

У меня проблема с оператором switch. Я пробовал много разных способов справиться с этим, и я также погуглил, и я не могу найти решение, возможно, для основной ошибки.

Ошибка:

switch(dnevi) -> switch quantity not an integer
case "Pet" -> case label does not reduce to an integer constant
case "Sob" -> case label does not reduce to an integer constant

Код:

char dnevi[5];
printf("Vnesi dan:\n  P–ponedeljek, T–torek, S–sreda,C–cetrtek, Pet–petek, Sob–sobota, in N–nedelja" );
scanf("%d", dnevi);
switch(dnevi)
{
    case 'P': 
        printf("To je ponedeljek");
        break;
    case 'T': 
        printf("To je torek");
        break;
    case 'S': 
        printf("To je sreda");
        break;
    case 'C': 
        printf("To je cetrtek");
        break;
    case 'Pet': 
        printf("To je petek");
        break;
    case 'Sob': 
        printf("To je sobota");
        break;
    case 'N': 
        printf("To je nedelja");
        break;
    default: 
        printf("Vnos je bil napacen!");

}

1 Ответ

2 голосов
/ 18 апреля 2019

Похоже, в дополнение к совпадениям с одним символом, вы также хотите сопоставить строку.Итак, вы пытаетесь прочитать строку как ввод.Проиллюстрирована простая обработка ошибок, вам может потребоваться что-то более причудливое.

if (scanf("%4s", dnevi) != 1) {
    strcpy(dnevi, "?"); /* simple error handling */
}
scanf("%*[^\n]");       /* get the rest of the input */

Однако, как говорится в сообщении об ошибке, вам необходимо указать целое число switch.Вы можете сделать это с первым персонажем.

switch(dnevi[0])

Однако теперь вам приходится иметь дело с тем фактом, что у вас есть два варианта P и два варианта S.Обращайтесь с этим в особых случаях в этих конкретных случаях.Строковые литералы окружены ".

case 'P': 
    if (dnevi[1] == '\0')
        printf("To je ponedeljek");
    else if (strcmp(dnevi, "Pet") == 0)
        printf("To je petek");
    else
        printf("Vnos je bil napacen!");
    break;
...
case 'S': 
    if (dnevi[1] == '\0')
        printf("To je sreda");
    else if (strcmp(dnevi, "Sob") == 0)
        printf("To je sobota");
    else
        printf("Vnos je bil napacen!");
    break;
...
default: 
    printf("Vnos je bil napacen!");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...