Вы получили несколько ответов на свой первоначальный вопрос, но я чувствую себя обязанным добавить одну незначительную деталь: и оригинальная, и модифицированная версия страдают от пары проблем, которые я бы посчитал. Во-первых, они не совсем правильно распознают пробелы (например, игнорируют вертикальные табуляции и любые другие пробелы, определенные в локали), и выдают пустые строки, если слова разделены более чем одним пробелом .
Для первой проблемы я бы использовал isspace
вместо прямого сравнения с символами пробелов, о которых вы знаете (кстати, устраняя источник проблемы, с которой вы столкнулись). Во-вторых, вы можете добавить некоторую логику, чтобы пропустить все последовательные символы пробела, когда вы встречаете первый, или вы можете добавить флаг для записи новой строки, если и только если текущий символ является пробелом и предыдущий символ, который вы написали, не был новой строкой.
Кроме того, вы можете читать слова, используя scanf
с преобразованием %s
:
char buffer[256];
while (scanf("%255s", buffer))
printf("%s\n", buffer);
Этот подход, однако, накладывает верхний предел на размер одного слова. При нормальных обстоятельствах это редко бывает проблемой, но в зависимости от характера ввода это может / может быть.