当前位置: 技术问答>linux和unix
linux 和 windows 的 缓存不一样 ?哪位高手帮我解释一下下面的问题,谢谢。
来源: 互联网 发布时间:2017-02-07
本文导语: 源程序 #include int main() { int ch; while (1) { printf("input n"); fflush(stdin); scanf("%c",&ch); printf("ch = %cn",ch); } return 0; } 在windows的vc6.0中运行正常:运行结果为 input a ch = a input 但是在linux中(我输入一个字...
源程序
#include
int main()
{
int ch;
while (1)
{
printf("input n");
fflush(stdin);
scanf("%c",&ch);
printf("ch = %cn",ch);
}
return 0;
}
在windows的vc6.0中运行正常:运行结果为
input
a
ch = a
input
但是在linux中(我输入一个字符会输出两个来,第二个为空)
[root@heiying fflush]# ./a.out
input
a
ch = a
input
ch =
input
请问这是什么原因,哪位帮我解释解释?
#include
int main()
{
int ch;
while (1)
{
printf("input n");
fflush(stdin);
scanf("%c",&ch);
printf("ch = %cn",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)这种用法并不是C标准规定的,C中这种特性是未定义的。只不过VC等实现了这种特性,属于一种扩展。
GCC里要清除缓冲区,请使用:
while ( (c = getchar()) != 'n' && c != EOF )
;
GCC里要清除缓冲区,请使用:
while ( (c = getchar()) != 'n' && c != EOF )
;
|
fflush(stdin)这个方法在GCC下不可用。(在VC6.0下可以)
你可以在scanf之后,再加一个getchar()
第二个输出的字符应该是回车
你可以在scanf之后,再加一个getchar()
第二个输出的字符应该是回车
|