C语言 随机产生10个手机号,不能重复。输入英文名后绑定手机号,一个名字一个手机号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 随机产生10个手机号,不能重复。输入英文名后绑定手机号,一个名字一个手机号相关的知识,希望对你有一定的参考价值。
先显示这10个号码,然后输入名字,从10个号码中选一个,绑定。换一个名字输入同样的手机号,显示手机号已绑定。
不知道怎么让手机号不重复。。。。还有如何验证手机号已经绑定了。。。
#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语言编程:输入一个正整数n,产生n个1000以内的随机数,统计其中这些随机数中偶数的个数,并输出统计结果.