K& R练习1-9解决方案C编程

时间:2014-07-18 20:59:12

标签: c getchar

任务是创建一个用一个空格替换多个空格的C程序,我在另一个StackOverflow问题上找到了这个解决方案:

int c;
while ((c = getchar()) != EOF) {
    if (c == ' ') {
        while ((c = getchar()) == ' ')
            ;
        putchar(' ');
        if (c == EOF) break;
    }
    putchar(c);
}

它有效,但我对第二个while循环感到困惑:

while ((c = getchar()) == ' ')
            ;

如何划线甚至删除任何空格?我认为它只是在遇到另一个非空白角色之前什么也没做。那么,如果一个句子有4个空格,那么我希望它变成5个空格,因为你只是用putchar(' ')添加了另一个空格?它是否以我不知道的方式删除多余的空格?

3 个答案:

答案 0 :(得分:2)

while ((c = getchar()) == ' ')
            ;

这个位跳过空格。跳过所有这些后,

putchar(' ');

放一个空格。

用一个空格替换空格组。

答案 1 :(得分:0)

getchar一次读取一个字符。在每次迭代时,它会读取一个字符并检查它是否是空格。如果读取的字符是空格,则读取另一个空格,直到找到非空白字符。执行完循环putchar(' ');后,打印一个空格。

答案 2 :(得分:0)

程序读取(使用getchar)来自标准输入的字符串和输出(使用putchar)相同的字符串到标准输出,但省略多余的空格。因此,它有效地消除了#34;额外的空间。

while循环跳过输入中连续的空格块而不输出任何内容,然后在循环完成后输出单个空格。这就是"删除"空间。