日期:2014-05-16  浏览次数:20786 次

linux 和 windows 的 缓存不一样 ?哪位高手帮我解释一下下面的问题,谢谢。
源程序
#include <stdio.h>

int main()
{
int ch;
while (1)
{
printf("input \n");
fflush(stdin);
scanf("%c",&ch);
printf("ch = %c\n",ch);
}
return 0;
}

在windows的vc6.0中运行正常:运行结果为
input 
a
ch = a
input 


但是在linux中(我输入一个字符会输出两个来,第二个为空)
[root@heiying fflush]# ./a.out 
input 
a
ch = a
input 
ch = 

input 


请问这是什么原因,哪位帮我解释解释?


------解决方案--------------------
fflush(stdin)这个方法在GCC下不可用。(在VC6.0下可以)
你可以在scanf之后,再加一个getchar()

第二个输出的字符应该是回车
------解决方案--------------------
参考 scanf_百度百科

参考一下最后的“补充”部分
------解决方案--------------------
fflush(stdin)这种用法并不是C标准规定的,C中这种特性是未定义的。只不过VC等实现了这种特性,属于一种扩展。
GCC里要清除缓冲区,请使用:
while ( (c = getchar()) != '\n' && c != EOF )
;