对这个编程问题存在疑问

img

img


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

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