Игнорирование ввода в строку с использование getchar() - C (СИ)
Формулировка задачи:
Доброго дня. Вопрос таков. Есть функция:
Функция вызывается циклически, несколько раз для двусвязного списка. Но не в том суть. Если вызвать функцию второй раз, третий раз, то данный цикл:
Не будет выполняться. Подозреваю, что в потоке остаётся '\n', после ввода числа. Как избавиться? Заранее спасибо.
P.S.: в плюсах было игнорирование std::cin.ignore();
void add_element(list* l)
{
_node *tmp = (_node*)malloc(sizeof(_node));
tmp->next = tmp->prew = NULL;
printf("Введите имя: ");
int i = 0;
//scanf("%s", &tmp->name);
while ((tmp->name[i++] = getchar()) != '\n'); // вводим до entera
tmp->name[i - 1] = '\0'; // последний символ, а именно('\n'), заменяем на нулевой байт
//
printf("Введите возраст: ");
scanf("%d", &tmp->age);
printf("Введите год рождения: ");
scanf("%d", &tmp->year);
add(l, tmp);
}while ((tmp->name[i++] = getchar()) != '\n'); // вводим до entera
Решение задачи: «Игнорирование ввода в строку с использование getchar()»
textual
Листинг программы
while (getchar() != '\n');
Объяснение кода листинга программы
- Используется функция getchar(), которая возвращает очередной символ, введенный пользователем
- Функция getchar() вызывается в цикле while
- В условии цикла while используется оператор сравнения, который проверяет, что введенный символ не является символом новой строки '\n'
- Если символ новой строки получен, то цикл while завершается
- После завершения цикла while программа продолжает работу с остальными символами, которые были введены пользователем
- Отсутствие обработки ошибок и исключений в коде может привести к непредсказуемому поведению программы при вводе некорректных символов или завершении ввода без ввода символа новой строки
- В данном коде не происходит игнорирования ввода, а лишь ожидается ввод символа новой строки для корректного завершения цикла while