【问题标题】:why increment variable changing the value of the array when they have different names为什么递增变量在名称不同时会更改数组的值
【发布时间】:2015-06-03 16:31:27
【问题描述】:

谁能帮帮我。我很难在我的代码中找到为什么 B 列中的最后一个值总是加一。自从今天的作业到期以来,我已经编写了一些代码。我也无法弄清楚为什么 B 列中的最后一个值不等于 196 因为在重置函数中它将数组中的所有值设置为 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 {
    }
}

【问题讨论】:

  • i &lt;= NUMBER_OF_ROWS - 使用 &lt; 而不是 &lt;= - 当前版本超出范围,请更正此错误并在仍然无法正常工作时返回问题...
  • 不,但我真的不知道如何使用代码块,对不起,我只是需要一些帮助,我会尝试编辑它,使其更具可读性
  • @PiotrNycz 它有助于摆脱那个有趣的角色!谢谢
  • @PiotrNycz 当数组为 3x3 时,打印输出的矩阵为 3x2。我应该改变什么我
  • 我已经解决了我所有的问题,再次感谢@PiotrNycz

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


【解决方案1】:

我稍微清理了代码。看来您在 cmets 中找到了答案,所以我只是做了一些缩进。尝试消除代码中的空格(请注意,我放在这里的那个也不完美,但你明白了)。干净易读的代码不仅会让你变得更好,而且随着你在行业中的地位越来越高,其他人开始阅读和处理你的代码,拥有干净易读的代码真的很有帮助:)

#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 {
    }
}

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

【讨论】:

  • 正如其他人所说,您需要
猜你喜欢
  • 2018-02-04
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
  • 2022-08-03
  • 2016-10-29
  • 1970-01-01
  • 2017-07-19
  • 1970-01-01
相关资源
最近更新 更多