我正在阅读 K&R,问题是:编写一个程序以将其输入复制到其输出,将一个或多个空格的每个字符串替换为一个空格。在我的脑海中,我想我知道我需要做什么,设置一个布尔值来知道我何时在空间中。我已经尝试过了,但没有成功。我找到了这段代码并且它有效,我正在努力弄清楚是什么阻止了空间被写入。我想我可能有它,但我需要澄清。
#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;
}
我创建了一个文本文件来处理,文本内容如下:
so this is where you have been
在 'this' 上的 's' 之后,状态变为 1,因为我们在一个空间中。该空间被写入并读取下一个空间。所以现在我们输入:
while((c = getchar()) != EOF)
{
if(c == ' ')
{
if(inspace == 0)
{
inspace = 1;
putchar(c);
}
但是 inspace 不是 0,而是 1。那么会发生什么?代码是否跳过返回 0;,不写任何东西,只是继续 while 循环?返回0;在循环之外,但这是我可以看到没有返回值的唯一方法。