Scanf пропускает следующий ввод - C (СИ)
Формулировка задачи:
Есть такое:
Функция inputs() проверяет то что ввёл пользователь. Идёт всё в цикле пока не будет оборвано.
Проблема в том, что сканф после ввода впихивает в следующий Name что-то невидимое (энтер?) и пропускается ввод.
Что делать?
inputs("Name: ", info->name, 30); if(!info->name[0]) break; inputs("Street: ", info->street, 40); inputs("City: ", info->city, 20); inputs("Lok: ", info->state, 3); printf("Zip: "); scanf("%d", info->zip);
Решение задачи: «Scanf пропускает следующий ввод»
textual
Листинг программы
do{ error = 0; printf("Zip: "); scanf("%d", &zip_tmp); clear_buffer(); error_w = 0; if (zip_tmp<10000 || zip_tmp>99999) { printf("Wrong zip!\n"); error = 1; error_w = 1; } //info->zip = zip_tmp; for (i=0; i<=zip_id; i++){ if (zip_base[i] == zip_tmp){ error = 1; if (error_w != 1) { printf("Zip is already in base!\n"); } } } } while(error == 1);
Объяснение кода листинга программы
- Объявление переменных:
- error - используется для контроля ошибок;
- zip_tmp - временное хранение введенного значения;
- clear_buffer - функция для очистки буфера ввода;
- error_w - флаг для контроля ошибок ввода;
- zip_id - количество записей в базе данных;
- zip_base - база данных.
- Ввод значения:
- Вывод сообщения
Zip:
; - Ввод значения с помощью функции scanf в переменную zip_tmp;
- Очистка буфера ввода с помощью функции clear_buffer.
- Вывод сообщения
- Проверка введенного значения:
- Проверка диапазона введенного значения (меньше 10000 или больше 99999);
- Если значение не в диапазоне, выводится сообщение
Wrong zip!
и устанавливается флаг error в 1; - Если введенное значение уже есть в базе данных, выводится сообщение
Zip is already in base!
.
- Цикл для повторного ввода:
- Цикл выполняется до тех пор, пока флаг error равен 1.
- Вывод сообщения и ввод значения:
- Если введенное значение не вызывает ошибку, оно присваивается переменной zip_tmp;
- Если введенное значение вызывает ошибку, ничего не происходит.
- Вывод сообщения и ввод значения:
- Если введенное значение не вызывает ошибку, оно присваивается переменной zip_tmp;
- Если введенное значение вызывает ошибку, ничего не происходит.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д