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;//重新随机回答

}

}

}

把它给我,我花了很长时间!