Вывод по одному слову на строке - 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 (подряд). Помогите разобраться!

Решение задачи: «Вывод по одному слову на строке»

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

Объяснение кода листинга программы

В этом коде программа запрашивает у пользователя строку и выводит её по одному слову на строке.

  1. Объявлены две переменные: c и ns.
  2. Переменная c используется для получения следующего символа из ввода пользователя.
  3. Переменная ns используется для отслеживания количества слов в текущей строке.
  4. Выводится приглашение для ввода строки.
  5. В цикле while считывается каждый символ из ввода пользователя, пока не будет получен символ новой строки.
  6. Если текущий символ является пробелом или табуляцией, и переменная ns равна 0, то увеличивается значение ns и выводится символ новой строки.
  7. Если текущий символ не является пробелом или табуляцией, то значение ns сбрасывается до 0, и текущий символ выводится на экран.
  8. После окончания ввода строки выводится символ новой строки.
  9. Программа возвращает 0, что означает успешное завершение.

Оцени полезность:

10   голосов , оценка 3.7 из 5
Похожие ответы