【发布时间】:2015-04-29 19:10:35
【问题描述】:
我对这个练习有几个问题。这是我正在处理的代码:
#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);
}
}
if(c != ' ')
{
inspace = 0;
putchar(c);
}
}
return 0;
}
(抱歉,我在理解这些程序的工作原理时遇到了很多麻烦,因为它们非常简单,而且缺乏对它们实际工作方式的描述)
首先,putchar(c) 怎么不输出与进来的完全相同的数据。尽管它检查一个空白或 != 空白,它仍然说输出“c”,这只是 getchar(c) 的意思无论输入什么。我没有看到指定删除多余空格并仅输出一个空格的代码。代码在哪里指定必须发生的事情?在我看来,我无法理解 getchar/putchar 的工作原理。
另外,inspace == 1 或 0 有什么重要性?如果 inspace 为 == 1,那么它只会输出输入的字符。没有什么说删除了多余的空格,并且除了 0 或 1 之外没有将 inspace 定义为任何东西,没有将它定义为空格,那么它怎么可能对程序正在做什么有任何真正的意义呢?
我真的很困惑,替换空格的代码在哪里,它是如何工作的?有没有我应该学习的更简单的书来解释解决方案?
【问题讨论】:
-
如果它读取了一个空格,但它之前读取了一个空格(因为
inspace == 1),它不会调用putchar(c),因此输出与输入不同。 -
不确定究竟是什么导致了您的困惑。你知道
=和==之间的区别吗?您说“如果 inspace 为 == 1,那么它只会输出输入的字符。”,但这与发生的情况相反。 -
好吧,你说得对,我不是很清楚。我没有得到的是它删除额外空格的地方。在我看来,不管它说什么 putchar(c) 其中 C 代表输入的内容,我错了吗?删除/替换发生在哪里?我知道程序必须输出相同的字符,但它还必须用一个空格替换双空格,我看不出这是在哪里发生的。
标签: c