这是我第一次在这里发帖,所以希望这能按预期进行。
我正在做 K&R 的早期练习之一。目标是使用 getchar() 从用户那里获取一堆字符,然后使用 putchar() 打印它们,但跳过任何额外的空格。我对练习的解决方案效果很好,但我不明白为什么。
这是程序:
#include <stdio.h>
int main()
{
int c, spc;
c = 0;
spc = 0;
while(c != EOF)
{
c = getchar();
if(c == ' ')
{
if(spc != 1)
{
putchar(c);
spc = 1;
}
}
if(c != ' ')
{
spc = 0;
putchar(c);
}
}
return 0;
}
只有一个循环,并且执行在第一次迭代期间按预期命中 getchar() 时停止。一旦按下回车,程序就会继续打印出用户在缓冲区中输入的任何内容,没有多余的空格——这正是它应该做的。
但我不明白的是,为什么在遇到 getchar() 时,循环的每次后续迭代都不会停止执行。/n 字符是否与它有关?我确实注意到它还会打印换行符,并且在打印完所有内容后,它会再次在 getchar() 处停止。那么,为什么它会在每次迭代开始时跳过 getchar() 而打印缓冲区中的所有内容?
我一直在玩 C 很长时间,但直到最近才努力以“正确”的方式学习它。由于我有一些经验,因此您不必过多地降低答案(因此,就像您向 10 岁而不是 5 岁的孩子解释它一样)。