我是新手,对编程逻辑总的来说比较新。为了发展我的技能,我开始阅读这篇精美的文献。我真的觉得我很好地掌握了这些概念但是这个练习似乎让我措手不及。我可以制作该程序,但我见过的一些例子似乎介绍了本书尚未涵盖的一些概念,例如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,因此我理解了它的用途。
答案 0 :(得分:2)
此代码的目标是复制文本,如果有多个空格' '
连续打印一个空格。
变量inspace
用于跟踪上次打印的字符是scape还是非空格
如果inspace
为零则表示打印的字符不是空格。和
如果inspace
是一个意味着最后一次打印空间。
因此,如果下次在阅读景观时可以打印inspace
为零,并且如果inspace
是1,则发现下一个连续的景观不会打印空间。
请参阅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);
}
答案 1 :(得分:2)
我花了一段时间,但这是我想的答案。
#include <stdio.h>
main()
{
int c, blank;
blank = 0;
while ((c=getchar()) != EOF){
if (c == ' '){
if (blank == 0){
printf("%c", c);
blank = 1;
}
}
if (c != ' '){
if (blank == 1){
blank = 0;
}
printf("%c", c);
}
}
}
答案 2 :(得分:1)
inspace
本质上是一个变量,表示您处于或未处于“刚看到的空间”状态。在看到空格后进入此状态,并在看到非空格时退出此状态。仅当您未处于inspace
状态时才打印输入,因此不打印多个相邻空格。
我设法创建了一个完成此任务的程序,但它只使用了我创建的变量c,因此我理解了它的用途。 在你的程序中,如果输入是“hello world”,那它的确切输出是什么?您发布的程序将输出“hello world”(将单词之间的多个空格压缩为一个)。
答案 3 :(得分:0)
我也遇到了同样的问题,但是终于有了一个可以运行的程序。
#include<stdio.h>
/* copy input to its output, replacing each
string of one or more blanks by a single blank */
int main()
{
int c, nspace=0;
while((c=getchar()) != EOF){
if(c==' ') ++nspace;
else{
if(nspace >= 1){
printf(" ");
putchar(c);
nspace=0;
}
else
putchar(c);
}
}
}