@vladislaav

Почему не изменяются значения в Структуре?

Пишу игру "Морской бой". При смене значения ships.x или ships.y (со структуры) значение не меняется (
Правильно ли я вообще написал функцию?
Код

struct Ships {
	int x = 1;
	int y = 1;
};

void CheckPressedKey(char** area, char** area_buf, int row, int col)
{
	struct Ships ships;
	int key, counter = 1;
	while (counter > 0)
	{
		key = _getch();
		switch (key)
		{
			case 77: //Вправо - D
			{
				if (ships.x + ships.number_decks - 1 < 9) ships.x += 1;
                                cout << ships.x; //Тут выводит верно )
				PrintShips(area, area_buf, row, col);

			} break;
		}
	}
}

void PrintShips(char** area, char** area_buf, int row, int col) {
	struct Ships ships;
	cout << ships.x; //Тут выводит 1 все время (
}

  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
void CheckPressedKey(char** area, char** area_buf, int row, int col)
{
  struct Ships ships;

Структура ships -- автоматическая, существует на стеке только во время выполнения этой функции, создаётся (с неопределёнными значениями полей) при входе в неё и исчезает при выходе.
Если ты хотел, чтобы она сохранялась между вызовами этой функции, нужно было добавить static: static struct Ships ships;. С этим изменением будет работать так как ты задумал, но наличие статических переменных в функциях -- не очень хорошая практика. Обычно лучшим решением является передача таких данных в функцию как параметра, например:
void CheckPressedKey(char** area, char** area_buf, int row, int col, struct Ships *ships)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы