C语言航班座位分配程序循环与单座分配功能故障求助
修复航班座位分配程序的循环与座位分配问题
你的代码存在三个核心问题:
- 缺少循环逻辑,用户输入一次后程序直接终止,无法回到输入提示环节
- 座位分配逻辑错误,直接遍历输出所有座位,而非单次分配一个可用座位
- 未记录座位占用状态,无法准确判断舱位是否已满
下面是修复后的完整代码:
#include <stdio.h> int main(int argc, char** argv) { // 用数组标记座位状态:0=未占用,1=已占用 int firstClassSeats[4] = {0, 0, 0, 0}; int economyClassSeats[8] = {0, 0, 0, 0, 0, 0, 0, 0}; // 对应舱位的固定座位号 const int firstSeatNums[] = {1, 2, 3, 4}; const int economySeatNums[] = {5, 6, 7, 8, 9, 10, 11, 12}; int userInput; int i; int seatFound; while (1) { // 输出用户选择提示 printf("请输入1选择头等舱\n"); printf("请输入2选择经济舱\n"); printf("请输入0退出程序\n\n"); scanf("%d", &userInput); if (userInput == 0) { printf("程序已退出\n"); break; } seatFound = 0; if (userInput == 1) { // 寻找第一个未被占用的头等舱座位 for (i = 0; i < 4; i++) { if (firstClassSeats[i] == 0) { firstClassSeats[i] = 1; // 标记为已占用 printf("舱位:头等舱 座位号:%d\n\n", firstSeatNums[i]); seatFound = 1; break; } } if (!seatFound) { printf("头等舱已满,下一班航班在明天\n\n"); } } else if (userInput == 2) { // 寻找第一个未被占用的经济舱座位 for (i = 0; i < 8; i++) { if (economyClassSeats[i] == 0) { economyClassSeats[i] = 1; // 标记为已占用 printf("舱位:经济舱 座位号:%d\n\n", economySeatNums[i]); seatFound = 1; break; } } if (!seatFound) { printf("经济舱已满,下一班航班在明天\n\n"); } } else { printf("输入无效,请重新输入\n\n"); } } return 0; }
关键改动说明:
- 添加主循环:用
while(1)实现无限循环,用户输入0时主动退出程序 - 座位状态追踪:使用两个数组标记座位是否被占用,替代原代码中固定长度的不合理判断方式
- 单次分配逻辑:每次用户选择舱位后,仅找到第一个可用座位分配并标记,符合"分配1个座位后回到输入提示"的需求
- 输入合法性处理:增加对非1/2/0输入的错误提示
内容的提问来源于stack exchange,提问作者xBIGSMOOTHx
相关产品推荐
相关产品推荐

