C-K&;R练习1-9
在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
#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
,你会问这个问题吗?