首页 > 解决方案 > 探索 getchar() 函数

问题描述

我对 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' 字符相关的任何内容

标签: cc99c89

解决方案


  • 您键入a并按回车键。标准输入缓冲区将看起来像a, \n, 两个字符。
  • 循环中的第一圈,c值为'a',不等于'\n',输出 0。
  • 循环中的下一圈,c值为'\n',等于'\n',输出 1。
  • 在输入结束时c变为时EOFprintf永远不会执行。

推荐阅读