c - 空间没有被替换

标签 c string

我正在学习通过阅读 K&R。我努力做到有条不紊,并确保在继续之前理解这些概念。

其中一个练习要求编写一个程序,将输入复制到输出“用一个空格替换一个或多个空格的每个字符串。”

我编写了以下内容,但即使存在多个连续的空格,它也会逐字输出输入:

#include <stdio.h>

main()

{
    int c, d, a;

    c = getchar();
    while (c != EOF) 
    {
        a = c;

        if (c == ' ' && d == ' ')
        {
            a = 0;
        }

        d = c;

        putchar(a);
        c = getchar();
    }
}

我在这里做错了什么?我对这本书了解不多,所以我觉得我错过了一些非常简单的东西......

最佳答案

评论中有一些好的观点:

  • 使用有意义的变量名称
  • putchar(0) 与不写入任何内容不同
  • 所有变量都需要初始化

我再提出一个建议:

  • while 循环应读取字符并检查 EOF,如下所示

(假设您有 K&R 第 2 版,请参阅第 17 页上的 1.5.1 节了解详细说明。)

这是我编写代码的方式:

#include <stdio.h>

int main(void)
{
    int c;
    int oldc = 'a';

    while ( (c=getchar()) != EOF )
    {
        if (oldc != ' ' || c != ' ')
            putchar(c);
        oldc = c;
    }
}

关于c - 空间没有被替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39218049/

相关文章:

c# - 有人可以帮我将多个字符串数组分配给一个二维字符串数组吗?

java - 将 HWND 从 Java 程序传递到 C 库

java - 返回 hi 出现的次数

ruby - 在变量之间添加一个空格

java - JNI 报告 Android 中 GetByteArrayElements 的间接引用无效

c - 从指针数组返回字符串的函数

JAVA Dans DBF Library,从DBF文件中获取数据,byte[]转int

常量 for 循环产生错误的结果

c - 第二个 memcpy() 将之前的 memcpy() 数组附加到它

Clock() 没有按预期工作;避免IO