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