У меня есть серьезная проблема, которую я просто не могу решить. Я прошу прощения, если это действительно новичок-подобная проблема.
srand(117);
//enumeration type to keep track of which fish is which
enum CellState {EMPTY, FISH, SHARK};
//Creating the grid
CellState fishGrid[MAX_X][MAX_Y];
for(int m = 0; m < MAX_X; ++m)
{
for(int n = 0; n < MAX_Y; ++n)
{
int num = rand() % 2;
if(num == 0)
fishGrid[m][n] = EMPTY;
else
{
num = rand() % 2;
if(num == 0)
fishGrid[m][n] = SHARK;
else
fishGrid[m][n] = FISH;
}
}
}
//calculate how many on grid
if(stepsTaken % 5 == 0)
{
int fishAmount = 0;
int sharkAmount = 0;
for(int m = 0; m < MAX_X; m++)
{
for(int n = 0; n < MAX_Y; n++)
{
if(fishGrid[m][n] = FISH)
fishAmount++;
else if(fishGrid[m][n] = SHARK)
sharkAmount++;
}
}
cout << "FISH: " << fishAmount << endl
<< "SHARKS: " << sharkAmount << endl << endl;
По какой-то причине выход всегда: FISH: 100 SHARKS: 0
Я не обязательно понимаю. Кто-нибудь сможет мне помочь? Благодарю.
=
обозначает оператор присваивания в C++. Это означает, что вы здесь
if(fishGrid[m][n] = FISH)
fishAmount++;
else if(fishGrid[m][n] = SHARK)
sharkAmount++;
использует оператор присваивания внутри условий if
. В соответствии с вышеизложенным вы переопределяете всю свою сетку значениями FISH
.
Сравнение равенств в C++ выполняется оператором ==
. Но вы уже знаете, что, так как вы уже используете ==
в ваших num
сравнениях. Почему вы используете =
в этих сетках сравнения?