【发布时间】:2015-01-29 09:02:39
【问题描述】:
我有这个简单的程序:
main()
{
int c;
while ((c = getchar()) != EOF)
{
if (c == ' ')
{
while ((c = getchar()) == ' ');
putchar(' ');
if (c == EOF) break;
}
putchar(c);
}
}
据我了解,有两个循环。第一个循环的条件是getchar 的输出与EOF 不同(因此循环在EOF 处中断);第二个循环的条件是getchar 的输出不是blank,那么它将正好输出一个blank,如果非空白字符是EOF,整个程序将中断。
是否需要对EOF 进行第二次检查?会不会被“发现”
第一个循环的条件?
为什么blank 字符会被第二个循环“消耗”,但第一个非空白字符仍然存在以便读取第一个getchar?
【问题讨论】:
-
例如,如果我输入字符串“this example”,外循环中的getchar会读取第一个空格,然后内循环中的getchar会读取一个空格和字母“e”,那么一旦内部循环中断,为什么字母“e”也会被另一个getchar读取?
-
在对需要中断的答案进行推理之后,我猜外部循环上的 putchar 输出了内部循环中 getchar 读取的字符...
-
同意第二条评论。
标签: while-loop eof getchar kernighan-and-ritchie