如何编写循环实现剧院选座系统:重复选座至全部座位被占用
剧院座位选座程序循环实现方案
问题说明
需要实现剧院座位选座系统:用户输入行列号选择座位,选中后标记为X,重复该流程直到所有座位被占用。目前已完成单次选座标记,但无法实现循环重复操作。
原代码
#include <iostream> #include <iomanip> #include <string> using namespace std; int main() { //variables const int row = 8, col = 10; int r = 0, c = 0; //1. Create an array //title cout << " Available Theater Seating\n\n"; //create while loop to check for available seats (non X elements) string seats[row][col] = { {"$30 ", "$40 ", "$50 ", "$50 ", "$50 ", "$50 ", "$50 ", "$50 ", "$40 ", "$30"}, {"$20 ", "$30 ", "$30 ", "$40 ", "$50 ", "$50 ", "$40 ", "$30 ", "$30 ", "$20"}, {"$20 ", "$20 ", "$30 ", "$30 ", "$40 ", "$40 ", "$30 ", "$30 ", "$20 ", "$20"}, {"$10 ", "$10 ", "$20 ", "$20 ", "$20 ", "$20 ", "$20 ", "$20 ", "$10 ", "$10"}, {"$10 ", "$10 ", "$20 ", "$20 ", "$20 ", "$20 ", "$20 ", "$20 ", "$10 ", "$10"}, {"$10 ", "$10 ", "$20 ", "$20 ", "$20 ", "$20 ", "$20 ", "$20 ", "$10 ", "$10"}, {"$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10"}, {"$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10"} }; //display array for (int row = 7; row >= 0; row--) { for (int col = 0; col <= 9; col++) { cout << seats[row][col]; } cout << "\n"; } //prompt for and get row/column cout << "\nPick a seat by row and then column.\n\n"; cout << "Row: "; cin >> r; cout << "Column: "; cin >> c; seats[r - 1][c - 1] = " X "; //repeat of display array to show the new x. Delete after making while loop for (int row = 7; row >= 0; row--) { for (int col = 0; col <= 9; col++) { cout << seats[row][col]; } cout << "\n"; } return 0; }
原运行结果
Available Theater Seating $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $20 $20 $20 $20 $20 $20 $10 $10 $10 $10 $20 $20 $20 $20 $20 $20 $10 $10 $10 $10 $20 $20 $20 $20 $20 $20 $10 $10 $20 $20 $30 $30 $40 $40 $30 $30 $20 $20 $20 $30 $30 $40 $50 $50 $40 $30 $30 $20 $30 $40 $50 $50 $50 $50 $50 $50 $40 $30 Pick a seat by row and then column. Row: 3 Column: 4 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $10 $20 $20 $20 $20 $20 $20 $10 $10 $10 $10 $20 $20 $20 $20 $20 $20 $10 $10 $10 $10 $20 $20 $20 $20 $20 $20 $10 $10 $20 $20 $30 X $40 $40 $30 $30 $20 $20 $20 $30 $30 $40 $50 $50 $40 $30 $30 $20 $30 $40 $50 $50 $50 $50 $50 $50 $40 $30
修改后的代码及说明
修改后代码
#include <iostream> #include <iomanip> #include <string> using namespace std; const int ROWS = 8, COLS = 10; // 封装座位显示函数,避免重复代码 void displaySeats(string seats[ROWS][COLS]) { cout << " 剧院座位表\n\n"; for (int row = ROWS - 1; row >= 0; row--) { for (int col = 0; col < COLS; col++) { cout << seats[row][col]; } cout << "\n"; } } // 检查是否还有可用座位 bool hasAvailableSeats(string seats[ROWS][COLS]) { for (int row = 0; row < ROWS; row++) { for (int col = 0; col < COLS; col++) { if (seats[row][col] != " X ") { return true; } } } return false; } int main() { string seats[ROWS][COLS] = { {"$30 ", "$40 ", "$50 ", "$50 ", "$50 ", "$50 ", "$50 ", "$50 ", "$40 ", "$30"}, {"$20 ", "$30 ", "$30 ", "$40 ", "$50 ", "$50 ", "$40 ", "$30 ", "$30 ", "$20"}, {"$20 ", "$20 ", "$30 ", "$30 ", "$40 ", "$40 ", "$30 ", "$30 ", "$20 ", "$20"}, {"$10 ", "$10 ", "$20 ", "$20 ", "$20 ", "$20 ", "$20 ", "$20 ", "$10 ", "$10"}, {"$10 ", "$10 ", "$20 ", "$20 ", "$20 ", "$20 ", "$20 ", "$20 ", "$10 ", "$10"}, {"$10 ", "$10 ", "$20 ", "$20 ", "$20 ", "$20 ", "$20 ", "$20 ", "$10 ", "$10"}, {"$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10"}, {"$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10 ", "$10"} }; // 循环直到无可用座位 while (hasAvailableSeats(seats)) { displaySeats(seats); int r, c; cout << "\n请选择座位(先输入行号,再输入列号)\n\n"; cout << "行号:"; cin >> r; cout << "列号:"; cin >> c; // 输入合法性验证 if (r < 1 || r > ROWS || c < 1 || c > COLS) { cout << "输入的行列号非法,请重新输入!\n\n"; continue; } int arrRow = r - 1; int arrCol = c - 1; // 检查座位是否已被占用 if (seats[arrRow][arrCol] == " X ") { cout << "该座位已被占用,请选择其他座位!\n\n"; continue; } // 标记座位为已占用 seats[arrRow][arrCol] = " X "; cout << "\n座位选择成功!\n\n"; } cout << "所有座位已售罄,程序结束!\n"; return 0; }
关键修改点
- 封装显示函数:将重复的座位打印代码封装成
displaySeats函数,减少冗余,提高代码可读性。 - 添加座位检查函数:
hasAvailableSeats函数遍历整个座位数组,判断是否还有未被标记为X的座位,作为循环终止条件。 - 循环流程实现:使用
while循环,每次循环执行「显示座位→输入选座→验证输入→标记座位」的流程,直到无可用座位。 - 输入验证:增加行列号合法性检查和座位占用状态检查,避免非法输入和重复选座。
内容的提问来源于stack exchange,提问作者Barney
相关产品推荐
相关产品推荐

