K&R, программа для копирования входного потока в выходной с удалением лишних пробелов (нужны комментарии) - C (СИ)

Узнай цену своей работы

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

Привет, всем. Начал учить Си по Кернигану и Ритчи. Упражнение 1.9 - напишите программу для копирования входного потока в выходной с заменой каждой строки, состоящей из одного или нескольких пробелов, одним пробелом. Не мог сообразить, нашёл решение здесь же на форуме, всё работает
#include <stdio.h>
 
int main()
{
    int c;
    c = getchar();
    while (c != '.')
    {
        if (c == ' ')
        {
            while (c == ' ')
                c = getchar();
            printf(" ");
            putchar(c);
            c = getchar();
        }
        if (c != ' ')
        {
            putchar(c);
            c = getchar();
        }
    }
 
}
Теперь вопрос - не могу понять как работает первый блок if, каким образом он сокращает несколько пробелов до одного?

Решение задачи: «K&R, программа для копирования входного потока в выходной с удалением лишних пробелов (нужны комментарии)»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
/*программа печатающая ввод на вывод и вместо нескольких пробелов подряд оставляющая
только один пробел*/
 
int main()
{
 int c,ns = 0;
 while ((c = getchar()) != EOF){
     if (c != ' ') ns = 0;
     if (c == ' ') ++ ns;
     if (ns <= 1) putchar(c);
 }
    return 0;
}

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

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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