C语言 随机产生10个手机号,不能重复。输入英文名后绑定手机号,一个名字一个手机号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 随机产生10个手机号,不能重复。输入英文名后绑定手机号,一个名字一个手机号相关的知识,希望对你有一定的参考价值。

先显示这10个号码,然后输入名字,从10个号码中选一个,绑定。换一个名字输入同样的手机号,显示手机号已绑定。
不知道怎么让手机号不重复。。。。还有如何验证手机号已经绑定了。。。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

const int PHONE_LENGTH = 11;

const char* PREFIX = "139";

typedef struct 
    
    int available;
    char number[PHONE_LENGTH+1];
    char owner_name[31];
PhoneNumber;


void phoneNumberGenerator(PhoneNumber*phones,int size, const char *prefix);
void displayPhoneNumber(PhoneNumber*phones,int size);




int main(void)

    

    char tname[31];
    int  id ;
    PhoneNumber phones[10];
    
    phoneNumberGenerator(phones,10,PREFIX);
    
    displayPhoneNumber(phones,10);
    
    
    
    
    while(1)
    
        puts("请输入您的姓名");
        scanf("%s",tname);
    
        puts("请输入您喜欢号码的编号");
        scanf("%d",&id);
        
        if(phones[id].available)
        
            strcpy (phones[id].owner_name,tname);
            
            phones[id].available = 0;
            
            displayPhoneNumber(phones,10);
        else
        
            puts("此号已被占用,请选择其他的号码");
            
        
        
        
        
    
    
    

    return 0;
 






void phoneNumberGenerator(PhoneNumber*phones,int size,const char *prefix)

    
    int repeat;   //重复标志变量
    
    for(int i=0;i<size;++i)
    
        
        strncpy(phones[i].number,prefix,strlen(prefix));  //复制号码前缀 
        phones[i].available = 1;                          //初始化号码为可用 
        strcpy(phones[i].owner_name,"unknow") ;           //初始化号码的拥有着为 "unknow"   
        
        
        
        //开始产生号码 
        do
            
             repeat = 0;
            /*******************产生一个随机号码******************/
            for(int j = strlen(prefix);j<PHONE_LENGTH;++j)
            
                (phones[i].number)[j] = rand()%10+'0';
                
            
            (phones[i].number)[PHONE_LENGTH] = '\\0';
        
            /************************检测重复性**************************/
            for(int k=0;k<i;k++)
            
                if(strcmp(phones[i].number,phones[k].number)==0)
                
                    repeat = 1;    
                    break; 
                    
                
                
            
        while(repeat);   //如果当前产生的号码与之前的重复了,则再生成一个,直到不重复为止 
        
    
    
    
    



void displayPhoneNumber(PhoneNumber*phones,int size)

    
    
    printf("%-5s%-20s %-10s %s\\n","编号","号码","状态","拥有者");
    for(int i=0;i<size;++i)
    
        
        
        printf("%-5d%-20s %-10s %s\\n",i,phones[i].number,phones[i].available?"可用":"已占用",phones[i].owner_name);
        
        
    
    
    
    
    
    

参考技术A 是用一个数组存储10个号码的吧,那只要在生成新号码后用一个循环依次比较之前结果就行了,伪代码如下:
int i, j; //两个循环变量
int temp; //保存生成的号码
for(i = 0; i < SIZE; i++) //SIZE是你要存的号码数量

temp = fun1();
for(j = 0; j < i; j++)

//下面的fun1是你定义的产生手机号的函数,tel[]是存号码的
while(temp ==tel[j] ) //若有重复的,再生成一次就ok

temp = fun1();
j = 0; //更新号码后防止与前面的重复,继续从tel[0]开始比较


tel[i] = temp;


至于如何确认手机号已绑定,可以用一个flag数组变量表示嘛,flag数组清零,哪个号码绑定了就把flag里哪个元素置1,用的时候直接查。不过用一个数组的话无论如何都觉得太浪费空间了,只有10个号码的话,用一个16bit的short变量足够了,每一个bit代表一个号码是否被绑定,位操作没问题的吧?

C语言随机数序列编程:用C语言程序编写。生成随机数序列。范围:1-15要求生成1-15的随机序列,中间无重复

C语言随机数序列编程:用C语言程序编写。生成随机数序列。范围:1-15。要求生成1-15的随机序列,中间无重复。
例如;01 13 03 14 05 06 15 1109 10 08 12 02 04 07

//希望您你有帮助!
#include <stdio.h>
#include <time.h>

int main()

int a[15] = 0;
int count = 0;

srand(time(NULL));
while ( 1 )

int r = rand()%15 + 1;

if (++a[r] > 1)
continue;
else

printf("%02d ", r);
if (count++ > 15)
break;


return 0;

运行结果:07 08 06 14 11 13 01 04 09 02 10 05 12 03
参考技术A #include <stdlib.h>
  #include <stdio.h>
  #include <time.h> /*用到了time函数,所以要有这个头文件*/
  int main( void)
  
  int number[15] = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;
  int i;
  srand((unsigned) time(NULL)); /*播种子*/
int t=15;
  for(i = 0; i < t; i++)
  
  int p= rand() % (t-i); /*产生t-i以内的随机整数*/
  printf("%02d ", number[i]);
for(int j=p;j<t-i-1;j++)

p[j]=p[j++];


  
  printf("\n");
  return 0;
  
参考技术B #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)

int i;
int x[15];
int t=1,d=15;
srand(time(NULL)); /*初始化随机数种子*/
for(i=0;i<15;i++)
x[i]=rand()%(d-t)+t; /*生成一个[t,d)区间内的整数*/
for(i=0;i<15;i++)
printf("%d ",x[i]);
return 0;
参考技术C 我当年学C语言的时候貌似没学到这个功能(但是应该有),C#就有这个功能,如下:
Random rNum=new Random();//声明产生随机数Random类的实例。
int [ ]numbers=new int[15];
for(int i=0;i<15;i++)
number[i]=rNum.Next(1,16);//把产生的15个随机数放入数组numbers中。
建议你不要太纠结于C语言,C语言只是学点基础而已,以后编程都用不到C语言的。把C
语言的基础学扎实这是必要的。貌似0-7章特别重要...后面的就不是多重要了。

以上是关于C语言 随机产生10个手机号,不能重复。输入英文名后绑定手机号,一个名字一个手机号的主要内容,如果未能解决你的问题,请参考以下文章

c语言如何产生随机不重复的数,我不重复不知道怎么写。怎样不重复

用C语言写出一道关于随机数的编程题

c语言编程:输入一个正整数n,产生n个1000以内的随机数,统计其中这些随机数中偶数的个数,并输出统计结果.

怎样用c语言产生0-100随机数?求助高手

C语言随机数序列编程:用C语言程序编写。生成随机数序列。范围:1-15要求生成1-15的随机序列,中间无重复

python随机产生手机号和邮箱号