我正在做这本书的练习 1-9(编写一个程序将其输入复制到输出,用一个空格替换一个或多个空格的每个字符串),但我似乎不太明白。到目前为止,这是我的代码:
#include <stdio.h>
int main() {
int c;
while ((c = getchar()) != EOF)
if (c == ' ') {
while (c == ' ') {
c = getchar();
}
putchar(' ');
} else {
putchar(c);
}
return 0;
}
这是错误的,因为句子 hey(blank)(blank)(blank)now
是 hey ow
。始终删除最后一个空白后的第一个字母。我认为这是一个非常愚蠢的错误,但我看不出如何修复它。我会很感激任何建议。
PS:对不起我的英语,如果你不明白什么,请告诉我。
最佳答案
在此 if 语句中(我已将其格式化为可读)
if (c == ' ')
{
while (c == ' ')
{
c = getchar();
}
putchar(' ');
}
你正在跳过刚刚读取的非空白字符,因为在外循环中
while ((c = getchar()) != EOF)
您正在阅读下一个字符。
程序可以写成下面这样的例子
#include <stdio.h>
int main( void )
{
int blank = 0;
int c;
while ( ( c = getchar() ) != EOF )
{
if ( !blank || c != ' ' ) putchar( c );
blank = c == ' ';
}
return 0;
}
考虑到根据 C 标准 main
不带参数应该像这样声明
int main( void )
关于c - K&R 练习 1-9。 Putchar 和 getchar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34888024/