读书人

什么时候要驱除输入缓存区

发布时间: 2012-09-22 21:54:54 作者: rapoo

什么时候要清除输入缓存区
用哪些函数输入时需要清除输入缓存区呀??
我都糊涂了
书上有个scanf()后用getchar();说是清除scanf输入后留在缓存区里的\n
可我用VC试了一下,
就算不加getchar();的话,在scanf();后加ch=getchar();再putchar(ch);
也没见屏幕多空一行额。。。。

[解决办法]
fflush()是清除文件缓冲区,如:
#include <stdio.h>
#include <conio.h>
void main( void )
{
char string[81];
char ch[11];

printf( "Enter a sentence of four words with scanf: " );
scanf( "%s", string );
printf( "%s\n", string );
fflush(stdin); //如果没有这句,则stdio中还有数据,比如回车符
if(NULL!=fgets(ch,10,stdin))
printf("%x,%x\n",ch[0],ch[1]);

}

[解决办法]
[code=C/C++]#include <iostream>
using namespace std;

int main(void)
{
char arr[10] = {0};

for(int i = 0; i < 10; i++)
{
scanf("%c", &arr[i]);
fflush(stdin);//这里需要清除缓存区、否则输一个字符回车一次就只能输入5个字符、剩余5个是'\n'
}
for(int i = 0; i < 10; i++)
{
printf("%c|", arr[i]);
}
system("pause");
return 0;
}code]
[解决办法]
ch1 = getchar()再putchar(ch1)会多一行的,我用以下程序测试是这个结果

C/C++ code
#include <stdio.h>int main(){    char ch, ch1;    scanf("%c", &ch);    ch1 = getchar();    putchar(ch1);    return 0;} 

读书人网 >C++

热点推荐