Как пометить занятые места в Cinema. Программирование на С

Для начала хочу сказать, что я новичок в Си и вообще в программировании. C — мой первый язык, и я нахожу его очень интересным. Я пишу программу, которая будет имитировать программное обеспечение кинотеатра. Я имею в виду, что вы выбираете фильм, время и места. Я закончил с выбором фильма и времени, но у меня проблема с местами. То, что я пытаюсь сделать, это когда вы выбираете строку и столбец, как-то распечатать в консоли, какое место занято (изменение цвета, увеличение шрифта или что-то в этом роде)

Вот мой код:

 void SeatSelection()
{
    int row = 0;
    int column = 0;
    int i, j;
    printf("\t\t\t\tSCREEN\n\n\n\n\n\n\n");
    int A[11][11] = {
        { 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 4, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 6, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 7, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 8, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
    };

    for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 11; j++)
            printf("%d\t", A[i][j]);

        printf("\n\n");
    }

    do
    {
        printf("Choose seat: Row and Column\n");
        scanf("%d %d", &row, &column);
        if ((row<1 || row>10) && (column<1 || column>10)) printf("Wrong choice, try again\n");
    } while ((row<1 || row>10) && (column<1 || column>10));
}

Спасибо за помощь в продвижении :)


person Community    schedule 29.03.2014    source источник


Ответы (1)


Попробуйте использовать вторую таблицу taken[][]. Для места (row, column) занято[строка][столбец] равно 1, если место занято, иначе 0. Код:

#include <stdio.h>

void SeatSelection()
{
    int row = 0;
    int column = 0;
    int i, j;
    int A[11][11] = {
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0  },
        { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
        { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
    };

    int taken[11][11] = {
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
    };

    printf("============= The Cinema ==============\n");
    for (i = 1; i <= 10; i++)
    {
        for (j = 1; j <= 10; j++)
            printf(" %d  ", A[i][j]);

        printf("\n");
    }
    fflush(stdout);
    do
    {
        printf("Choose seat: Row and Column\n");
        fflush(stdout);
        scanf("%d %d", &row, &column);
        if ((row<1 || row>10) && (column<1 || column>10)) printf("Wrong choice, try again\n");
        if(taken[row][column]) printf("This seat is taken, try again\n");
        else {
          taken[row][column] = 1;
          printf("======== The Cinema =========\n");
          for (i = 1; i <= 10; i++)
          {
              for (j = 1; j <= 10; j++) {
                  if(taken[i][j] == 0)
                    printf(" %d  ", A[i][j]);
                  else
                    printf("[%d] ", A[i][j]);
              }
              printf("\n");
          }
        }
        fflush(stdout);
    } while (true);
}

int main() {
  SeatSelection();
  return 0;
}

Редактировать

Я внес некоторые изменения в ваш код, но я думаю, что вы поняли идею :) Если вы что-то не понимаете, просто скажите мне...

person Rontogiannis Aristofanis    schedule 29.03.2014
comment
Именно это я и имел в виду, спасибо большое!!! Изменить: я не понимаю, почему вы изменили первый столбец и строку на 0? - person ; 29.03.2014
comment
@ user3476022 Меня немного смутило использование первой строки и отсутствие инициализации последнего столбца. Из этих двух второе более важно, так как компилятор помещает в неинициализированные позиции случайные целые числа, которые могут вызвать специфические ошибки во время выполнения... - person Rontogiannis Aristofanis; 29.03.2014