电话号码管理系统

转载自https://blog.csdn.net/wendy_dreamcatcher/article/details/72860935


题目要求是这个样子的。。。

设计散列表(哈希表)实现电话号码查找系统。

基本要求: 

1) 设每个记录有下列数据项:电话号码、用户名、地址等相关信息; 

2) 从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;

3) 采用一定的方法解决冲突;

4) 查找并显示给定电话号码的记录;

5) 查找并显示给定用户名的记录。

6) 允许对记录进行相关的增加,修改,删除,。

扩展要求: 

1) 系统功能的完善; 

2) 设计不同的散列函数,比较冲突率; 

3) 在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。

其实。。。

我到现在也没有弄明白为什么要分别以电话号码和用户名来建立哈希表呢。。。

搞不明白。。。

[cpp]  view plain  copy
  1. #include<stdio.h>  
  2. #include<stdlib.h>  
  3. #include<string.h>  
  4. #define MAXSIZE  20  
  5. #define MAX_SIZE 20  //人名的最大长度  
  6. #define HASHSIZE 60  //定义表长  
  7. #define SUCCESS 1  
  8. #define UNSUCCESS -1  
  9. #include<iostream>  
  10. using namespace std;  
  11. typedef int Status;  //为现有类型添加一个同义字  
  12. typedef char NA[MAX_SIZE];// typedef 掩饰数组类型  
  13. typedef struct//记录  
  14. {  
  15.    NA name;  
  16.    NA address;       //关键字  
  17.    NA tel;  
  18. }humen;        //查找表中记录类型  
  19. typedef struct   //建立哈希表  
  20. {  
  21.    humen *elem[HASHSIZE];//数据元素存储基址  
  22.    int cou;               //当前数据元素个数  
  23.    int siz;              //当前容量  
  24. }HashTable;  
  25. typedef struct     //建立哈希表  
  26. {  
  27.    humen *elema[HASHSIZE];//数据元素存储基址  
  28.    int cou2;              //当前数据元素个数  
  29.    int siz2;              //当前容量  
  30. }Hashtable;  
  31. Status eq(char x[MAX_SIZE],char y[MAX_SIZE])  //比较两个数组是否相等,若相等返回1,否则返回-1  
  32. {  
  33.    if(strcmp(x,y)==0)  
  34.    return 1;  
  35.    else return -1;  
  36. }  
  37. Status NUM_BER;   //记录的个数   全局变量  
  38. Status NUM_BER1;  //记录的个数   全局变量  
  39. void output(humen* a)      //遍历用户的信息  
  40. {  
  41.     int i;  
  42.     system("cls");  
  43.     printf("姓名\t地址\t电话号码");  
  44.     for( i=0;i<NUM_BER+NUM_BER1;i++)  
  45.     {  
  46.         if(!a[i].name[0]=='\0')  
  47.            printf("\n%s\t%s\t\t%s",a[i].name,a[i].address,a[i].tel);  
  48.     }  
  49.   
  50.     cout<<endl;  
  51.     system("pause");  
  52.     system("CLS");  
  53. }  
  54. int Hash(char name[MAX_SIZE])//将输入的字符数组转换成ASCII码后相加求和,然后取表长余数,并将余数值返回//一次探测  
  55. {  
  56.     int i,m;  
  57.     i = 1;  
  58.     m=(int)name[0];  //强制转化成数字  
  59.     while(name[i]!='\0')  
  60.     {  
  61.         m+=(int)name[i];//余数  
  62.         i++;  
  63.     }  
  64.     m=m%HASHSIZE;  
  65.     return m;  
  66. }  
  67. int Hash2(char num[MAXSIZE])  
  68. {  
  69.     int i=0,key=0;  
  70.     while(i!=MAXSIZE)//关键字  
  71.         {  
  72.             key+=(num[i]-'0');//关键字求和  
  73.             i++;  
  74.         }  
  75.          key=key%HASHSIZE;  
  76.       return key;  
  77. }  
  78. Status collision(int p,int c)//冲突处理函数,采用二次探测法解决冲突//二次探测  
  79. {  
  80.     int i,q;  
  81.     i=c/2+1;  
  82.     while(i<HASHSIZE)  
  83.     {  
  84.        if(c%2==0)  
  85.        {  
  86.          c++;  
  87.          q=(p+i*i)%HASHSIZE;//倘若c为偶数,函数公式为:(余数+i*i)%表长,返回合理值  
  88.          if(q>=0)  
  89.             return q;  
  90.          else  
  91.             i=c/2+1;  
  92.        }  
  93.       else  
  94.        {  
  95.          q=(p-i*i)%HASHSIZE;//若c为奇数,函数公式为:(余数-i*i)%表长,返回合理值  
  96.          c++;  
  97.          if(q>=0) return q;  
  98.          else i=c/2+1;  
  99.        }  
  100.      }  
  101.      return UNSUCCESS;  
  102. }  
  103.   
  104. void CreateHash(HashTable* H,humen* a,int m)//建表,以人的姓名为关键字,建立相应的哈希表  
  105. {  
  106.   
  107.     int i,p=-1,c=0,pp;  
  108.   
  109.     cout<<"以姓名为关键字建立哈希表"<<endl;  
  110.     for(i=0;i<m;i++)  
  111.     {  
  112.       c=0;                         //记录冲突次数的变量  
  113.       p=Hash(a[i].name);  
  114.       pp=p;  
  115.       while(H->elem[pp]!=NULL)   //若不为空,即产生冲突,调用冲突处理函数  
  116.       {  
  117.          pp=collision(p,c);     //若哈希地址冲突,进行冲突处理  
  118.          c++;  
  119.          if(pp<0)  
  120.          {  
  121.             printf("第%d记录无法解决冲突",i+1);//需要显示冲突次数时输出  
  122.             continue;                    //无法解决冲突,跳入下一循环  
  123.          }  
  124.       }  
  125.       H->elem[pp]=&(a[i]);    //求得哈希地址,将信息存入  
  126.       H->cou++;               //表当前数据个数+1  
  127.       printf("第%d个记录冲突次数为%d。\n",i+1,c);  
  128.      }  
  129. }  
  130. void CreateHash2(Hashtable* H,humen* a,int m)  //建表,以人的姓名为关键字,建立相应的哈希表  
  131. {  
  132.   
  133.     int i,p=-1,c=0,pp;  
  134.     cout<<"以电话号码为关键字建立哈希表"<<endl;  
  135.     for(i=0;i<m;i++)  
  136.     {  
  137.       c=0;                       //记录冲突次数的变量  
  138.       p=Hash2(a[i].tel);  
  139.       pp=p;  
  140.       while(H->elema[pp]!=NULL)  //若不为空,即产生冲突,调用冲突处理函数  
  141.       {  
  142.          pp=collision(p,c);        //若哈希地址冲突,进行冲突处理  
  143.          c++;  
  144.          if(pp<0)  
  145.          {  
  146.             printf("第%d记录无法解决冲突",i+1);   //需要显示冲突次数时输出  
  147.             continue;                             //无法解决冲突,跳入下一循环  
  148.          }  
  149.       }  
  150.       H->elema[pp]=&(a[i]);                       //求得哈希地址,将信息存入  
  151.       H->cou2++;                                  //表当前数据个数+1  
  152.       printf("第%d个记录冲突次数为%d。\n",i+1,c);  
  153.      }  
  154. }  
  155. void Create(HashTable* H,humen* a,Hashtable* H2)    //创建新的通讯录  
  156. {  
  157.     system("CLS");//调用DOS命令CLS能够清屏  
  158.     memset(a->tel,0,sizeof(a->tel));  
  159.         printf("\n输入要添加的个数:\n");  
  160.         scanf("%d",&NUM_BER);  
  161.         for(int i=0;i<NUM_BER;i++) //输入创建的用户信息  
  162.         {  
  163.            printf("请输入第%d个记录的姓名:\n",i+1);  
  164.            scanf("%s",a[i].name);  
  165.            printf("请输入%d个记录的地址:\n",i+1);  
  166.            scanf("%s",a[i].address);  
  167.            printf("请输入第%d个记录的电话号码:\n",i+1);  
  168.            scanf("%s",a[i].tel);  
  169.         }  
  170.   
  171.           printf("添加成功!!!\n");  
  172.           CreateHash(H,a,NUM_BER);  
  173.           CreateHash2(H2,a,NUM_BER);  
  174.           system("pause");  
  175.           system("CLS");  
  176. }  
  177. void add(humen* a,humen *b,HashTable* H,Hashtable* H2)            //增加新的通讯录  
  178. {  
  179.     memset(b->tel,0,sizeof(b->tel));  
  180.     system("CLS");                               //调用DOS命令CLS能够清屏  
  181.         printf("\n输入要添加的个数:\n");  
  182.         scanf("%d",&NUM_BER1);  
  183.         for(int i=0;i<NUM_BER1;i++)             //输入创建的用户信息  
  184.         {  
  185.            printf("请输入第%d个记录的姓名:",i+1);  
  186.            scanf("%s",b[i].name);  
  187.            for(int j=0;j<MAXSIZE;j++)  
  188.            {  
  189.                a[i+NUM_BER].name[j]=b[i].name[j];  
  190.            }  
  191.            printf("请输入%d个记录的地址:",i+1);  
  192.            scanf("%s",b[i].address);  
  193.             for(int j=0;j<MAXSIZE;j++)  
  194.            {  
  195.                a[i+NUM_BER].address[j]=b[i].address[j];  
  196.            }  
  197.            printf("请输入第%d个记录的电话号码:",i+1);  
  198.            scanf("%s",b[i].tel);  
  199.             for(int j=0;j<MAXSIZE;j++)  
  200.            {  
  201.                a[i+NUM_BER].tel[j]=b[i].tel[j];  
  202.            }  
  203.         }  
  204.   
  205.           printf("添加成功!!!\n");  
  206.           CreateHash2(H2,b,NUM_BER1);  
  207.           CreateHash(H,b,NUM_BER1);  
  208.   
  209.           system("pause");  
  210.           system("CLS");  
  211. }  
  212.   
  213. void SearchHash(HashTable* H,int c,humen *a,Hashtable* H2)  //在通讯录里查找姓名关键字,c用来记录冲突次数,若查找成功,显示信息  
  214. {  
  215.     int i;  
  216.        int p,pp;  
  217.     NA NAME;                    //定义要查找的名字的字符数组  
  218.     system("cls");  
  219.     int l;  
  220.     cout<<"1.按姓名查找"<<endl;  
  221.     cout<<"2.按电话号码查找"<<endl;  
  222.     cout<<"请输入你的选项"<<endl;  
  223.     cin>>l;  
  224.         switch(l)  
  225.         {  
  226.         case 1:  
  227.             do  
  228.             {  
  229.               printf("\n请输入要查找记录的姓名:\n");  
  230.             scanf("%s",NAME);  
  231.             p=Hash(NAME);               //调用一次探测函数  
  232.             pp=p;  
  233.             while((H->elem[pp]!=NULL)&&(eq(NAME,H->elem[pp]->name)==-1))//倘若一探测结果和所要查找的结果不同,调用二次探测函数  
  234.            {  
  235.                 pp=collision(p,c);  
  236.                 c++;                  //冲突次数增加  
  237.            }  
  238.            if(H->elem[pp]!=NULL&&eq(NAME,H->elem[pp]->name)==1)  //探测到结果后将信息输出  
  239.            {  
  240.                 printf("\n查找成功!\n查找过程冲突次数为%d.以下是您需要要查找的信息:\n\n",c);  
  241.                 printf("姓名:%s\n地址:%s\n电话号码:%s\n",H->elem[pp]->name,H->elem[pp]->address,H->elem[pp]->tel);  
  242.            }  
  243.             else printf("\n此人不存在,查找不成功!\n");  
  244.             cout<<"是否继续查找?1.继续0.退出"<<endl;  
  245.             cin>>i;  
  246.             }while(i!=0);  
  247.             system("pause");  
  248.            system("CLS");  
  249.            break;  
  250.         case 2:  
  251.              do  
  252.              {  
  253.             memset(NAME,0,sizeof(NAME));//初始化  
  254.              printf("\n请输入要查找记录的电话号码:\n");  
  255.             scanf("%s",NAME);  
  256.             p=Hash2(NAME);          //调用一次探测函数  
  257.             pp=p;  
  258.             while((H2->elema[pp]!=NULL)&&(eq(NAME,H2->elema[pp]->tel)==-1))//倘若一探测结果和所要查找的结果不同,调用二次探测函数  
  259.            {  
  260.                 pp=collision(p,c);  
  261.                 c++;              //冲突次数增加  
  262.            }  
  263.            if(H2->elema[pp]!=NULL&&eq(NAME,H2->elema[pp]->tel)==1)  //探测到结果后将信息输出  
  264.            {  
  265.                 printf("\n查找成功!\n查找过程冲突次数为%d.以下是您需要要查找的信息:\n\n",c);  
  266.                 printf("姓名:%s\n地址:%s\n电话号码:%s\n",H2->elema[pp]->name,H2->elema[pp]->address,H2->elema[pp]->tel);  
  267.            }  
  268.             else printf("\n此人不存在,查找不成功!\n");  
  269.             cout<<"是否继续查找?1.继续0.退出"<<endl;  
  270.         cin>>i;  
  271.              }while(i!=0);  
  272.            system("CLS");  
  273.             break;  
  274.         default:  
  275.             break;  
  276.         }  
  277. }  
  278.   
  279. void Modify(HashTable *H,int c,humen* a)//在通讯录里修改某人信息  
  280. {  
  281.     int p,pp;  
  282.     NA NAME;                           //想要修改的姓名数组  
  283.     system("cls");  
  284.     cout<<"输入你所要修改的原用户名"<<endl;  
  285.     scanf("%s",NAME);  
  286.     p=Hash(NAME);               //调用一次探测函数  
  287.     pp=p;  
  288.     while((H->elem[pp]!=NULL)&&(eq(NAME,H->elem[pp]->name)==-1))  //倘若一探测结果和所要查找的结果不同,调用二次探测函数  
  289.     pp=collision(p,c);  
  290.     if(H->elem[pp]!=NULL&&eq(NAME,H->elem[pp]->name)==1)  //探测到结果后修改信息  
  291.     {  
  292.         int m;  
  293.         do  
  294.         {  
  295.             cout<<"修改信息"<<endl;  
  296.             cout<<"1.修改姓名"<<endl;  
  297.             cout<<"2.修改地址"<<endl;  
  298.             cout<<"3.修改电话号码"<<endl;  
  299.             cout<<"请选择你想要选择的选项,输入0结束修改此用户信息"<<endl;  
  300.             cin>>m;  
  301.             if(m==1)  
  302.             {  
  303.                 int p,n=0,m,i;  
  304.                     printf("请输入修改后记录的姓名:\n");  
  305.                     scanf("%s",H->elem[pp]->name);  
  306.                     NA t;  
  307.                     for(int i=0;i<MAXSIZE;i++)  
  308.                     {  
  309.                         t[i]=H->elem[pp]->name[i];  
  310.                     }  
  311.                     p=Hash(t);  
  312.                     m=p;  
  313.                     while(H->elem[m]!=NULL)//若不为空,即产生冲突,调用冲突处理函数  
  314.                    {  
  315.                     m=collision(p,n);  //若哈希地址冲突,进行冲突处理  
  316.                     n++;  
  317.                    if(m<0)  
  318.                    {  
  319.                       cout<<"冲突无法解决"<<endl;  
  320.                       break;  
  321.                    }  
  322.                     }  
  323.                     H->elem[m]=H->elem[pp];  //求得哈希地址,将信息存入  
  324.             }  
  325.             if(m==2)  
  326.             {  
  327.               printf("请输入修改后记录的地址:\n");  
  328.                     scanf("%s",H->elem[pp]->address);  
  329.             }  
  330.             if(m==3)  
  331.             {  
  332.                 printf("请输入修改后记录的电话号码:\n");  
  333.                     scanf("%s",H->elem[pp]->tel);  
  334.             }  
  335.         }while(m!=0);  
  336.         printf("修改成功!\n");  
  337.     }  
  338.     else  
  339.         printf("此人不存在,修改不成功!\n");  
  340.         system("CLS");  
  341. }  
  342. void Delete(HashTable* H,int c,humen* a)  //在通讯录里查找姓名关键字,若查找成功,显示信息然后删除  
  343. {  
  344.     int i;  
  345.     do  
  346.     {  
  347.         int m,p,pp;  
  348.      NA NAME;  
  349.      m=0;  
  350.      system("cls");  
  351.      printf("请输入要删除记录的姓名:\n");  
  352.      m++;  
  353.      scanf("%s",NAME);//输入想要删除的记录的名字  
  354.   
  355.      p=Hash(NAME);  
  356.      pp=p;  
  357.      while((H->elem[pp]!=NULL)&&(eq(NAME,H->elem[pp]->name)==-1))//倘若一探测结果和所要查找的结果不同,调用二次探测函数  
  358.      pp=collision(p,c);  
  359.      if(H->elem[pp]!=NULL&&eq(NAME,H->elem[pp]->name)==1)//探测到结果后删除信息  
  360.      {  
  361.          printf("以下是您需要要删除的信息:\n\n",c);  
  362.          printf("姓名:%s\n地址:%s\n电话号码:%s\n",H->elem[pp]->name,H->elem[pp]->address,H->elem[pp]->tel);  
  363.          for(int i=0;i<NUM_BER+NUM_BER1;i++)  
  364.          {  
  365.              if(eq(NAME,a[i].name)==1)  
  366.              {  
  367.                 a[i].name[0]='\0';  
  368.              }  
  369.          }  
  370.          H->elem[pp]->name[0]='\0';//将所要删的用户的电话号码清空  
  371.          H->elem[pp]->address[0]='\0';  
  372.          H->elem[pp]->tel[0]='\0';  
  373.          cout<<"1"<<H->elem[pp]->name[0]<<"1"<<endl;  
  374.          printf("删除成功!!!\n");  
  375.      }  
  376.      else  
  377.         printf("此人不存在,删除不成功!\n");  
  378.         cout<<"是否继续删除?1.继续0.退出"<<endl;  
  379.         cin>>i;  
  380.     }while(i!=0);  
  381.     system("CLS");  
  382. }  
  383. int main()  
  384. {  
  385.     int c,i=0;  
  386.     humen a[MAXSIZE];//结构体数组变量  
  387.     humen b[MAXSIZE];  
  388.     HashTable *H;//哈希表指针变量  
  389.     Hashtable *H2;  
  390.                    H2=(Hashtable*)malloc(sizeof(Hashtable));//申请空间  
  391.                    for(i=0;i<HASHSIZE;i++)//初始化哈希表  
  392.                   {  
  393.                       H2->elema[i]=NULL;  
  394.                       H2->siz2=HASHSIZE;  
  395.                       H2->cou2=0;  
  396.                   }  
  397.     H=(HashTable*)malloc(sizeof(HashTable));//申请空间  
  398.     for(i=0;i<HASHSIZE;i++)                //初始化哈希表  
  399.     {  
  400.       H->elem[i]=NULL;  
  401.       H->siz=HASHSIZE;  
  402.       H->cou=0;  
  403.     }  
  404.   
  405.     while (1)//菜单目录  
  406.     {  
  407.          int num;  
  408.      printf("***************************通讯录****************************");  
  409.      printf("\n*                 【1】.  创建用户信息                          *");  
  410.      printf("\n*                 【2】.  添加用户信息                          *");  
  411.      printf("\n*                 【3】.  显示所有用户信息                      *");  
  412.      printf("\n*                 【4】.  查找用户信息                          *");  
  413.      printf("\n*                 【5】.  删除用户信息                          *");  
  414.      printf("\n*                 【6】.  修改用户信息                          *");  
  415.      printf("\n*                 【7】.  退出程序                              *");  
  416.      printf("\n*****************************************************************");  
  417.      printf("\n");  
  418.      printf("\n请输入一个任务选项>>>");  
  419.      printf("\n");  
  420.      scanf("%d",&num);  
  421.     switch(num)  
  422.     {  
  423.         case 1:  
  424.             Create(H,a,H2) ;  
  425.             break;  
  426.         case 2:  
  427.             add(a,b,H,H2) ;  
  428.             break;  
  429.         case 3:  
  430.             output(a);  
  431.             break;  
  432.         case 4:  
  433.             c=0;  
  434.   
  435.             SearchHash(H,c,a,H2);  
  436.             break;  
  437.         case 5:  
  438.             c=0;  
  439.             Delete(H,c,a);  
  440.             break;  
  441.         case 6:  
  442.             c=0;  
  443.             Modify(H,c,a);  
  444.             break;  
  445.         case 7:  
  446.             return 0;  
  447.             break;  
  448.         default:  
  449.              printf("输入错误,请重新输入!");  
  450.              printf("\n");  
  451.     }  
  452. }  
  453.    system("pause");  
  454.    return 0;  
  455. }  

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构课程设计 include "stdio.h" #include "ctype.h" #include "string.h" #include"stdlib.h" #include "malloc.h" struct list { char name[10]; char street[10]; char city[10]; char state[10]; char eip[10]; struct list *prior; struct list *next; }; void mainmenu(struct list * head); void read_file(struct list * head); void read_file(); void px_menu(struct list * head); void px_name(struct list * head); void px_street(struct list * head); void px_city(struct list * head); void px_state(struct list * head); void px_eip(struct list * head); void delete_menu(struct list * head); void delete_name(struct list * head); void search_menu(struct list * head); void search_name(struct list * head); void search_street(struct list * head); void search_city(struct list * head); void search_state(struct list * head); void search_eip(struct list * head); void add_new(struct list * head); void prin_list(struct list * head); void write_file(struct list * head); int flag=0; int flag1=0;//删除为空标志位 void main() { struct list *head; read_file(); mainmenu(head); return; } /**************************************************** 主菜单 ****************************************************/ void mainmenu(struct list * head) { char tmp; system("cls"); printf("输入要进行的操作:\n"); printf("\t '1'-----------------------添加记录\n"); printf("\t '2'-----------------------排序记录\n"); printf("\t '3'-----------------------显示记录\n"); printf("\t '4'-----------------------查找记录\n"); printf("\t '5'-----------------------删除记录\n"); printf("\t '6'---------------------------退出\n"); printf("\t '0'---------------------保存并退出\n"); printf("\n\t请选择:"); tmp=getchar(); switch(tmp) { case '1':add_new(head);break; case '2':px_menu(head);break; case '3':prin_list(head);break; case '4':search_menu(head);break; case '5':delete_menu(head);break; case '6':exit(0);break; case '0':write_file(head);break; default :{printf("错误操作返回主菜单");mainmenu(head);} } } /**************************************** 双链表建立以及文件读取 ****************************************/ //void read_file(struct list * head) void read_file() { int i; struct list *p1,*p2; struct list *head; FILE *fp; fp=fopen("list.txt","a"); fclose(fp); if ((fp = fopen ( "list.txt" , "rt" ) ) == NULL ) { printf("打开文件失败\n"); exit(0) ; } rewind(fp);//将文件指针重新指向流的开头 fseek(fp,0,2);//重定位流上的文件指针 if ((ftell(fp)==0))//返回当前文件指针 { printf("没有记录:\n"); head=p1=p2=(struct list *)malloc(sizeof(struct list)); head->name[10]='\0'; head->street[10]='\0'; head->city[10]='\0'; head->state[10]='\0'; head->eip[10]='\0'; head->next=head; head->prior=head; flag=1; } else { rewind(fp); head=p1=p2=(struct list *)malloc(sizeof(struct list)); head->next=head; head->prior=head; if(fread(p1,sizeof(struct list),1,fp)!=1)//从流中读数据 { p2->next=p1; p1->next=head; head->prior=p1; p1->prior=p2; p2=p1; } else { for (i=0;;i++) { p2->next=p1; p1->next=head; head->prior=p1; p1->prior=p2; p2=p1; if (feof ( fp ))//检测流上的文件结束符用 { p1->next=head; head->prior=p1; printf("记录读入完成\n"); break; } else { p1=(struct list *)malloc(sizeof(struct list)); p1->name[10]='\0'; p1->street[10]='\0'; p1->city[10]='\0'; p1->state[10]='\0'; p1->eip[10]='\0'; if(fread(p1,sizeof(struct list),1,fp)!=1) { break; } } } } } printf("记录读入完成\n"); fclose ( fp ) ; printf("按任意键进入主菜单\n"); getchar(); mainmenu(head); return; } /**************************************** 增添 ****************************************/ void add_new(struct list * head) { int k=0; int n; char tmp1,tmp2; struct list *p; struct list *p1,*p2; p1=(struct list *)malloc(sizeof(struct list)); p1->name[10]='\0'; p1->street[10]='\0'; p1->city[10]='\0'; p1->state[10]='\0'; p1->eip[10]='\0'; printf("请输入所要添加的名字:\n"); scanf("%s",p1->name); printf("请输入所要添加的街道:\n");

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值