goodman4399 2021-12-28 21:01 采纳率: 100%
浏览 28
已结题

对这个编程问题存在疑问

img

img


请问大神我这个代码有什么错误啊,看似可以完成但是有不可以完成,对于字符串的比较这里面好像存在错位但是我不知道错在哪里,有没有大神能够指点一下。

  • 写回答

1条回答 默认 最新

  • 关注

    (1)生成随机数的时候,如果跟之前的重复了,你只重新生成了一次,如果这次也是重复的,你没有重新生成
    (2)猜数的时候,没有判断每个位置上的数字(比如位置不正确数字正确的情况)
    之前写过一个代码,一样的题目,代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    //生成3个位不重复的十六进制数,以字符形式返回每个位上的数
    void getrand(char *aa,char *bb,char *cc)
    {
        int a,b,c;
        //int s=0;
        a = rand()%15+1; //生成1-15的随机数
        while(1)
        {
            b = rand()%15; //生成0-15的随机数
            if(b != a)
                break; //避免b跟a重复
        }
        //生成c
        while(1)
        {
            c = rand()%15; //生成0-15的随机数
            if(c != a && c != b)
                break;
        }
        //s = a*16*16+b*16+c;
        //printf("三个位置上的数分别是:%d %d %d\n",a,b,c);
        //printf("生成的三位数十六进制分别是:%X %X %X\n",a,b,c);
        if(a<10)
            *aa = '0'+ a;
        else
            *aa = 'A'+a-10;
        if(b<10)
            *bb = '0'+ b;
        else
            *bb = 'A'+b-10;
        if(c<10)
            *cc = '0'+ c;
        else
            *cc = 'A'+c-10;
    }
    int main()
    {
        char a,b,c;
        char a1,b1,c1;
        int times = 8;
        srand((unsigned int)time(NULL));
        getrand(&a,&b,&c);
        while(times)
        {
            printf("请输入3个位上的数字(0-F):");
            scanf("%c%c%c",&a1,&b1,&c1);
            getchar();
            if(a1==a && b1==b && c1==c)
            {
                printf("猜对了\n");
                break;
            }else
            {
                if(a1==a)
                    printf("数字 1 位置正确数字正确;");
                else
                {
                    if(a1 ==b || a1==c)
                        printf("数字1 位置不正确数字正确;");
                }
     
                if(b1==b)
                    printf("数字 2 位置正确数字正确;");
                else
                {
                    if(b1 ==a || b1==c)
                        printf("数字2位置不正确数字正确;");
                }
                if(c1==c)
                    printf("数字 3 位置正确数字正确。");
                else
                {
                    if(c1==a ||c1==b)
                        printf("数字 3 位置不正确数字正确。");
                }
                times--;
                //printf("请重新输入:");
            }
        }
        if(times==0)
            printf("8次没猜对,游戏结束");
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月5日
  • 已采纳回答 12月28日
  • 创建了问题 12月28日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器