我对此练习有一些疑问。这是我正在处理的代码:
#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,则仅输出回退的字符。没什么好说的,多余的空格会被删除,并且inspace不会被定义为0或1以外的任何东西,也没有什么将其定义为空格,因此它怎么可能对程序正在做什么有真正的意义?
我真的很困惑,替换空格的代码在哪里,它是如何工作的?我应该从中学习一本更简单的书来解释解决方案吗?
首先,putchar(c)如何不输出与输入的数据完全相同的数据。尽管它检查是否为空或!=空,但仍然说要输出“ c”,它只是getchar(c),意味着输入了什么。我看不到指定删除多余空格并仅输出一个空格的代码。代码在哪里指定必须发生什么?我在理解getchar / putchar的工作方式时遇到了麻烦。
正确的是,如果调用了putchar,则仅输出输入字符。该程序的关键是,并不是在每个输入字符上都调用putchar。各种if
语句控制何时调用。在较高的级别上,如果一行中有多个空格,则该程序避免在第二,第三,第四等空格上调用putchar。它仅在第一个空间被调用。
另外,inspace == 1或0有什么重要性?如果inspace == 1,则仅输出回退的字符。没什么好说的,多余的空格会被删除,并且inspace不会被定义为0或1以外的任何东西,也没有什么将其定义为空格,因此它怎么可能对程序正在做什么有真正的意义?
不要认为它是删除空格。可以认为它们被忽略了。有时会调用putchar,有时不会。查看循环并尝试找出导致不调用putchar的条件。
重要的是,看看启动循环迭代inspace == 1
,和会发生什么c == ' '
。怎么了?
汇总一张显示何时调用和不调用putchar的表可能会有所帮助。
Is putchar(c) called?
=====================
| c == ' ' | c != ' '
-------------+----------+---------
inspace == 0 | Y | Y
inspace == 1 | N | Y
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句