C-K&R 练习 1-9

C- K&R exercise 1-9

从 K&R 书中寻找练习 1-9(将输入复制到输出。将多个 space 的每个字符串替换为一个 space)我在这个网站上找到了这段代码。

#include <stdio.h>

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

程序可以运行,但我不清楚操作: 什么是变量lch?为什么不把它插入到 for 循环的第三个条件和 if 语句程序没有给出正确的输出?

lch 获取旧字符,因此 ch 获取 getchar(),运行 循环,完成后,值由lch.

您需要用一个 space 替换多个 space。所以如果前一个输入的字符是space,而当前输入的字符也是space,则需要跳过当前字符。

所以lch存储的是上一个输入字符的值。最初当还没有任何输入时 lch 被设置为 0。然后在每次迭代中 lch 被设置为当前输入的字符,在这个 if 语句

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

当前字符和前一个字符是否都是space。如果是这样,那么程序什么都不输出。