Menu
CoddyTech

Ввод строк с помощью scanf

Часть раздела Логика и управление потоком путешествия по C на Coddy. Урок 14 из 63.

Теперь, когда вы понимаете, как работают строки с нуль-терминатором, пора узнать, как получать строковый ввод от пользователей. Функция scanf может считывать строки с помощью спецификатора формата %s, но у неё есть важные ограничения, которые нужно понимать.

Чтобы прочитать строку с помощью scanf, используй формат %s и передай имя своего символьного массива (без оператора &, поскольку имена массивов уже являются адресами):

char word[50];
printf("Enter a word: ");
scanf("%s", word);
printf("You entered: %s\n", word);

Однако у scanf("%s", ...) есть важное ограничение: чтение прекращается, как только встречается любой пробельный символ (пробел, табуляция или символ новой строки). Это означает, что если пользователь введёт "Hello World", scanf захватит только "Hello", а "World" останется во входном буфере.

Ещё одна серьёзная проблема заключается в том, что scanf не проверяет, помещаются ли введённые данные в ваш массив. Если кто-нибудь введёт слово длиннее, чем может вместить ваш массив, произойдёт переполнение буфера, которое может привести к сбою программы или создать уязвимости в системе безопасности. Всегда следите за тем, чтобы ваш символьный массив был достаточно большим для ожидаемых входных данных.

Несмотря на эти ограничения, scanf("%s", ...) прекрасно подходит для чтения отдельных слов — именно это вы будете практиковать в следующем задании.

challenge icon

Задание

Легко

Напишите программу на C, которая демонстрирует чтение строкового ввода пользователя с помощью scanf и вывод его обратно. Ваша программа должна:

  1. Объявить символьный массив с именем username из 30 элементов для хранения ввода пользователя
  2. Объявить символьный массив с именем hobby из 25 элементов для хранения другого ввода
  3. Использовать printf, чтобы вывести пользователю приглашение с сообщением Enter your username:
  4. Использовать scanf со спецификатором формата %s, чтобы считать имя пользователя в массив username
  5. Использовать printf, чтобы вывести пользователю приглашение с сообщением Enter your hobby:
  6. Использовать scanf со спецификатором формата %s, чтобы считать хобби в массив hobby
  7. Вывести обе строки с помощью printf точно в формате, показанном ниже

Ввод будет предоставлен в виде двух отдельных слов (без пробелов внутри каждого слова).

Ваша программа должна вывести результат в следующем формате:

Enter your username:
Enter your hobby:
Hello [username], your hobby is [hobby]!

Например, если пользователь введёт Alice в качестве имени пользователя и reading в качестве хобби, вывод должен быть таким:

Enter your username:
Enter your hobby:
Hello Alice, your hobby is reading!

Это задание проверяет ваше понимание того, как использовать scanf со спецификатором формата %s для чтения строкового ввода, правильно объявлять символьные массивы достаточного размера и объединять пользовательский ввод с форматированным выводом с помощью printf.

Попробуйте сами

#include <stdio.h>

int main() {
    // TODO: Объявите здесь массивы символов
    
    // TODO: Напишите здесь код для вывода приглашения и чтения ввода
    
    // TODO: Выведите итоговое сообщение
    
    return 0;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор C