鱼C论坛

 找回密码
 立即注册
查看: 684|回复: 1

[已解决]关于指针和数组产生随机数字相同问题

[复制链接]
发表于 2022-3-25 11:32:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>//rand函数需要
#include<time.h>//产生不同随机数需要
int main()
{
    int hq[6];//双色球红球数组
    int lq;//双色球蓝球变量
    int i,j;//循环变量
    int ls;//冒泡排序临时变量
    int *ptr_1=hq;//指向数组首元素的指针
    int *ptr_2;//指向数组末元素的指针
         ptr_2=hq+5;
    cgg:srand(time(NULL));//产生随机数,以时间为种子
    for(i=0;i<6;i++)//给六个球赋随机数字
    {
        hq[i]=rand()%33+1;//产生1-33的随机数字
    }
    for(i=0;i<6;i++)
    {
        for(j=0;j<5-i;j++)
        {
          if(ptr_1==ptr_2)
          {
              goto cgg;
          }
           ptr_2--;
        }
        ptr_1++;
    }
    lq=rand()%16+1;//产生1-16的随机数字
    for(i=0;i<5;i++)//冒泡排序法
    {
        for(j=0;j<5-i;j++)
        {
            if(hq[j]>hq[j+1])//如果紧挨着前面一个数值大于后面一个
            {
                ls=hq[j];//把前面一个元素的值赋值ls里面(临时变量)
                hq[j]=hq[j+1];//把后一个元素值赋给前面元素中
                hq[j+1]=ls;//然后把存放在ls里的第一个数组元素值赋给后面一个元素中,实现排序
            }
        }
    }
    for(i=0;i<6;i++)//打印红球
    {
        printf("%d\t",hq[i]);
    }
    printf("\n");
    printf("%d",lq);//打印蓝球
    return 0;
}
写了很久,也问了很久,求大神帮忙看下这个指针用法是否有错,用指针的本意是判断数组产生数字是否相同,能不能详细讲解一下,谢谢啦。我真的被自己的智商困了好几个月了。
最佳答案
2022-3-25 13:20:05
//应该是if(*ptr_1==*ptr_2),而且跳回cgg:ptr_1不等于hq, ptr_2不等于hq+5;,后面太容易越界了,你这个太麻烦了,太容易出错
#include<stdio.h>
#include<stdlib.h>//rand函数需要
#include<time.h>//产生不同随机数需要
int main()
{
    int ball[33]={0};

    int hq[6];//双色球红球数组
    int lq;//双色球蓝球变量
    int i,j;//循环变量
    int ls;//冒泡排序临时变量
    int *ptr_1=hq;//指向数组首元素的指针
    int *ptr_2;//指向数组末元素的指针
         ptr_2=hq+5;
   // cgg:
    srand(time(NULL));//产生随机数,以时间为种子
    for(i=0;i<6;)//给六个球赋随机数字
    {
        int tmp=rand()%33;
        if(0==ball[tmp])
        {
                hq[i++]=tmp+1;
                ball[tmp]=1;
        }
    }
   /* for(i=0;i<6;i++)
    {
        for(j=0;j<5-i;j++)
        {
          if(ptr_1==ptr_2)
          {
              goto cgg;
          }
           ptr_2--;
        }
        ptr_1++;
    }*/
    lq=rand()%16+1;//产生1-16的随机数字
    for(i=0;i<5;i++)//冒泡排序法
    {
        for(j=0;j<5-i;j++)
        {
            if(hq[j]>hq[j+1])//如果紧挨着前面一个数值大于后面一个
            {
                ls=hq[j];//把前面一个元素的值赋值ls里面(临时变量)
                hq[j]=hq[j+1];//把后一个元素值赋给前面元素中
                hq[j+1]=ls;//然后把存放在ls里的第一个数组元素值赋给后面一个元素中,实现排序
            }
        }
    }
    for(i=0;i<6;i++)//打印红球
    {
        printf("%d\t",hq[i]);
    }
    printf("\n");
    printf("%d",lq);//打印蓝球
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-25 13:20:05 | 显示全部楼层    本楼为最佳答案   
//应该是if(*ptr_1==*ptr_2),而且跳回cgg:ptr_1不等于hq, ptr_2不等于hq+5;,后面太容易越界了,你这个太麻烦了,太容易出错
#include<stdio.h>
#include<stdlib.h>//rand函数需要
#include<time.h>//产生不同随机数需要
int main()
{
    int ball[33]={0};

    int hq[6];//双色球红球数组
    int lq;//双色球蓝球变量
    int i,j;//循环变量
    int ls;//冒泡排序临时变量
    int *ptr_1=hq;//指向数组首元素的指针
    int *ptr_2;//指向数组末元素的指针
         ptr_2=hq+5;
   // cgg:
    srand(time(NULL));//产生随机数,以时间为种子
    for(i=0;i<6;)//给六个球赋随机数字
    {
        int tmp=rand()%33;
        if(0==ball[tmp])
        {
                hq[i++]=tmp+1;
                ball[tmp]=1;
        }
    }
   /* for(i=0;i<6;i++)
    {
        for(j=0;j<5-i;j++)
        {
          if(ptr_1==ptr_2)
          {
              goto cgg;
          }
           ptr_2--;
        }
        ptr_1++;
    }*/
    lq=rand()%16+1;//产生1-16的随机数字
    for(i=0;i<5;i++)//冒泡排序法
    {
        for(j=0;j<5-i;j++)
        {
            if(hq[j]>hq[j+1])//如果紧挨着前面一个数值大于后面一个
            {
                ls=hq[j];//把前面一个元素的值赋值ls里面(临时变量)
                hq[j]=hq[j+1];//把后一个元素值赋给前面元素中
                hq[j+1]=ls;//然后把存放在ls里的第一个数组元素值赋给后面一个元素中,实现排序
            }
        }
    }
    for(i=0;i<6;i++)//打印红球
    {
        printf("%d\t",hq[i]);
    }
    printf("\n");
    printf("%d",lq);//打印蓝球
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 05:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表