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.
Не забывайте про размер буфера.