突然想起来c语言中常用的scanf函数还有getchar函数有可能会遇到关于缓冲区未被清空导致输入出现问题的情况。
刚刚学c的时候有道练习题遇到了键盘输入缓冲区出现的问题,然后今天同学做课设题目也遇到了相同的问题老师居然一时没解答出来--。
回来看了下大概的解释,写下来算是作为记录吧。
相对于getche()getche(),scanf()和getchar()是stdioh库里的函数,像我这种初学c的基本上输入都用getchar()和scanf()来解决。然而遇到大量输入的话就可能出现问题--。比如
#include<stdio.h>
int main ()
{
char c;
while((c = getchar())!='\n')
printf("%c",c);
printf("end");
return 0;
}
当你输入多个字符时这一段代码就会把你输入的一整串字符串都输出来,getchar()不是只读取一个字符吗--。
然而这并不是偶然.....
getchar()并不是从键盘直接读取字符,而是等你输入完成,比如输入一整串字符你会按个回车表示你输入完成了对吧,那么这个回车就是一个标志,从键盘读到回车符的时候程序才会进入getchar()这个函数,而你之前输入的东西都会被存放在内存中有一块叫输入流缓冲区的地方,任晗getchar()就开始在缓冲区读取字符,当它读完第一个字符后释放了那个字符所占的内存ÿ