C - K & R упражнение 1-9 - PullRequest
       72

C - K & R упражнение 1-9

1 голос
/ 13 марта 2020

в поисках упражнения 1-9 из книги K & R (Скопировать ввод в вывод. Заменить каждую строку из нескольких пробелов одним пробелом). Я нашел этот код на этом сайте.

#include <stdio.h>

main()
{
    int ch, lch;
    for(lch = 0; (ch = getchar()) != EOF; lch = ch)
    {
            if (ch == ' ' && lch == ' ')
                ;
            else
                putchar(ch);
    }
}

Программа работает , но мне не понятна операция: для чего нужна переменная lch? Почему бы не вставить его в третье условие для l oop и если оператор не выдает корректный вывод?

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Вам нужно заменить несколько пробелов одним пробелом. Поэтому, если предыдущий введенный символ был пробелом, а текущий введенный символ также пробелом, когда вам нужно пропустить текущий символ.

Так, lch сохраняет значение предыдущего введенного символа. Первоначально, когда еще не было никакого ввода lch, устанавливается в 0. Затем в каждой итерации lch устанавливается на текущий введенный символ, который в этом операторе if

if (ch == ' ' && lch == ' ')

является ли текущий символ и предыдущий символ обоими пространства. Если так, то программа ничего не выводит.

0 голосов
/ 13 марта 2020

lch получает старый символ, поэтому ch получает getchar(), запускает l oop, и когда это закончится, значение принимается lch.

...