输入缓冲区数据残留问题

有时当编译器执行完后,结果界面不会停在,而是一闪而没,看不到执行结果。在结尾加上getchar同样一闪而没。

这是因为程序读入数据是从读入缓冲区读取的,当读入缓冲区有数据残留时就会直接从缓冲区读入数据,不会等待输入,就会出现上述结果。

 

解决办法有两种:

1、清空缓冲区数据。利用fflush(stdin)函数,这是标准做法。

    在Linux平台下可用setbuf(stdin,NULL);

2、scanf("%*[^\n]%*c");这是利用扫描集将缓冲区的数据全部取出以达到清空缓冲区数据。

  (解释:%*[^\n]是逐个读取'\n'字符之前的其他字符,%后面的*是将这些读取的字符丢掉,当遇到'\n'时停止读取操作,此时缓冲区上有一个'\n'残留,%*c是读取并丢掉这个遗留的换行符。)

posted on 2013-05-15 08:48  flash610  阅读(280)  评论(0编辑  收藏  举报