你应该给answer赋初值'Y',或者使用 do while结构,这是第一个问题。
你第二个循环里面没有重新scanf读取n的值,这是第二个问题。
使用scanf的时候会遇到 缓冲区 没被清空(里面还有个回车换行),可以用fflush(stdin),不过这个有点忘了,你自己百度一下,这是第三个问题。
----------------------------------------------------------------------
你也不追问,只是评论里面问,我只好再修改答案了。
下面是我修改的代码
#include
#include
#include
main()
{
int n, x;
char answer = 'Y';
srand((unsigned)time(NULL));//初始化随机函数,不加这句的话,每次运行生成的随机序列都是一样的
printf("这是一个猜数字的游戏\n");
do
{
x = rand() % 30 + 1;
printf("请输入一个1到30间的数字\n");
scanf("%d", &n);
while(n > 30 || n < 1)
{
printf("输入错误只能是1到30间的数字\n请重新输入\n");
scanf("%d", &n);
}
if(n == x)
{
printf("你猜中了!恭喜!");
}
else
{
printf("你猜错了 数字是%d\n", x);
}
printf("还要继续吗 Y OR N\n");
fflush(stdin);
scanf("%c", &answer);
}
while( toupper(answer)== 'Y');
}
其中随机数函数你没有初始化,
touppe()函数说明:若参数 为小写字母则将该对应的大写字母返回。
返回值:返回转换后的大写字母,若不须转换则将参数c 值返回。
while(toupper(answer)=='Y')中如果answer为y,则执行while下面的语句,如果answer不为y则不执下面的语句,所以只循环一次,确切的不能说是循环,以为while中是判断的语句,没有构成循环的部分。
是不是在输入Y后没有执行
printf("这是一个猜数字的游戏\n请输入一个1到30间的数字\n");
scanf("%d",&n);
while(n>30||n<1) {printf("输入错误只能是1到30间的数字\n请重新输入\n");
scanf("%d",&n);}
那是你没有把他放到下面的while里
char answer;
下面加一句
answer='Y'
换成if试试吧