小羊爱吃小草 发表于 2023-12-13 11:23:33

管理系统,请大神看看


void DeletePlayerInfo(struct PlayerInfo* ps)
{
        char name;
        char id;
        printf("请输入要删除的棋手的编号与姓名:");
        scanf("%s%s", id, name);
        int i = 0;
        for(i = 0; i < ps->size; i++)
        {
                strcmp(ps->data.name, name) == 0;
                {
                        break;
                }
               
        }
        if(i == ps->size)
        {
                printf("要删除的人不存在\n");
               
        }
        else
        {
                int j = 0;
                for(j = i; j < ps->size - 1; j++)
                {
                        ps->data = ps->data;
                }
                ps->size--;
                printf("删除成功\n");
        }
}
在这个函数中如何实现同时满足姓名和编号才能删除的功能

FishC 发表于 2023-12-13 11:24:09

在这个函数中,你可以添加一个条件来检查待删除棋手的姓名和编号是否同时满足要求。可以使用`strcmp()`函数来比较字符串是否相等。

以下是修改后的代码:

void DeletePlayerInfo(struct PlayerInfo* ps)
{
        char name;
        char id;
        printf("请输入要删除的棋手的编号与姓名:");
        scanf("%s%s", id, name);
        int i = 0;
        for(i = 0; i < ps->size; i++)
        {
                // 检查姓名和编号是否同时匹配
                if(strcmp(ps->data.name, name) == 0 && strcmp(ps->data.id, id) == 0)
                {
                        break;
                }
                       
        }
        if(i == ps->size)
        {
                printf("要删除的人不存在\n");
        }
        else
        {
                int j = 0;
                for(j = i; j < ps->size - 1; j++)
                {
                        // 将后面的棋手依次向前移动
                        ps->data = ps->data;
                }
                ps->size--;
                printf("删除成功\n");
        }
}

在这个修改后的代码中,我们首先定义了一个长度为20的字符数组来存储输入的姓名和编号。然后,在`for`循环中,我们使用`strcmp()`函数来比较待删除棋手的姓名和编号是否同时匹配当前棋手的姓名和编号。如果匹配成功,则跳出循环并执行删除操作。否则,继续检查下一个棋手。

在删除操作中,我们将后面的棋手向前移动一个位置,覆盖掉待删除的棋手。最后,更新棋手数量并打印删除成功的提示信息。

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