Копирование входного потока в выходной с условием - C (СИ)
Формулировка задачи:
Доброго времени суток. Возник затуп. Нужно написать прогу для копирования входного потока в выходной с заменой каждлй строки, состоящей из одного или нескольких пробелов, одним пробелом.
Вот код:
Проблема в том, что когда я ввожу пробел, то всё норм: выводится просто пробел вместо строки с пробелом. Но вот если вводится строка без пробелов, то ничего не выводится. Не понимаю, почему. Помогите, пожалуйста.
#include <stdio.h> #include <locale.h> int main() { int c, flag; flag = 0; setlocale(LC_ALL,"Rus"); while ((c = getchar())!=EOF) { if (c == ' ') flag = 1; if (c == '\n') { if (flag == 1) putchar(' '); if (flag == 0) putchar(c); flag = 0; } } getchar(); return 0; }
Решение задачи: «Копирование входного потока в выходной с условием»
textual
Листинг программы
while((sym = getchar()) != '\n')
Объяснение кода листинга программы
- В начале кода идет объявление переменной
sym
типа char. - Далее, в цикле
while
происходит считывание символа из стандартного ввода (stdin) и присваивание его переменнойsym
. - Условие цикла
while
гласит, что цикл будет выполняться до тех пор, пока считанный символ не будет равен символу новой строки ('\n'). - В каждой итерации цикла, считанный символ сохраняется в переменной
sym
. - Если считанный символ равен символу новой строки, то цикл прекращается.
- Код, который находится после цикла
while
, будет выполнен только после его завершения. - В данном случае, после цикла
while
, ничего не происходит, так как весь код находится внутри цикла и выполняется до его завершения. - Если бы после цикла были еще какие-то действия, они бы выполнились после завершения цикла.
- В итоге, в переменной
sym
сохраняются все символы, которые были введены с клавиатуры (или другого источника ввода), пока не будет введен символ новой строки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д