有四个地方需要修改:
首先,因为题目要求让计算机想一个数,所以可以使用函数来产生一个区间的随机数;
然后,猜数次数变量c初始化为0,让后面每猜数一次,变量c+1;
接着,从输入获取一个整数的话,需要在int变量b前加个取址符&;
最后,do-while循环的条件改为 a!=b,即当猜的数b不等于预设的数a时,循环猜数。
修改如下:
参考链接:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
// https://blog.csdn.net/qq_39445165/article/details/94891900
srand((unsigned)time(NULL));
// 因为题目要求让计算机想一个数
// 所以这里调用函数产生一个1到100的随机数
int a= rand()%100+1;
int b;
int c=0; // 次数初始化为0,后面每猜一次,次数+1
do{
// 从输入获取一个整数到变量b,需要int变量前加个取址符
scanf("%d",&b);
c+=1;
if(a>b){
printf("您猜的数小了\n");
}else if(a<b){
printf("您猜的数大了\n");
}
}while(a!=b); // 当a不等于b时,则循环猜数
printf("%d",c);
return 0;
}
答案:指令有很多选项,用来完成同一个命令的不同子功能,选项底层使用的就是我们的命令行参数! !
问题分析:
根据题目描述,猜数游戏的程序流程应该如下:
1.用户输入一个数字作为猜测的答案; 2.用户进行猜测; 3.如果猜对了,输出"你太厉害啦!",游戏结束; 4.如果猜错了,输出"请再猜一次吧",回到步骤2.
以上流程看起来似乎没有问题,但如果我们仔细思考一下,会发现猜数游戏存在以下问题:
1.游戏无法自动结束; 2.用户无限制地猜数,猜数的范围也并不清楚; 3.无法告诉用户猜测的答案是偏大还是偏小,让用户更难以猜对; 4.用户猜对后没有得到正确的答案反馈,也无法知道猜对了多少次。
基于以上问题,下面提出一些改进的方案:
1.添加一个限制次数,当用户猜错的次数达到限制次数后自动结束游戏,同时提供错误次数的反馈给用户; 2.在用户第一次猜数时,给出范围提示,例如"请在1~100之间猜测",这样就可以避免用户范围过大或过小; 3.提供猜数结果的反馈,告诉用户猜测的答案是偏大还是偏小,从而引导用户更快猜到答案; 4.猜对后给出正确答案,并告诉用户猜对的次数。
下面是代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
//生成随机数
srand(time(NULL));
int answer = rand() % 100 + 1;
int guess = 0;
int max_guess_count = 7;
int guess_count = 0;
printf("欢迎参加猜数游戏!\n");
printf("请在1~100之间猜数,你有%d次机会。\n", max_guess_count);
while (guess_count < max_guess_count) {
printf("请输入你猜测的数字:");
scanf("%d", &guess);
if (guess == answer) {
printf("猜对了!正确答案是%d,你用了%d次猜中了。\n", answer, guess_count+1);
return 0;
} else if (guess < answer) {
printf("太小了!再试试吧。\n");
} else {
printf("太大了!再试试吧。\n");
}
guess_count++;
printf("还有%d次机会,请继续猜数。\n", max_guess_count - guess_count);
}
printf("很遗憾,你已经猜错了%d次,正确答案是%d。\n", max_guess_count, answer);
return 0;
}
在以上代码中,我们添加了限制猜测次数,给出了范围提示,提供了猜数结果的反馈和正确答案的反馈,以及错误次数的反馈。这样就更加完善了猜数游戏的程序。
修改如下,供参考:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int x; //x的值由计算机随机产生
int b; //用户猜的数,从键盘输入
int c = 0;//记录用户猜数的次数
srand((unsigned int)time(NULL));
x = rand() % 100 + 1;
printf("***游戏开始***\n");
do{
printf("请输入你猜的数:");
scanf("%d", &b);
c++;
if (b > x)
printf("错误,你猜的数太大了!\n");
else if (b < x)
printf("错误,你猜的数太小了!\n");
} while (b != x && c < 10);
if (c < 10)
printf("***恭喜你,猜对了!你一共猜了%d次***\n", c);
else
printf("尝试次数超过10次,游戏已结束。下次加油哦!\n");
return 0;
}