Вывод по одному слову на строке - C (СИ)

Формулировка задачи:

Доброго времени суток! Задача: написать программу, которая печатает содержимое своего ввода, помещая по одному слову на строке. Написал такой вариант:
#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;
}
Условие в if для тех случаев, когда пробелов или табуляций несколько подряд. Однако, работает только если пробелов 1 или 2 (подряд). Помогите разобраться!

Код к задаче: «Вывод по одному слову на строке - C (СИ)»

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;
}

10   голосов, оценка 3.700 из 5


СОХРАНИТЬ ССЫЛКУ