Как получить один номер от пользователя - PullRequest
3 голосов
/ 10 января 2012

Я просто изучаю C и, работая до сих пор с такими языками, как javascript и php, у меня возникают проблемы с преобразованием некоторых моих шагов мышления в возможности C. Программа, которую я пишу (звучит больше, чемна самом деле) использует меню ввода, которое позволяет пользователю выбрать опцию.Варианты могут быть 1, 2 или 3.

Теперь я делаю:

int menu;
scanf("%d", &menu);

Что отлично работает.Тем не менее, ввод символа строки вызовет проблемы.

В javascript я просто сопоставил бы переменную меню с параметрами:

if ( menu != 1 && menu != 2 && menu != 3 ){
    menu = 4; // a switch later on will catch this.
}

Однако это, похоже, не работает вC.

Как мне подойти к этому?

Ответы [ 2 ]

5 голосов
/ 10 января 2012

Вам следует проверить наличие ошибок:

int menu;
if (scanf("%d", &menu) != 1)
{
   /* error */
   /* e.g.: */  menu = 4;
}

(В случае успеха scanf возвращает количество элементов, которые вы хотели прочитать.) Как вы справитесь с ошибкой, зависит от вас.Вы можете выполнить цикл до тех пор, пока не получите правильное значение, или немедленно прервать выполнение, или установить для переменной значение по умолчанию.

Альтернативой является чтение всей строки ввода с помощью fgets, а затем попытка токенизировать и интерпретироватьчто, например, с strtok и strtol.

2 голосов
/ 10 января 2012

Функция scanf возвращает результат, количество успешно прочитанных входов.(И есть также последовательность формата %n для получения количества потребляемых символов.).

Таким образом, вы можете использовать любое из решений.1010 *

Мой второй пример не очень полезен в вашем случае.Но иногда %n очень полезен.

Я специально ставлю пробел перед %d: библиотека C пропускает пробелы.

...