为什么增量变量在具有不同名称时更改数组的值

时间:2015-03-30 15:17:22

标签: c++ arrays for-loop while-loop boolean

有人可以帮助我。我很难在我的代码中找到为什么B列中的最后一个值总是加1。我已经编写了一些代码,因为它今天到期了。我也无法弄清楚为什么B列中的最后一个值不等于196,因为在reset函数中它将数组中的所有值设置为196。任何建议将不胜感激。提前谢谢

#include <iostream> //includes cin cout

#include <iomanip>

using namespace std; //setting up the    environment

const int NUMBER_OF_ROWS = 3;
const int NUMBER_OF_COLUMNS = 3;

void printAllSeats(int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS]);
void reset(int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS]);
void askForUsersSeat(int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS], int &SeatCountNumber, bool &anyFreeSeats);
bool isFull(int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS]);
bool isEmpty(int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS]);

int main() { //main starts
    int maxSeats;

    int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS];
    int SeatCountNumber = 0;
    bool anyFreeSeats;

    reset(seats);

    anyFreeSeats = true;

    SeatCountNumber = 0;
    while (anyFreeSeats) {

        printAllSeats(seats);

        askForUsersSeat(seats, SeatCountNumber, anyFreeSeats);
    }

    system("pause");
    return 0;

} //main ends

void printAllSeats(int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS]) {
    cout << endl;
    cout << setw(10) << "              - = Available      R =   Reserved\n\n";
    for (int i = 0; i <= NUMBER_OF_ROWS; i++) {
        cout << setw(15) << i << " ";

        for (int j = 0; j < NUMBER_OF_COLUMNS; j++) {
            if (i == 0) {
                cout << "  " << static_cast<char>(j + 65) << "   ";
            } else {
                cout << "  " << static_cast<char>(seats[i][j]) << "   ";
            }
        }

        cout << endl;
    }

    cout << endl;
}

void reset(int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS]) {

    //set all values in array to  196

    for (int i = 0; i <= NUMBER_OF_ROWS; i++) {
        for (int j = 0; j <= NUMBER_OF_COLUMNS; j++) {
            seats[i][j] = 196;
        }
    }
}

void askForUsersSeat(int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS], int &SeatCountNumber, bool &anyFreeSeats) {
    int seatChoiceNumber;
    char seatChoiceLetter;
    int letter;

    int maxSeats = NUMBER_OF_ROWS * NUMBER_OF_COLUMNS;

    cout << "Seat (Row, Column):    ";
    cin >> seatChoiceNumber >> seatChoiceLetter;
    letter = static_cast<int>(toupper(seatChoiceLetter));

    if (((letter >= 65) && (letter < (65 + NUMBER_OF_COLUMNS))) && ((seatChoiceNumber > 0) && (seatChoiceNumber <= NUMBER_OF_ROWS))) {
        if (seats[(seatChoiceNumber)][(letter - 65)] == 82) {

        } else {
            seats[(seatChoiceNumber)][(letter - 65)] = 82;

            SeatCountNumber++; //this changes last value in column  B for some reason

            if (SeatCountNumber < maxSeats) {
                anyFreeSeats = true;
            }

            else if (SeatCountNumber > maxSeats) {
                printAllSeats(seats);
                anyFreeSeats = false;
            }
        }

    } else {
    }
}

1 个答案:

答案 0 :(得分:0)

我有点清理了代码。看来你在评论中找到了答案,所以我只是做了一些缩进。尝试并消除代码中的空格(请注意,我放在这里的那个也不完美,但你明白了)。干净且易于阅读的代码不仅使它更好,而且随着您在行业中越来越高并且其他人开始阅读和处理您的代码,拥有简洁易读的代码确实有助于:)

#include <iostream> //includes cin cout
#include <iomanip>

using namespace std; //setting up the    environment

const int NUMBER_OF_ROWS = 3;
const int NUMBER_OF_COLUMNS = 3;

void printAllSeats(int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS]);
void reset(int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS]);
void askForUsersSeat(int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS], int &SeatCountNumber, bool &anyFreeSeats);
bool isFull(int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS]);
bool isEmpty(int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS]);

int main() 
{ 
    int maxSeats;
    int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS];
    int SeatCountNumber = 0;
    bool anyFreeSeats;

    reset(seats);

    anyFreeSeats = true;
    SeatCountNumber = 0;

    while (anyFreeSeats)
    {
        printAllSeats(seats);
        askForUsersSeat(seats, SeatCountNumber, anyFreeSeats);
    }

    system("pause");
        return 0;
} //main ends

void printAllSeats(int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS])
{
    cout << endl;
    cout << setw(10) << "              - = Available      R =   Reserved\n\n";
    for (int i = 0; i <= NUMBER_OF_ROWS; i++)
    {
        cout << setw(15) << i << " ";
        for (int j = 0; j < NUMBER_OF_COLUMNS; j++)
        {
            if (i == 0) 
            {
                cout << "  " << static_cast<char>(j + 65) << "   ";
            }
            else 
            {
                cout << "  " << static_cast<char>(seats[i][j]) << "   ";
            }
        }
        cout << endl;
    }
    cout << endl;
}

void reset(int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS])
{
    //set all values in array to  196
    for (int i = 0; i <= NUMBER_OF_ROWS; i++)
    {
        for (int j = 0; j <= NUMBER_OF_COLUMNS; j++)
        {
            seats[i][j] = 196;
        }
    }
}

void askForUsersSeat(int seats[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS], int &SeatCountNumber, bool &anyFreeSeats)
{
    int seatChoiceNumber;
    char seatChoiceLetter;
    int letter;
    int maxSeats = NUMBER_OF_ROWS * NUMBER_OF_COLUMNS;

    cout << "Seat (Row, Column):    ";
    cin >> seatChoiceNumber >> seatChoiceLetter;
    letter = static_cast<int>(toupper(seatChoiceLetter));

    if (((letter >= 65) && (letter < (65 + NUMBER_OF_COLUMNS))) && ((seatChoiceNumber > 0) && (seatChoiceNumber <= NUMBER_OF_ROWS)))
    {
        if (seats[(seatChoiceNumber)][(letter - 65)] == 82)
        {

        }
        else
        {
            seats[(seatChoiceNumber)][(letter - 65)] = 82;
            SeatCountNumber++; //this changes last value in column  B for some reason

            if (SeatCountNumber < maxSeats)
            {
                anyFreeSeats = true;
            }
            else if (SeatCountNumber > maxSeats)
            {
                printAllSeats(seats);
                anyFreeSeats = false;
            }
        }
    }
    else {
    }
}

注意:更多的空格甚至可以出来,但我通常喜欢在某些陈述(个人偏好)之后有空格。