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

如何编写循环实现剧院选座系统:重复选座至全部座位被占用

剧院座位选座程序循环实现方案

问题说明

需要实现剧院座位选座系统:用户输入行列号选择座位,选中后标记为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:35:17