Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C K&;R-练习1-9-删除空格_C_String_While Loop - Fatal编程技术网

C K&;R-练习1-9-删除空格

C K&;R-练习1-9-删除空格,c,string,while-loop,C,String,While Loop,我最近开始使用K&R手册(第二版)学习C,但我在练习1-9的解决方案上遇到了一些问题,这是: 编写一个程序,将输入复制到输出,替换每个字符串 用一块空白代替一块或多块空白 我在网上找到了下面的解决方案,除了putchar(“”)上面的分号之外,它基本上是有意义的;。没有它,程序就不能正常执行其功能,这个分号有什么功能 #include <stdio.h> int main(void) { int c; while ((c = getchar()) != EOF) {

我最近开始使用K&R手册(第二版)学习C,但我在练习1-9的解决方案上遇到了一些问题,这是:

编写一个程序,将输入复制到输出,替换每个字符串 用一块空白代替一块或多块空白

我在网上找到了下面的解决方案,除了putchar(“”)上面的分号之外,它基本上是有意义的;。没有它,程序就不能正常执行其功能,这个分号有什么功能

#include <stdio.h>

int main(void)
{
  int c;

  while ((c = getchar()) != EOF) {
    if(c  == ' ') {
      while((c = getchar()) == ' ')
      ;
      putchar(' ');
    }
    putchar(c);
  }
}
#包括
内部主(空)
{
INTC;
而((c=getchar())!=EOF){
如果(c=''){
而((c=getchar())=“”)
;
putchar(“”);
}
普查尔(c);
}
}
提前感谢。

声明

  while((c = getchar()) == ' ')
  ;
被解析为

  while((c = getchar()) == ' ');
这和

while((c = getchar()) == ' ') {
     /* Do nothing */
}
换句话说,这是一个while循环,它的身体没有任何影响。检查while循环的条件的行为读取字符并丢弃空格,这是您想要做的

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

语句:

while((c = getchar()) == ' ')
;
缩进不正确。应改为:

while((c = getchar()) == ' ')
    ;
是一个空语句,相当于一个空块
{}

这个孤独的
有些令人困惑,因此添加注释或其他强调以澄清其真实性质被认为是一种好的风格:

while ((c = getchar()) == ' ') {
    /* nothing */
}

while ((c = getchar()) == ' ')
    /* nothing */;
一些大胆的程序员编写了更令人困惑的表单(避免):

我个人更喜欢这种形式:

while ((c = getchar()) == ' ')
    continue;

我不喜欢这个“解决方案”,因为它不检查最里面的
getchar()
中的EOF。注意,代码也有一个缺陷。通过输入
+
EOF
,代码将调用
putchar(“”);putchar(EOF)当它只应调用
putchar(“”)时(我知道这是暗示)。K&R不是学习C语言的好参考,因为它现在已经不是1979年了,而且很多实践,那本书中的建议和代码示例根本不正确或不相关。也许你应该提到,使用简单的分号而不加注释或任何东西作为空语句是一种糟糕的风格,因为它很容易被忽略。
while ((c = getchar()) == ' ')
    continue;