Executando verificação de segurança...
Em resposta a Cinema B1 até B10
2

Algumas sugestões de melhoria.

Primeiro vc declara um array com 11 posições:

char *chairs[11];

Mas depois vc ignora a primeira posição, pois faz o for começando do 1. Mas a primeira posição de um array é zero, então não faz sentido ignorar a primeira posição.

Enfim, se quer 10 cadeiras, crie um array com 10 posições. Se o número da posição não corresponde ao da cadeira, basta somar/subtrair 1 conforme a necessidade.

Uma opção é definir a quantidade de cadeiras (logo depois dos include's):

#define QTD_CHAIRS 10 // quantidade de cadeiras

E depois declare o array com este tamanho:

char *chairs[QTD_CHAIRS];

Na função que imprime as cadeiras, não precisa de todas essas strings intemediárias, basta imprimir direto o que vc quer para cada caso:

void print_chairs(char *chairs[]) {
    printf("Cadeiras disponíveis:\n");
    for (int i = 0; i < QTD_CHAIRS; i++) {
        if (strcmp(chairs[i], "C") == 0) {
            printf("[B%d] ", i + 1);
        } else {
            printf("[--] ");
        }
    }
    printf("\n");
}

E o main ficaria assim - com as devidas correções:

int main() {
    char *chairs[QTD_CHAIRS];
    for (int i = 0; i < QTD_CHAIRS; i++) {
        chairs[i] = malloc(2);
        strcpy(chairs[i], "C");
    }

    while (1) {
        clear_screen();
        print_chairs(chairs);

        char cadeira[4];
        printf("Reservar a cadeira: ");
        scanf("%3s", cadeira);
        for (int i = 0; cadeira[i]; i++) {
            cadeira[i] = toupper(cadeira[i]);
        }

        int numeroCadeira = atoi(cadeira + 1);
        if (cadeira[0] != 'B' || numeroCadeira < 1 || numeroCadeira > QTD_CHAIRS) {
            printf("Cadeira inválida!\n");
        } else if (strcmp(chairs[numeroCadeira - 1], "C") == 0) {
            strcpy(chairs[numeroCadeira - 1], "--");
            printf("Cadeira %s RESERVADA!\n", cadeira);
        } else {
            printf("Cadeira %s já está reservada!\n", cadeira);
        }

        char opcao[2];
        printf("Quer reservar outra cadeira? [S/N] ");
        scanf(" %1s", opcao);
        for (int i = 0; opcao[i]; i++) {
            opcao[i] = toupper(opcao[i]);
        }
        if (strcmp(opcao, "S") != 0) {
            printf("Fim Das Escolhas!\n");
            break;
        }
    }
    for (int i = 0; i < QTD_CHAIRS; i++) {
        free(chairs[i]);
    }
    return 0;
}

Alternativa

Mas será que precisa ser um array de strings? Se o array só guarda a informação sobre a cadeira (se está ou não reservada), poderia muito bem ser um array de inteiros. Por exemplo, se o valor for zero, indica que está vago, se for 1, está ocupado. Ficaria assim:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define QTD_CHAIRS 10 // quantidade de cadeiras

void clear_screen() {
    system("cls");
}

void print_chairs(int chairs[]) {
    printf("Cadeiras disponíveis:\n");
    for (int i = 0; i < QTD_CHAIRS; i++) {
        if (chairs[i] == 0) { // disponível
            printf("[B%d] ", i + 1);
        } else { // ocupado
            printf("[--] ");
        }
    }
    printf("\n");
}

int main() {
    // todos os elementos são inicializados com zero
    int chairs[QTD_CHAIRS] = { 0 };

    while (1) {
        clear_screen();
        print_chairs(chairs);

        char cadeira[4];
        printf("Reservar a cadeira: ");
        scanf("%3s", cadeira);
        int numeroCadeira = atoi(cadeira + 1);
        if (toupper(cadeira[0]) != 'B' || numeroCadeira < 1 || numeroCadeira > QTD_CHAIRS) {
            printf("Cadeira inválida!\n");
        } else if (chairs[numeroCadeira - 1] == 0) {
            chairs[numeroCadeira - 1] = 1; // indica que a cadeira está ocupada
            printf("Cadeira %s RESERVADA!\n", cadeira);
        } else {
            printf("Cadeira %s já está reservada!\n", cadeira);
        }

        char opcao[2];
        printf("Quer reservar outra cadeira? [S/N] ");
        scanf(" %1s", opcao);
        for (int i = 0; opcao[i]; i++) {
            opcao[i] = toupper(opcao[i]);
        }
        if (strcmp(opcao, "S") != 0) {
            printf("Fim Das Escolhas!\n");
            break;
        }
    }
    return 0;
}
Carregando publicação patrocinada...
1

Se é uma opção ter uma array de inteiros que vai conter apenas 0 ou 1, poderia ser também uma array de booleanos, e a lógica 'true or false' deixaria as funções mais limpas (clean code) e mais rápidas na execução, além de ser um dado que ocupa menos espaço de memória.

2
1

Sendo honesto, eu nem havia reparado que o código tava em C, estou tão acostumado com a galera postando em JavaScript aqui que eu nem li o código e vim direto ler sua resposta apenas kkk.

1