Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-K&;R练习1-9_C_Loops_Char_Getchar_Putchar - Fatal编程技术网

C-K&;R练习1-9

C-K&;R练习1-9,c,loops,char,getchar,putchar,C,Loops,Char,Getchar,Putchar,在K&R手册中寻找练习1-9(将输入复制到输出。用一个空格替换多个空格的字符串),我在这个网站上找到了这段代码 #include <stdio.h> main() { int ch, lch; for(lch = 0; (ch = getchar()) != EOF; lch = ch) { if (ch == ' ' && lch == ' ') ; else

在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);
    }
}
#包括
main()
{
int-ch,lch;
for(lch=0;(ch=getchar())!=EOF;lch=ch)
{
如果(ch=''&&lch='')
;
其他的
putchar(ch);
}
}
程序运行正常,但我不清楚操作:
变量lch的作用是什么?为什么不将其插入for循环的第三个条件中,并且如果程序没有给出正确的输出,则执行if语句?

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

获取。您需要用一个空格替换多个空格。因此,如果需要跳过当前字符时,前一个输入字符是空格,而当前输入字符也是空格

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

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

当前字符和上一个字符是否都是空格。如果是这样,那么程序将不输出任何内容。

如果您发布的变体不能按预期工作,可能会有所帮助。“for循环和if语句的第三个条件”比C更难解析。这就是为什么清晰的变量名很重要的一个例子。如果
lch
会被命名为
last\u char
,你会问这个问题吗?