9. Глава 9: Ввод с клавиатуры

В этой главе мы разберем, как организовать ввод данных от пользователя через клавиатуру в языке C. Особое внимание уделим безопасному вводу строк, избежанию переполнения буфера, а также разнице между scanf и fgets.

9.1. Ключевые темы:

  • Ввод чисел и символов с помощью scanf

  • Ограничения и опасности scanf при работе со строками

  • Использование fgets для безопасного ввода строк

  • Очистка буфера (stdin) и проблемы с n

  • Примеры с пошаговыми комментариями

9.2. Пример 1: Ввод числа

#include <stdio.h>

int main() {
    int age;
    printf("Введите ваш возраст: ");
    scanf("%d", &age);
    printf("Ваш возраст: %d\n", age);
    return 0;
}

9.3. Пример 2: Небезопасный ввод строки

#include <stdio.h>

int main() {
    char name[10];
    printf("Введите имя: ");
    scanf("%s", name);  // Потенциально небезопасно
    printf("Привет, %s!\n", name);
    return 0;
}

9.4. Пример 3: Безопасный ввод с помощью fgets

#include <stdio.h>

int main() {
    char name[20];
    printf("Введите имя: ");
    fgets(name, sizeof(name), stdin);
    printf("Привет, %s", name);
    return 0;
}

9.5. Замечания:

  • fgets сохраняет символ новой строки n, если он помещается в буфер.

  • Чтобы избавиться от n, можно использовать strcspn или strchr.

9.6. Советы:

  • Для числового ввода — используйте scanf, но с проверкой результата (== 1).

  • Для строк — используйте fgets + очистка n.

  • Не забывайте про размер буфера.