c - K&R 练习 1-9。 Putchar 和 getchar

标签 c getchar putchar

我正在做这本书的练习 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)nowhey 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/

相关文章:

c - 为什么这段与 OpenMP 并行化的代码不能正常工作?

C:使用指针作为字符串:不可预知的行为

c - 字数统计程序 - stdin

putchar() 可以打印一个整数吗?

c - 使用 getchar() 和 putchar() 的非常简单的 C 问题

c - Mac gcc 尝试链接旧的、不存在的库

c - 反转字符串(输入参数并返回字符串)

c - getchar() != EOF

C 结构体和链表之争

c - 为什么这个 getchar() 循环在输入一个字符后停止?