我正在使用 K&R 的“C 编程语言”,目前正在做练习 1-12 [1]。问题不在于解决练习,而在于尝试解决由此产生的错误之一。
我的解决方案。
#include <stdio.h>
int main(void)
{
int c;
while ((c = getchar()) != EOF)
{
if (c == ' ' || c == '\t')
{
printf("\n");
}
else
{
putchar(c);
}
}
}
输出有问题
bash >>> ./Exercises/ex12
hello everyone
hello
everyone
我尝试根据Ex 1-9 [2]解决它,但没有成功。
#include <stdio.h>
#define PREVCHAR 'a'
int main(void)
{
int c, prevc = PREVCHAR;
while ((c = getchar()) != EOF)
{
if (c == ' ' && prevc == ' ')
{
printf("");
} else if (c == ' ' && prevc != ' ')
{
printf("\n");
} else
{
putchar(c);
prev = c;
}
}
}
我开始认为我没有能力用我所知道的来解决这个“错误”。也许我需要存储删除了多余空白或制表符的输入,然后输出带有制表符的空白或制表符。但这似乎很复杂。
[1] = 编写一个程序,每行打印一个单词的输入。
[2] = 编写一个程序将其输入复制到输出,用一个空格替换每个包含一个或多个空格的字符串。
第二个发布的代码是解决问题的一个非常好的起点。
#include <stdio.h>
int main(void)
{
int c = 0;
int prevc = 0;
while ((c = getchar()) != EOF)
{
if (c == ' ' && prevc == ' ')
{
continue;
} else if (c == ' ')
{
putchar('\n');
} else
{
putchar(c);
}
prevc = c;
}
}
只需更改第一个 esle/if 即可。第一个if不需要输出任何东西,继续就足够了。
查看
isspace ( )
以提供其他空白字符。