Как сканировать строки с пробелами в них с помощью scanf ()?

Я хочу написать подпрограмму, в которой пользователь может ввести свой комментарий. Я использую scanf("%s", X) и позволяет им вводить комментарий, но он может хранить только слово перед пробелом в строке.

Как я могу решить эту проблему, чтобы сохранить целые предложения в строку или файл?

Мой код представлен ниже:

 FILE *fp; char comment[100]; fp=fopen("comment.txt","a"); printf("You can input your comment to our system or give opinion to the musics :\n"); scanf("%s",comment); fputs(comment,fp); 

Вместо ответов, которые говорят вам, что вы не используете scanf() , вы можете просто опцию Negated scanset для scanf() :

 scanf("%99[^\n]",comment); // This will read into the string: comment // everything from the next 99 characters up until // it gets a newline 

scanf () с %s качестве спецификатора формата считывает последовательность символов, начиная с первого символа без пробелов, до (1) другого символа пробела или (2) до ширины поля, если это указано (например, scanf("%127s",str); – читать 127 символов и добавляет нулевой байт как 128-й), в зависимости от того, что наступит раньше. И затем автоматически добавьте нулевой байт в конце. Указатель передал мне достаточно большой, чтобы удерживать входную последовательность символов.

Вы можете использовать fgets для чтения всей строки:

 fgets(comment, sizeof comment, stdin); 

Обратите внимание, что fgets также читает символ новой строки. Вы можете избавиться от символа новой строки из comment .

вместо scanf используйте fgets на stdin, чтобы прочитать всю строку.

Вы можете использовать функции gets() , getline() для чтения строки из stdin .

  • Проблемы с функцией C scanf ("% c") для чтения символов один за другим
  • читать разделенный запятыми вход с scanf
  • Ввод в C. Scanf до получения. проблема
  • Как я могу прочитать строку ввода неизвестной длины?
  • Каков эффект завершения пробела в строке формата scanf ()?
  • Чтение строки с помощью scanf
  • C / C ++ printf () перед вызовом scanf ()
  • While-loop игнорирует scanf во второй раз
  • scanf Пропуск
  • Динамический ввод строки - с помощью scanf ("% as")
  • Почему scanf должен принимать адрес оператора
  • Interesting Posts

    JPA – самый быстрый способ игнорировать поле во время сохранения?

    Динамический диапазон диаграмм с помощью INDIRECT: эта функция недействительна (несмотря на выделение диапазона)

    Простой способ найти, если два разных списка содержат одни и те же элементы?

    Как взломать MySQL GROUP_CONCAT для извлечения ограниченного количества строк?

    Какие зависимости maven включать весной 3.0?

    Почему String.replaceAll () в java требует 4 слэша «\\\\» в regex, чтобы фактически заменить «\»?

    Создайте массив с одним и тем же элементом, который повторяется несколько раз

    iTunes connect не позволит мне добавить себя как пользователя

    В чем смысл и аргументы Открытого / Закрытого Принципа?

    Имеет ли порядок записей в таблице маршрутизации?

    Не удалось загрузить файл или сборку «xxx» или одну из его зависимостей. Была сделана попытка загрузить программу с неправильным форматом

    Добавление начального нуля к некоторым значениям в столбце в MySQL

    Как я могу копировать на select в терминале OS X, например PuTTY?

    Выход UTF-8 от PowerShell

    Java: Идентификатор ожидается

    Давайте будем гением компьютера.