首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C编程语言K&R练习1- 9

C编程语言K&R练习1- 9
EN

Stack Overflow用户
提问于 2013-03-19 18:41:31
回答 4查看 1.9K关注 0票数 4

我是新手,对一般的编程逻辑也是比较陌生的。为了提高我的技能,我开始阅读这篇优秀的文学作品。我真的觉得我很好地掌握了概念,但这个练习似乎让我猝不及防。我可以编写程序,但我看到的一些示例似乎引入了本书尚未介绍的一些概念,如示例hereinspace似乎提供的功能不仅仅是程序员创建的一个变量。

代码语言:javascript
复制
#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,因此我理解它的用途。

EN

回答 4

Stack Overflow用户

发布于 2013-03-19 18:55:40

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

变量inspace用于跟踪上一次打印的字符是否是空格。

如果inspace为零,则表示打印的字符不是空格。和

如果inspace为one,则表示上次打印的时间间隔。

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

参见C is current char read。(阅读评论)

代码语言:javascript
复制
  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

代码语言:javascript
复制
if(c != ' ') // A char not space read, its to to print unconditionally  
{
  inspace = 0;  // remember that non-scape print
  putchar(c);
}
票数 2
EN

Stack Overflow用户

发布于 2016-02-23 11:29:51

我花了一段时间,但我想这就是答案。

代码语言:javascript
复制
#include <stdio.h>

main()
{
    int c, blank;
    blank = 0;

    while ((c=getchar()) != EOF){
        if (c == ' '){
            if (blank == 0){
                printf("%c", c);
                blank = 1;
            }

        }
        if (c != ' '){
            if (blank == 1){
                blank = 0;
            }
            printf("%c", c);
        }


    }
}
票数 2
EN

Stack Overflow用户

发布于 2013-03-19 18:54:27

inspace本质上是一个变量,用于指示您是否处于“刚才看到的空间”状态。在看到空格后进入此状态,当看到非空格时退出此状态。只有在不处于inspace状态时才会打印输入,因此不会打印多个相邻的空格。

我设法创建了一个程序来完成这个任务,但它只使用了我创建的变量c,因此我理解它的用途。在您的程序中,如果输入是"hello world",那么这是它的确切输出吗?您发布的程序将输出"hello world“(将单词之间的多个空格压缩为一个)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15497208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档