我最近开始使用K&R书学习C(第二版)。我只是很难用这个解决方案来练习1-9,也就是:
编写一个程序将其输入复制到其输出,将一个或多个空格的每个字符串替换为单个空白。
我在网上找到了下面的解决方案,除了putchar(‘’)上的分号外,它基本上是有意义的。没有它,程序不能正确地执行它的功能,分号提供什么功能?
#include <stdio.h>
int main(void)
{
int c;
while ((c = getchar()) != EOF) {
if(c == ' ') {
while((c = getchar()) == ' ')
;
putchar(' ');
}
putchar(c);
}
}提前谢谢。
发布于 2017-07-16 15:56:00
声明:
while((c = getchar()) == ' ')
;缩进不正确。它应改为:
while((c = getchar()) == ' ')
;;是一个空语句,相当于一个空块{ }。
这个孤独的;有点令人困惑,因此添加评论或其他强调以澄清其真实性质被认为是不错的风格:
while ((c = getchar()) == ' ') {
/* nothing */
}
while ((c = getchar()) == ' ')
/* nothing */;一些大胆的程序员编写了更令人困惑的表单(避免它):
while((c = getchar()) == ' ');我个人更喜欢这种类似的形式:
while ((c = getchar()) == ' ')
continue;发布于 2017-07-16 15:27:34
声明
while((c = getchar()) == ' ')
;被解析为
while((c = getchar()) == ' ');它的效果与
while((c = getchar()) == ' ') {
/* Do nothing */
}换句话说,它是一个while循环,它的身体没有作用。检查while循环的条件的动作是读取字符和丢弃空格,这就是您想要做的。
如果删除分号,则while循环体将成为循环后的语句,这将导致错误的语句重复。
https://stackoverflow.com/questions/45130206
复制相似问题