首页 > 解决方案 > C-K&R 练习 1-9

问题描述

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

#include <stdio.h>

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

该程序有效,但我不清楚操作:变量 lch 是做什么用的?为什么不将它插入到 for 循环的第三个条件中,并且如果程序没有给出正确的输出?

标签: cloopschargetcharputchar

解决方案


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

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

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

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


推荐阅读