【发布时间】:2017-12-21 03:54:18
【问题描述】:
我最近开始使用 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);
}
}
提前致谢。
【问题讨论】:
-
我不喜欢那个“解决方案”,因为它不会检查最里面的
getchar()中的 EOF。 -
注意,代码也有缺陷。输入
" "+EOF,代码将调用putchar(' '); putchar(EOF);,而它只应该调用putchar(' ');(我看到这是暗示here)。 -
K&R 不是学习 C 语言的好参考,因为它不再是 1979 年,而且该书中的许多实践、建议和代码示例都是根本不正确或不相关
标签: c string while-loop