Я использую ANSI C на компиляторе gcc (с -ansi).
Мне нужно прочитать пользовательский ввод для месяца, дня, часа и минуты в структуре, и они:
- не может иметь типы данных, которые не являются целыми,
- каждый должен соответствовать индивидуальным критериям (
i.e. month > 0 && month <
13
и т. Д.)
Определение структуры
typedef struct
{
int month;
int day;
int hour;
int minute;
} date_time_t;
date_time_t departure_date[50];
Проверка типов с преобразованием строк
Я хочу проверить пользовательский ввод, чтобы остановить сбой программы, если они предоставляют "~" для scanf("%i", departure_date->month);
Итак, я сначала читаю значение в виде строки, например:
char temp_month[3]
char *ptr;
scanf("%s", temp_month)
И затем проверяю пользовательский ввод следующим образом:
, пока ввод не выполняетсясоответствовать критериям -> запросить ввод, который соответствует критериям
while(strtol(temp_month, &ptr, 36) < 1 ||
strtol(temp_month, &ptr, 36) > 12)
{
printf("Invalid selection - try again\n");
scanf(" %s", temp_month);
}
Как только условие while будет выполнено, я сохраню временную переменную внутри структуры:
departure_date->month = atoi(temp_month);
Пара вопросов ...
- Это нормальный способ ведения дел?Принимая во внимание, что я ограничен структурой, имеет только типы данных int.
- Когда я отправляю нажатие клавиши 'a, b, c или d' в месяц во время сканирования, он проходит критерии, установленныецикл while, где я проверяю тип, но никакие другие буквы в алфавите не делают этого - кто-нибудь знает почему?