【发布时间】:2019-03-01 13:49:14
【问题描述】:
我对 C 很感兴趣,所以我想更多地探索 C,尤其是 C89,看看这种语言随着时间的推移是如何变化的 :)。我买了 Denis Ritchie 的《The C programming language》(第 2 版)。
书中的一个例子让我想到了一个关于 getchar() 函数的复杂情况。
示例 1 是我阅读本书后的示例:
#include <stdio.h>
int main()
{
int c = getchar();
printf("\'\\n\' character in c: %d\n", c == '\n');
printf("\'\\n\' character in c: %d\n", c == '\n');
}
示例 1 的输出为:
a
'\n' character in c: 0
'\n' character in c: 0
在这种情况下,输出不会在此输入中显示任何换行符。但是,我尝试的另一个示例是:
#include <stdio.h>
int main()
{
int c;
while ((c = getchar()) != EOF) {
printf("\'\\n\' character in c: %d\n", c == '\n');
}
}
代码的输出是:
a
'\n' character in c: 0
'\n' character in c: 1
我不明白为什么第二个示例复制了 printf() 函数,以及它在进入循环时如何读取 '\n' 字符。同时,第一个示例没有显示与 '\n' 字符相关的任何内容
【问题讨论】:
-
跟输入流有关;第一次调用后 /n 仍留在输入流中。
-
在第一个代码中,您只检查了两次
a,而在第二个代码中,它检查了a,然后是\n。 -
先生。 @Blaze,你能向我解释一下内存在这两种情况下是如何工作的吗?谢谢你
-
Lundin 的回答很好地涵盖了这一点。在第一个示例中它没有检查
\n的原因是因为您没有告诉它这样做。int c = getchar();将a转换为c,然后您将检查那个两次。你从来没有读过\n。在第一次打印之后,您可能想要另一个c = getchar();。