| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
- #include <stdio.h>
 
 - #include <stdlib.h>
 
 - #include <string.h>
 
  
 
- #define MAX_PLAYERS 100
 
  
- #define MAX_NAME 50
 
 - #define MAX_IDENTITY 20
 
 - #define MAX_RANK 15
 
  
 
- enum Option
 
 - {
 
 -         EXIT,
 
 -         IMP,
 
 -         SAVE,
 
 -         DISP,
 
 -         SEARCH,
 
 -         ADD,
 
 -         DEL,
 
 -         FIX,
 
 -         COUNT,
 
 -         SORT
 
 - };
 
  
- struct Info
 
 - {
 
 -         char id;
 
 -         char name[MAX_NAME];
 
 -         char identity[MAX_IDENTITY];
 
 -         char rank[MAX_RANK];
 
 -         float rating;
 
 -  };
 
 -  
 
 -  struct PlayerInfo
 
 -  {
 
 -          struct Info data[MAX_PLAYERS];
 
 -          int size;
 
 -  };
 
 -  
 
 -  
 
 -  void welcome();
 
 -  void InitPlayerInfo(struct PlayerInfo* ps);
 
 - void AddPlayerInfo(struct PlayerInfo* ps);
 
 - void DisplayPlayerInfo(struct PlayerInfo* ps);
 
 - void DeletePlayerInfo(struct PlayerInfo* ps);
 
 -  
 
 -  
 
 -  
 
 -  
 
 -  
 
 -  
 
  
