K&R, программа для копирования входного потока в выходной с удалением лишних пробелов (нужны комментарии) - C (СИ)
Формулировка задачи:
Привет, всем. Начал учить Си по Кернигану и Ритчи. Упражнение 1.9 - напишите программу для копирования входного потока в выходной с заменой каждой строки, состоящей из одного или нескольких пробелов, одним пробелом.
Не мог сообразить, нашёл решение здесь же на форуме, всё работает
Теперь вопрос - не могу понять как работает первый блок if, каким образом он сокращает несколько пробелов до одного?
Листинг программы
- #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();
- }
- }
- }
Решение задачи: «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;
- }
Объяснение кода листинга программы
- Программа начинается с подключения необходимых библиотек для работы с файлами и стандартным вводом/выводом.
- Затем определены две переменные:
c
иns
. Первая используется для хранения текущего символа, вторая - для подсчета количества пробелов. - Далее следует цикл
while
, который продолжается до тех пор, пока не будет достигнут конец файла (т.е.EOF
). - Внутри цикла происходит проверка на равенство текущего символа пробелу. Если это так, то переменная
ns
сбрасывается в 0. - Если текущий символ - не пробел, то увеличивается значение переменной
ns
, которая отслеживает количество пробелов. - Если текущий символ - пробел и переменная
ns
больше 1, то программа пропускает этот пробел. - Если текущий символ - пробел и переменная
ns
равна 1, то этот пробел выводится на экран. - Если текущий символ - не пробел, то он выводится на экран.
- По завершении цикла программа возвращает 0, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д