读书人

关于输入语句的有关问题

发布时间: 2012-12-29 10:28:09 作者: rapoo

关于输入语句的问题
以下是一个程序的一部分,这个程序第一个输入是判断进入哪个函数,这里输入3,进入输入字母的函数,第二次输入五个字母,如果全为字母则结束,否则显示error并重新输入
。但为什么第一次输入完时就进行了第二次输入的判断了?,就是我输入了3然后直接显示error让重新输入,这是为什么?这个怎么处理?


main()
{
printf("1:shuzi\n2:fuhao\n3:zimu\nplease input you choice:");
scanf("%d",&cho); /*第一次输入*/
if(cho==3)
/*省略了一些内容*/
else duizhaoshuru();
}

/*省略了一些内容*/

void duizhaoshuru()
{
int n;
printf("input 5 word:");
gets(word); /*第二次输入*/
for(n=0;n<5;n++)
if(!(word[n]>='a'&&word[n]<='z'||word[n]>='A'&&word[n]<='Z'))/*判断是否全是字母*/
{
printf("Input Error! Please Input Again\n");/*如果其中有不是字母的,显示error,并重新输入*/
duizhaoshuru();
break;
}
}

[解决办法]
输入缓存没有清空,在用标准输入时,换行是会存在缓冲区的,比如

int nA = 0;
while(1)
{
printf("请输入一个数组");
scanf("%d",&nA);
printf("输入的数字是%d", nA);
}

第一次会停止在scanf,第二次就不会,因为第一次缓冲区没有东西,第二次有一个换行符,所以不会停止,windows下可以在每个scanf后面加上fflush(stdin)来清除缓冲区的内容
[解决办法]
换行还在缓冲区内,没有清空掉。
调用一下getchar()函数就行

读书人网 >C语言

热点推荐