我最近开始使用K& R书(第2版)开始学习C,而我只是在思考这个解决方案时遇到麻烦,以便练习1-9,这是:
编写程序将其输入复制到其输出,替换每个字符串 一个空白的一个或多个空白。
我在网上找到了以下解决方案,除了putchar('');之上的分号外,它最有意义。如果没有它,程序就无法正常执行其功能,该分号有什么功能?
#include <stdio.h>
int main(void)
{
int c;
while ((c = getchar()) != EOF) {
if(c == ' ') {
while((c = getchar()) == ' ')
;
putchar(' ');
}
putchar(c);
}
}
提前致谢。
答案 0 :(得分:17)
声明:
while((c = getchar()) == ' ')
;
缩进错误。它应该是:
while((c = getchar()) == ' ')
;
;
是一个空语句,相当于空块{ }
。
这种孤独的;
有点令人困惑,所以添加评论或其他重点来澄清其真实性质被认为是好的风格:
while ((c = getchar()) == ' ') {
/* nothing */
}
while ((c = getchar()) == ' ')
/* nothing */;
一些大胆的程序员写这个更令人困惑的形式(避免它):
while((c = getchar()) == ' ');
我个人更喜欢这种等效形式:
while ((c = getchar()) == ' ')
continue;
答案 1 :(得分:12)
声明
while((c = getchar()) == ' ')
;
被解析为
while((c = getchar()) == ' ');
与
具有相同的效果while((c = getchar()) == ' ') {
/* Do nothing */
}
换句话说,它是一个身体无效的while循环。检查while循环条件的行为会读取字符并丢弃空格,这就是你想要做的事情。
如果删除分号,则while循环体最终成为循环后的语句,这会导致错误的语句重复。