首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >K&R -练习1-9 -移除空间

K&R -练习1-9 -移除空间
EN

Stack Overflow用户
提问于 2017-07-16 15:21:11
回答 2查看 771关注 0票数 11

我最近开始使用K&R书学习C(第二版)。我只是很难用这个解决方案来练习1-9,也就是:

编写一个程序将其输入复制到其输出,将一个或多个空格的每个字符串替换为单个空白。

我在网上找到了下面的解决方案,除了putchar(‘’)上的分号外,它基本上是有意义的。没有它,程序不能正确地执行它的功能,分号提供什么功能?

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

int main(void)
{
  int c;

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

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-07-16 15:56:00

声明:

代码语言:javascript
复制
while((c = getchar()) == ' ')
;

缩进不正确。它应改为:

代码语言:javascript
复制
while((c = getchar()) == ' ')
    ;

;是一个空语句,相当于一个空块{ }

这个孤独的;有点令人困惑,因此添加评论或其他强调以澄清其真实性质被认为是不错的风格:

代码语言:javascript
复制
while ((c = getchar()) == ' ') {
    /* nothing */
}

while ((c = getchar()) == ' ')
    /* nothing */;

一些大胆的程序员编写了更令人困惑的表单(避免它):

代码语言:javascript
复制
while((c = getchar()) == ' ');

我个人更喜欢这种类似的形式:

代码语言:javascript
复制
while ((c = getchar()) == ' ')
    continue;
票数 17
EN

Stack Overflow用户

发布于 2017-07-16 15:27:34

声明

代码语言:javascript
复制
  while((c = getchar()) == ' ')
  ;

被解析为

代码语言:javascript
复制
  while((c = getchar()) == ' ');

它的效果与

代码语言:javascript
复制
while((c = getchar()) == ' ') {
     /* Do nothing */
}

换句话说,它是一个while循环,它的身体没有作用。检查while循环的条件的动作是读取字符和丢弃空格,这就是您想要做的。

如果删除分号,则while循环体将成为循环后的语句,这将导致错误的语句重复。

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

https://stackoverflow.com/questions/45130206

复制
相关文章

相似问题

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