我是这里的新手,一般来说对编程逻辑比较陌生。为了提高我的技能,我开始阅读这篇精美的文学作品。我真的觉得我很好地掌握了这些概念,但这个练习似乎让我措手不及。我可以生成程序,但我见过的一些示例似乎介绍了本书尚未涵盖的一些概念,例如 here 示例。 inspace
似乎提供的功能不仅仅是程序员创建的变量。
#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;
}
在下一个示例中,
pc
似乎在计算空格方面做了一些事情,但我不确定是什么。我设法创建了一个完成此任务的程序,但它仅使用了我创建的变量 c,因此我了解它的用途。
最佳答案
此代码的目的是复制文本,如果有多个空格,则 ' '
连续仅打印一个空格。
变量 inspace
用于跟踪上次打印的字符是 scape 还是非空格。
如果 inspace
为零意味着打印的字符不是空格。和
如果 inspace
为 1,则表示最后一次打印空间。
因此,如果 inspace
为零,下次可以在读取 scape 时打印 scape,如果 inspace
为 1,则找到下一个连续的 scape,因此不打印空间。
请参阅 C
是当前读取的字符。 (阅读评论)
if(c == ' ') // currently space read
{
if(inspace == 0) // last time non-space printed, So space can be print
{
inspace = 1; // printing space so switch inspace 1
putchar(c); // print space
}
}
下一个
if
if(c != ' ') // A char not space read, its to to print unconditionally
{
inspace = 0; // remember that non-scape print
putchar(c);
}
关于c - C 编程语言 K&R 练习 1-9,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15497208/