我是这里的新手,一般来说对编程逻辑比较陌生。为了提高我的技能,我开始阅读这篇精美的文学作品。我真的觉得我很好地掌握了这些概念,但这个练习似乎让我措手不及。我可以生成程序,但我见过的一些示例似乎介绍了本书尚未涵盖的一些概念,例如 here 示例。 inspace 似乎提供的功能不仅仅是程序员创建的变量。

#include <stdio.h>

int main(void)
{
    int c;
    int inspace;

    inspace = 0;
    while((c = getchar()) != EOF)
    {
        if(c == ' ')
        {
            if(inspace == 0)
            {
                inspace = 1;
                putchar(c);
            }
        }

        /* We haven't met 'else' yet, so we have to be a little clumsy */
        if(c != ' ')
        {
            inspace = 0;
            putchar(c);
        }
    }
    return 0;
}

在下一个示例中,pc 似乎在计算空格方面做了一些事情,但我不确定是什么。

我设法创建了一个完成此任务的程序,但它仅使用了我创建的变量 c,因此我了解它的用途。

最佳答案

此代码的目的是复制文本,如果有多个空格,则 ' ' 连续仅打印一个空格。

变量 inspace 用于跟踪上次打印的字符是 scape 还是非空格。
如果 inspace 为零意味着打印的字符不是空格。和
如果 inspace 为 1,则表示最后一次打印空间。

因此,如果 inspace 为零,下次可以在读取 scape 时打印 scape,如果 inspace 为 1,则找到下一个连续的 scape,因此不打印空间。

请参阅 C 是当前读取的字符。 (阅读评论)

  if(c == ' ')  // currently space read
    {
      if(inspace == 0) // last time non-space printed, So space can be print
      {
        inspace = 1;   // printing space so switch inspace 1
        putchar(c);   // print space
      }
    }

下一个 if
if(c != ' ') // A char not space read, its to to print unconditionally
{
  inspace = 0;  // remember that non-scape print
  putchar(c);
}

关于c - C 编程语言 K&R 练习 1-9,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15497208/

10-10 14:01