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, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д