这是一个猜数游戏,我写的程序有什么问题吗

img

img


////////////////////////程序和要求图片如上

有四个地方需要修改:

首先,因为题目要求让计算机想一个数,所以可以使用函数来产生一个区间的随机数;

然后,猜数次数变量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;
} 

img

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/212813
  • 这篇博客你也可以参考下:求一个数的约数有多少个
  • 除此之外, 这篇博客: 进程管理的概念中的 那么我们的命令行参数有什么用呢? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 答案:指令有很多选项,用来完成同一个命令的不同子功能,选项底层使用的就是我们的命令行参数! ! 

  • 您还可以看一下 张传波老师的软件设计是怎样炼成的?课程中的 架构设计的第一层拆解小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题分析:

    根据题目描述,猜数游戏的程序流程应该如下:

    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;
}