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
相关产品推荐
相关产品推荐

