小羊爱吃小草 发表于 2023-12-13 10:34:18

管理系统,寻大神帮看,多谢

#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;
        char identity;
        char rank;
        float rating;
};

struct PlayerInfo
{
        struct Info data;
        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.id,
                        ps->data.name,
                        ps->data.identity,
                        ps->data.rank,
                        ps->data.rating);
                }
        }
}




void AddPlayerInfo(struct PlayerInfo* ps)
{
        if(ps->size == MAX_PLAYERS)
        {
                printf("信息已满,无法添加\n");
               
        }
        else
        {
                printf("请输入棋手编号(大写英文字母 P 加 3 位正整数):");
                scanf("%s", ps->data.id));
                printf("请输入棋手姓名:");
                scanf("%s", ps->data.name);
                printf("请输入棋手身份(职业/业余):");
                scanf("%s", ps->data.identity);
                printf("请输入棋手段位:");
                scanf("%s", ps->data.rank);
                printf("请输入棋手等级分:");
                scanf("%20f", &(ps->data));               
               
                ps->size++;
                printf("添加成功!");               
        }
}

为什么在实现display的时候运行之后不打印我已经添加的信息呢

FishC 发表于 2023-12-13 10:38:28

在实现display函数中存在几个问题导致不会打印已经添加的信息。

首先,在结构体Info中,id、name、identity和rank的类型应该是字符数组(char数组)而不是单个字符。修改代码如下:

struct Info
{
    char id;
    char name;
    char identity;
    char 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.id,
            ps->data.name,
            ps->data.identity,
            ps->data.rank,
            ps->data.rating);
      }
    }
}

另外,对于输入字符串的scanf函数,需要使用%s格式,并且需要传入对应的字符数组名字,而不是整个结构体的名字。修改代码如下:

printf("请输入棋手编号(大写英文字母 P 加 3 位正整数):");
scanf("%s", ps->data.id);
printf("请输入棋手姓名:");
scanf("%s", ps->data.name);
printf("请输入棋手身份(职业/业余):");
scanf("%s", ps->data.identity);
printf("请输入棋手段位:");
scanf("%s", ps->data.rank);
printf("请输入棋手等级分:");
scanf("%f", &(ps->data.rating));

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 管理系统,寻大神帮看,多谢