Получение "Ошибка сегментации (ядро сброшено)" после запроса пользователя для ввода - PullRequest
0 голосов
/ 27 декабря 2018

Оператор Switch выдает «Ошибка сегментации (ядро сброшено)» независимо от регистра.

Я попытался изменить тип данных «команда», но не смог получить какой-либо другой результат.

    char command;
    int temp;

    while(1) {
            printf("Enter command ('d'/'m'/'s'/'r'): ");
            scanf("%c", command);
            printf("\n");

            switch(command) {
                    case 'd' :
                            printf("display which employee (0-19)?\n");
                            scanf("%i", temp);
                            //display(temp);
                            printf("displayed");
                            break;
                    case 'm' :
                            printf("modify which employee (0-19)?\n");
                            scanf("%i", temp);
                            //modify(temp);
                            printf("modified");
                            break;
                    case 's' :
                            //save();
                            printf("saved");
                            break;
                    case 'r' :
                            //retrieve();
                            printf("retrieved");
                            break;
                    default :
                            printf("Command not recognized\n");
            }
    }

Ожидается печать действия в соответствии с соответствующим случаем.Вместо этого он просто печатает сообщение «Ошибка сегментации (ядро сброшено)» независимо от этого.

1 Ответ

0 голосов
/ 27 декабря 2018

Спецификатор формата %c ожидает, что будет передан адрес char, то есть char *. Вместо этого вы передаете char.То же самое касается %i и int дальше вниз.Использование неправильного спецификатора формата вызывает неопределенное поведение , что в данном случае проявляется как сбой.

Вам необходимо передать адрес рассматриваемых переменных, чтобыscanf может изменить их.Кроме того, для %c у вас должен быть пробел в строке формата, прежде чем он будет использовать все оставшиеся пробелы во входном буфере.

Итак, вы хотите:

scanf(" %c", &command);

И:

scanf("%i", &temp);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...