Вывод по одному слову на строке - C (СИ)
Формулировка задачи:
Доброго времени суток!
Задача: написать программу, которая печатает содержимое своего ввода, помещая по одному слову на строке.
Написал такой вариант:
Условие в if для тех случаев, когда пробелов или табуляций несколько подряд.
Однако, работает только если пробелов 1 или 2 (подряд).
Помогите разобраться!
#include <stdio.h>
main()
{
int c, p = 0;
char n = '\n';
while ( (c = getchar()) != EOF)
{
if ((c == '\t' || c == ' ') && ( p == 0)) /* печатаем \n только если счетчик на нуле*/
{
p++;
putchar(n);
}
else
{
putchar(c); /* введен не пробел и не табуляция - обнуляем p */
p = 0;
}
}
return 0;
}Решение задачи: «Вывод по одному слову на строке»
textual
Листинг программы
#include <stdio.h>
/*
* Напишите программу, которая печатает содержимое своего ввода, помещая по одному
слову на каждой строке.
*/
int main() {
int c, ns;
printf("Enter string: ");
printf("\n");
while ((c = getchar()) != '\n')
{
if(c == ' ' || c == '\t')
{
if(ns == 0)
{
++ns;
printf("\n");
}
}
else
{
ns = 0;
printf("%c", c);
}
}
printf("\n");
return 0;
}
Объяснение кода листинга программы
В этом коде программа запрашивает у пользователя строку и выводит её по одному слову на строке.
- Объявлены две переменные:
cиns. - Переменная
cиспользуется для получения следующего символа из ввода пользователя. - Переменная
nsиспользуется для отслеживания количества слов в текущей строке. - Выводится приглашение для ввода строки.
- В цикле while считывается каждый символ из ввода пользователя, пока не будет получен символ новой строки.
- Если текущий символ является пробелом или табуляцией, и переменная
nsравна 0, то увеличивается значениеnsи выводится символ новой строки. - Если текущий символ не является пробелом или табуляцией, то значение
nsсбрасывается до 0, и текущий символ выводится на экран. - После окончания ввода строки выводится символ новой строки.
- Программа возвращает 0, что означает успешное завершение.