我正在练习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:对不起我的英语,如果你不明白,请告诉我。
答案 0 :(得分:2)
在这个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 )
答案 1 :(得分:0)
因为while (c == ' ')
正在读取,直到找到非空格。所以,当你到达'n'时它会停止,但是你没有放置那个角色。在putchar(' ')
之后,添加putchar(c);
以在空白字符串后打印字符。
答案 2 :(得分:0)
因为在你得到'n'的内部,然后在外在的条件下,你得到另一个角色,即'o'。