c语言猜数程序
scanf("%d ",& ampa);”在这一行中,输入一个数字后,还必须按回车键,所以这一行执行后,缓冲区中还有一个' \n '字符,即回车键字符。Execute to' }while(ch=getchar()!= ' n ');”,这个字符直接赋给ch(验证方法:put“while(ch = getchar())!= ' n ');“改成”while(ch=getchar()!= ' \ n ');“你会发现输入一个数字后程序直接结束。
对症下药:
方案一:“scanf ("%d ",&;a);”添加“fflush(标准输入);”在这条线之后。(功能:清除输入流)。但是这个改动的麻烦在于,每次输入一个数字,都要输入另一个字符,因为要执行getchar()。
选项2: "}while(ch=getchar()!= ' n ');"改成" }while(ch=getch()!
= ' n ');“(getch()会自动跳过前导回车符),所以有一个和方案1类似的麻烦,就是你要先按一个键才能输入一个数字。
方案三:优化代码:(顺便说一下,你的代码可读性有些问题,对比以下)
# include & ltstdlib.h & gt
# include & ltstdio.h & gt
# include & lttime.h & gt
int main()
{
char ch
int i,a;
Printf("猜数字游戏\ n \ n ");
srand(time(NULL));
I = rand()% 10;
Printf("请输入一个数字\ n \ n ");
while(1)
{
scanf("%d ",& ampa);
如果(i & gta)printf(" small \ n ");
如果(我& lta)printf(" big \ n ");
如果(i==a)
{
Printf("你猜对了!\ n ");
Printf("按n退出,按y继续\ n ");
fflush(stdin);//清空输入流
if(getchar()= = ' n ')break;
I = rand()% 10;//重新随机回答
}
}
}
把它给我,我花了很长时间!