- /* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
  
-         int main()
 
 -         {
 
 -                 int choice = 0;
 
 -                  struct PlayerInfo player;//包含100个元素的数组和size   
 
 -                 InitPlayerInfo(&player);                                                                                                                                                                 
 
 -         do
 
 -                 {
 
 -                 welcome();
 
 -                 printf("请选择(数字):");
 
 -                 scanf("%d", &choice);
 
 -                 switch(choice)
 
 -                 {
 
 -                         case IMP:
 
 -                                 
 
 -                                 break;
 
 -                         case SAVE:
 
 -                         
 
 -                                 break;
 
 -                         case DISP:
 
 -                                 DisplayPlayerInfo(&player);
 
 -                                 break;
 
 -                         case SEARCH:
 
 -                         
 
 -                                 break;
 
 -                         case ADD:
 
 -                                 AddPlayerInfo(&player);                                
 
 -                                 break;
 
 -                         case DEL:
 
 -                                 DeletePlayerInfo(&player);
 
 -                                 break;
 
 -                         case FIX:
 
 -                                 
 
 -                                 break;
 
 -                         case COUNT:
 
 -                                 
 
 -                                 break;
 
 -                         case SORT:
 
 -         
 
 -                                 break;
 
 -                         case EXIT:
 
 -                                 printf("退出棋手信息表\n") ;
 
 -                                 break;
 
 -                         default:
 
 -                                 printf("选择错误\n");
 
 -                                 break;
 
 -                  } 
 
 -         }
 
 -         while(choice);
 
 -         return 0;
 
 - }
 
  
 
 
 
-  void welcome()
 
 - {
 
 -          printf("***************欢迎使用围棋棋手管理系统*****************\n");
 
 -          printf("\n");
 
 -         printf("1. 从本地文件导入棋手信息\n");
 
 -         printf("2. 保存棋手信息至本地文件\n");
 
 -         printf("3. 显示棋手信息\n");
 
 -         printf("4. 查询棋手信息\n");
 
 -         printf("5. 增加棋手信息\n");
 
 -         printf("6. 删除棋手信息\n");
 
 -         printf("7. 修改棋手信息\n");
 
 -         printf("8. 统计棋手信息\n");
 
 -         printf("9. 对棋手信息进行排序\n");
 
 -         printf("10. 退出系统\n");
 
 -         printf("\n");
 
 -         printf("***********************感谢使用*************************\n");
 
 -         printf("\n");
 
 -         printf("请输入对应的功能键(数字):\n");
 
 - }
 
  
 
- void InitPlayerInfo(struct PlayerInfo* ps)
 
 - {
 
 -         memset(ps->data, 0, sizeof(ps->data));
 
 -         ps->size = 0;
 
 - }
 
  
 
 
 
- void DisplayPlayerInfo(struct PlayerInfo* ps)
 
 - {
 
 -         if(ps->size = 0)
 
 -         {
 
 -                 printf("信息为空\n");
 
 -         }
 
 -         else
 
 -         {
 
 -                 int i = 0;
 
 -                 printf("%20s\t%20s\t%10s\t%12s\t%20s\n", "编号","姓名","身份","段位","等级分\n"); 
 
 -                 for(i = 0; i < ps->size; i++)
 
 -                 {
 
 -                         printf("%20s\t%20s\t%10s\t%12s\t%20f\n",
 
 -                         ps->data[i].id,
 
 -                         ps->data[i].name,
 
 -                         ps->data[i].identity,
 
 -                         ps->data[i].rank,
 
 -                         ps->data[i].rating);
 
 -                 }
 
 -         }
 
 - }
 
  
 
 
-  
 
 - void AddPlayerInfo(struct PlayerInfo* ps)
 
 - {
 
 -         if(ps->size == MAX_PLAYERS)
 
 -         {
 
 -                 printf("信息已满,无法添加\n");
 
 -                 
 
 -         }
 
 -         else
 
 -         {
 
 -                 printf("请输入棋手编号(大写英文字母 P 加 3 位正整数):");
 
 -                 scanf("%s", ps->data[ps->size].id));
 
 -                 printf("请输入棋手姓名:");
 
 -                 scanf("%s", ps->data[ps->size].name);
 
 -                 printf("请输入棋手身份(职业/业余):");
 
 -                 scanf("%s", ps->data[ps->size].identity);
 
 -                 printf("请输入棋手段位:");
 
 -                 scanf("%s", ps->data[ps->size].rank);
 
 -                 printf("请输入棋手等级分:");
 
 -                 scanf("%20f", &(ps->data[ps->size]));                
 
 -                 
 
 -                 ps->size++;
 
 -                 printf("添加成功!");                
 
 -         }
 
 - }
 
  复制代码 
 
为什么在实现display的时候运行之后不打印我已经添加的信息呢
在实现display函数中存在几个问题导致不会打印已经添加的信息。 
首先,在结构体Info中,id、name、identity和rank的类型应该是字符数组(char数组)而不是单个字符。修改代码如下:
 - struct Info
 - {
 -     char id[MAX_IDENTITY];
 -     char name[MAX_NAME];
 -     char identity[MAX_IDENTITY];
 -     char rank[MAX_RANK];
 -     float rating;
 - };
 
  复制代码
其次,在DisplayPlayerInfo函数中,判断ps->size是否为0时,应使用双等号(==)而不是赋值号(=)。修改代码如下:
 - void DisplayPlayerInfo(struct PlayerInfo* ps)
 - {
 -     if(ps->size == 0)
 -     {
 -         printf("信息为空\n");
 -     }
 -     else
 -     {
 -         int i = 0;
 -         printf("%20s\t%20s\t%10s\t%12s\t%20s\n", "编号","姓名","身份","段位","等级分\n"); 
 -         for(i = 0; i < ps->size; i++)
 -         {
 -             printf("%20s\t%20s\t%10s\t%12s\t%20f\n",
 -             ps->data[i].id,
 -             ps->data[i].name,
 -             ps->data[i].identity,
 -             ps->data[i].rank,
 -             ps->data[i].rating);
 -         }
 -     }
 - }
 
  复制代码
另外,对于输入字符串的scanf函数,需要使用%s格式,并且需要传入对应的字符数组名字,而不是整个结构体的名字。修改代码如下:
 - printf("请输入棋手编号(大写英文字母 P 加 3 位正整数):");
 - scanf("%s", ps->data[i].id);
 - printf("请输入棋手姓名:");
 - scanf("%s", ps->data[i].name);
 - printf("请输入棋手身份(职业/业余):");
 - scanf("%s", ps->data[i].identity);
 - printf("请输入棋手段位:");
 - scanf("%s", ps->data[i].rank);
 - printf("请输入棋手等级分:");
 - scanf("%f", &(ps->data[i].rating));
 
  复制代码 
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。  
 
 
 |   
 
 
 
 |