简单的猜数游戏,为什么执行完一次操作后程序会退出,而没有判断是否再次猜数?迷惑中,请各位大虾指教。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAX_NUM 100

void initialize_number_generator(void);
void choose_new_selected_number(void);
void read_guess_number(void);

int select_number;
char command;

int main()
{
initialize_number_generator();
do
{
choose_new_selected_number();
printf("new number has been selected.");
printf("\n");

read_guess_number();
printf("do you want to play again?(Y/N): ");
scanf("%c",&command);
printf("\n");
}while(command=='y');
return 0;
}

//初始化随机数生成器
void initialize_number_generator(void)
{
srand((unsigned) time(NULL));
}

//选择随机数(产生1-100的数)
void choose_new_selected_number(void)
{
select_number = rand() % MAX_NUM +1 ;
}

//读取并判断所猜的数,并统计猜对数字所需要的次数
void read_guess_number(void)
{
int guess_number;
int guess_time=0;

for(;;)
{
printf("enter your guess number: ");
scanf("%d",&guess_number);

guess_time++;

if(guess_number==select_number)
{
printf("oh,you get the true number!\nyou won after trying %d times\n",guess_time);
break;
}
else
{
if(guess_number < select_number)
printf("the number is too low.\n");
else
printf("the number is too high.\n");
}
}
}

我运行你的代码,确实有你说的这个问题,

解决这个问题的方法是把下面这段代码
read_guess_number();
printf("do you want to play again?(Y/N): ");
scanf("%c",&command);
printf("\n");
改成
read_guess_number();
printf("do you want to play again?(Y/N): ");
getchar();
scanf("%c",&command);
printf("\n");

就是在中间加上一句getchar();
这是因为在猜数字的过程中,我们每输一次数字,就会回车一下,所以加上getchar();用于接收最后一次猜对时候的回车,
如果不加的话command的值就是回车符,循环结束了。。。。

希望能帮到你。。仍有问题可以继续追问。。。。或者HI我。。。追问

您是说在第一次猜数中,相当于输入了两个字符吗?

追答

第一次猜数的时候,每次我们输入我们猜的数字,就会按回车键。。。如果不加getchar()来接收这个回车键。。。。
command的值就会是换行符,
你可以在read_guess_number();
printf("do you want to play again?(Y/N): ");
scanf("%c",&command);
printf("\n");
后面加一句
pintf("%d",command);
结果是10
换行符的ASCII编码就是10

温馨提示:内容为网友见解,仅供参考
无其他回答

反间计猜三个数字
第二步:利用反间计制造假象 在猜数字的过程中,我们可以利用反间计制造一些假象,让对手对我们的猜测失去信心。比如,我们可以假装不怎么在意对方的数字,故意错过几次。这样,对手就会认为我们没有真正掌握猜数的技巧,从而在下一次的猜测中放松警惕,更容易暴露自己的真实想法。第三步:观察反应,推断出...

C语言,猜数问题,返回上一级后没有重新进行程序怎么办?
为什么有两个"g1"标志?还有,"ex"标志在什麽位置?\/*--- \/\/修改了一下,看看是不是你需要的?\/\/---*\/ int b,i;char m;start:for(i=1;i<=10;i++){ g1:scanf("%d",&b);if((b == 's') || (b == 'S')) goto g1;if(b == 1){ if((b-a)>Pi) printf("Big\\...

用JAVA编写一个简单的猜数游戏程序
break;} else if(++count == 10) {System.out.print("猜测次数已达10次,猜数失败.\\n");break;} else if(inNum < iNum) {System.out.print("输入的值小,请输入更大的数.\\n");} else if(inNum > iNum) {System.

C语言课程设计
4)游戏者有限定次数的猜测机会,在规定次数内完成,则游戏成功,否则,游戏失败。其中,猜测次数与等级有关: 初级:10次 中级:9次 高级:8次。 5)按完成游戏所用的时间和次数计算游戏者所得分数,游戏等级越高,猜测所用的次数越少,得分越高!若游戏者得分比系统已经保存的分数的高,将提示要求输入游戏者信息,并且保存...

为什么做C时猜数5次没有结束游戏,应该怎么改?
首先陈述目前程序运行结果:若a!=i,会一直要求重猜直到猜对,猜对后输出猜测次数1,不输出"结束游戏"问题所在:while循环条件仅有a!=i,没有break,若想离开循环只能猜对。出while循环后还在for循环中,这时就j=j+1并且输出次数了,之后还有break,使for循环并没有什么用。由于此时j==1,if语句不...

ktv多人游戏
最初玩时,"坏人 "通常会表现得不自然,但多玩几次后,局面会越来越扑朔迷离,游戏也就越来越有意思了。 三、猜数字 规则: 猜数字( 1~100)每猜一次范围缩小,最后猜中的人倒霉挨罚 先由一个人来写一个数字,然后大家在1~100 间进行猜测。每猜一次范围缩小,最后猜中的人进行抽签接受这份大奖。下一轮由受罚...

java猜数游戏(产生1-100的随机数,5次没有猜中就退出,猜错了给予...
Toast.makeText(GuessActivity.this, "你还没有输入数字", Toast.LENGTH_SHORT).show();} else { if(answer == getNum){ outputInfo.setText("");outputInfo.setText(R.string.right);Toast.makeText(GuessActivity.this, "你总共猜了 "+count+" 次", Toast.LENGTH_SHORT).show();get...

求一篇1000字左右c语言之猜数游戏论文~!!!急用。。希望大家帮帮_百度...
仔细想一想整个游戏流程...大概是这样的:循环执行:输入;对比正确答案;输出提示;判断是否猜对;是:显示胜利并退出循环,否:不理会;次数加1;判断次数是否超出;是:显示失败并退出循环;循环结束;那么,为了更容易理解,我们使用死循环,但要注意一点:里面必须有使循环结束的语句!break;就是这个语句.那么:while...

编写一个猜数字游戏
scanf("%d",&b);while(a!=b){ if(b>a)printf("太大了!\\n");if(b

设计一个C语言程序 猜数游戏 规则:电脑随机产生一个1-100的随机数让玩 ...
rand() \/(double) RAND_MAX * 100);\/\/重置猜的次数guesscount = 0;while( 1 ){guesscount++;printf("猜猜是几:");scanf("%d",&g);if( g==-1) \/\/如果输入的玩家数为-1,退出程序return 0;if(g == rst ){printf("恭喜,只用%d次就猜对了。\\r\\n再来一把!\\r\\n",...

相似回答
大家正在搜