读书人

getchar()输入的有关问题难道这和缓

发布时间: 2013-01-01 14:04:18 作者: rapoo

getchar()输入的问题,难道这和缓冲区,缓存有关么
菜鸟一枚,求解答
#include<stdio.h>
void main()
{
int status;
int endsymbol=0;

char buff[1024];

int i=0;


printf("chatmodle\n");
while((status=getchar())!='\n')
;
printf("name\n");


while(i<6)
{

if(endsymbol==0)
buff[i+1]=getchar();
if(buff[i+1]=='\n')
{
buff[i+1]='#';
endsymbol=1;
}
if(buff[i]=='#')
buff[i+1]='#';
i++;
}





printf("chatobject\n");

i=0;
endsymbol=0;
buff[7]='!';
while(i<6)
{

if(endsymbol==0)
buff[i+8]=getchar();
if(buff[i+8]=='\n')
{
buff[i+8]='#';
endsymbol=1;
}
if(buff[i+7]=='#')
buff[i+8]='#';
i++;

}

if(status==1)
buff[0]='a';
else
buff[0]='b';


printf("%s",buff);
printf("over");

}





在提示name开始输入后,若果输入超过限定的字符,那些多输入的字符竟然会直接放到后面的buff元素里面,直接影响了chatobject的输入,我纠结了,这是什么情况,怎么解决啊。
[解决办法]


while((status=getchar())!='\n')
;
printf("name\n");
后面加上一句
fflush(stdin);
用来清空输入缓存,以便不影响后面输入的东西
[解决办法]
因为你的gethar会接受在输入缓冲区中的数据!你的buf正是由getchar()来从缓冲区中获取你想输入的数据,所以你的多余的数据会被放入进去,解决办法:在你的buf之前刷新一下缓冲区,去掉缓冲队列中的数据,fflush(stdin)既可!

读书人网 >C++

热点推荐