Пробелы разделяют строку на разные строки?

Если я укажу строку "Алиса в стране чудес" в инструкции scanf, каков будет результат следующего кода (код внизу)? В моей книге говорится, что результат должен быть:

Alice
in
wonder
land

Ну, если я предоставил "Алису в чудодейственную землю" как одну строку, почему это результат? Как обеспечить промежутки между словами "Алиса", "В", "Чудо", "Земля" сделать их отдельными строками, когда я предоставляю "Алису в чужой земле" как одну строку?

#include<stdio.h>
void main()
{
 char s1[10], s2[10], s3[10], s4[10];
 scanf("%s%s%s%s", s1, s2, s3, s4);
 printf("\n%s\n%s\n%s\n%s", s1, s2, s3, s4);
 getch();
}
</stdio.h>

Благодарю! :)

3 ответа

Так работает scanf. %s формата %s сообщает scanf для чтения до любого пробела, который включает любое количество пробелов, вкладок или вводит ключи и сохраняет их в соответствующем адресе.

Из man, %s спецификация преобразования,

Соответствует последовательности символов небелого пробела; следующий указатель должен быть указателем на массив символов, который достаточно длинный, чтобы удерживать входную последовательность и завершающий нулевой байт ('\ 0'), который добавляется автоматически. Строка ввода останавливается в белом пространстве или при максимальной ширине поля, в зависимости от того, что наступит раньше


На странице scanf(3) man:

Перед началом конверсии большинство конверсий пропускают пробелы

а также:

<span> <code>s</code></span> Соответствует последовательности символов небелого пробела


Ваши права на книги.

когда вы получаете от пользователя строку с scanf, она перестает читать, когда первая вкладка, вкладка или ввод вводятся во вход. и остальная часть входа остается в буфере.

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

Я посчитал, что вы еще не изучили FILES, так что этого пока достаточно.

licensed under cc by-sa 3.0 with attribution.