You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言座位预订系统:更新用户座位时如何同步修改seat数组X标记?

座位预订系统update函数的座位标记同步修改方案

需要修改的代码部分

  • 清除旧座位标记:在update函数更新用户座位记录前,先定位用户原座位位置,判断其是否在MIN/MAX合法范围内且确实被标记为'X',如果是则将该位置恢复为可用状态(比如设为' ')。
  • 标记新座位:在确认新座位合法后,同步把全局数组seat[newRow][newCol]设为'X',完成座位状态的同步更新。

是否需要添加create函数一致的判断逻辑?

必须添加。update时选定的新座位和create/reserve场景一样,需要严格的有效性校验:

  • 检查行号、列号是否在MIN和MAX的合法区间内,避免数组越界访问;
  • 检查该座位当前是否未被占用(即seat[newRow][newCol] != 'X'),防止重复预订。
    这部分逻辑和create函数里的座位有效性判断完全一致,直接复用即可,否则会导致座位状态混乱,出现重复占用或非法访问的问题。

代码示例参考

假设原update函数仅处理用户记录更新,修改后补充座位同步逻辑:

// 全局数组及结构体定义
#define MIN 5
#define MAX 10
char seat[MIN][MAX];

typedef struct {
    int row;
    int col;
    // 其他用户信息字段
} UserRecord;

void update(UserRecord *user, int oldRow, int oldCol, int newRow, int newCol) {
    // 1. 清除旧座位的占用标记
    if (oldRow >= 0 && oldRow < MIN && oldCol >= 0 && oldCol < MAX && seat[oldRow][oldCol] == 'X') {
        seat[oldRow][oldCol] = ' ';
    }

    // 2. 校验新座位有效性(与create函数逻辑一致)
    if (newRow >= 0 && newRow < MIN && newCol >= 0 && newCol < MAX && seat[newRow][newCol] != 'X') {
        // 更新用户的座位记录
        user->row = newRow;
        user->col = newCol;
        // 标记新座位为已占用
        seat[newRow][newCol] = 'X';
    } else {
        printf("新座位无效,无法完成更新\n");
    }
}

内容的提问来源于stack exchange,提问作者gwen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 07:57:14