输入缓冲区中的最后一个字符(C)

时间:2014-12-05 15:12:42

标签: c input buffer

我试图寻找答案,但不能,希望有人可以提供帮助。 我有以下代码片段:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char c = '\0';
    int error = scanf(" %c", &c);

    // The user types now the following: A54fG6

    while (error != EOF) {
        printf("%c", c);
        error = scanf(" %c", &c);
    }
    return 0;
}

第一个注释是,输入缓冲区指向A.然后它进入while循环,打印字符'A',第二个scanf使输入缓冲区前进到指向5.在最后一次注释后,当printf打印'6' - 第二个scanf指向什么字符?

或者换句话说,我怎么知道程序何时读完当前输入缓冲区然后在scanf提示用户输入更多字符之前做了什么?

1 个答案:

答案 0 :(得分:1)

首先,scanf是一个函数。它指向一些代码,每次调用它时都会运行。不是角色。

scanf的输入缓冲区为stdin(至少在您的情况下),并且在程序运行时打开。每当您致电scanf时,它都会尝试从stdin进行阅读。如果它没有任何东西可读,它会要求用户输入内容。这就是它的工作方式。

现在,用户可能会引入一个EOF角色,但我认为这不是你想要的。