Глава 9: Ввод с клавиатуры ========================== В этой главе мы разберем, как организовать ввод данных от пользователя через клавиатуру в языке C. Особое внимание уделим безопасному вводу строк, избежанию переполнения буфера, а также разнице между `scanf` и `fgets`. Ключевые темы: -------------- - Ввод чисел и символов с помощью `scanf` - Ограничения и опасности `scanf` при работе со строками - Использование `fgets` для безопасного ввода строк - Очистка буфера (`stdin`) и проблемы с `\n` - Примеры с пошаговыми комментариями Пример 1: Ввод числа --------------------- .. code-block:: c #include int main() { int age; printf("Введите ваш возраст: "); scanf("%d", &age); printf("Ваш возраст: %d\n", age); return 0; } Пример 2: Небезопасный ввод строки ----------------------------------- .. code-block:: c #include int main() { char name[10]; printf("Введите имя: "); scanf("%s", name); // Потенциально небезопасно printf("Привет, %s!\n", name); return 0; } Пример 3: Безопасный ввод с помощью fgets ------------------------------------------ .. code-block:: c #include int main() { char name[20]; printf("Введите имя: "); fgets(name, sizeof(name), stdin); printf("Привет, %s", name); return 0; } Замечания: ---------- - `fgets` сохраняет символ новой строки `\n`, если он помещается в буфер. - Чтобы избавиться от `\n`, можно использовать `strcspn` или `strchr`. Советы: ------- - Для числового ввода — используйте `scanf`, но с проверкой результата (`== 1`). - Для строк — используйте `fgets` + очистка `\n`. - Не забывайте про размер буфера.