我试图寻找答案,但不能,希望有人可以提供帮助。 我有以下代码片段:
#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提示用户输入更多字符之前做了什么?
答案 0 :(得分:1)
首先,scanf
是一个函数。它指向一些代码,每次调用它时都会运行。不是角色。
scanf
的输入缓冲区为stdin
(至少在您的情况下),并且在程序运行时打开。每当您致电scanf
时,它都会尝试从stdin
进行阅读。如果它没有任何东西可读,它会要求用户输入内容。这就是它的工作方式。
现在,用户可能会引入一个EOF角色,但我认为这不是你想要的。