c语言问题求助大神,为啥第二个while只能循环一次

2024-12-03 22:15:45
推荐回答(5个)
回答1:

你应该给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');
}

其中随机数函数你没有初始化,

回答2:

touppe()函数说明:若参数 为小写字母则将该对应的大写字母返回。

返回值:返回转换后的大写字母,若不须转换则将参数c 值返回。
while(toupper(answer)=='Y')中如果answer为y,则执行while下面的语句,如果answer不为y则不执下面的语句,所以只循环一次,确切的不能说是循环,以为while中是判断的语句,没有构成循环的部分。

回答3:

是不是在输入Y后没有执行

printf("这是一个猜数字的游戏\n请输入一个1到30间的数字\n");
scanf("%d",&n);
while(n>30||n<1) {printf("输入错误只能是1到30间的数字\n请重新输入\n");
scanf("%d",&n);}
那是你没有把他放到下面的while里

回答4:

char answer;

下面加一句
answer='Y'

回答5:

换成if试试吧