Форум программистов, компьютерный форум CyberForum.ru

Как функции присвоить значение false? - C++

Восстановить пароль Регистрация
 
007imran007
1 / 1 / 0
Регистрация: 08.07.2012
Сообщений: 83
03.05.2014, 22:25     Как функции присвоить значение false? #1
Пишу крестики-нолики и в конце когда пользователь нажимает "Начать сначала" игра начинается сначала
(цикл do-while), но в течении этого цикла функция win()(осуществляет проверку на победу и возвращает true/false) принимает значение true и повторный запуск пропускает этот участок кода (почти вся игра)
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
do
{
оператор1;
оператор2;
оператор n;
while( !win() )
{
 тут происходит игра....
}
cout << "Еще раз? y/n: ";
choice = getche();
}while(choice != 'n');
Где-то в этом участке кода:
C++
1
2
cout << "Еще раз? y/n: ";
choice = getche();
мне нужно присвоить win() значение false, чтобы повторный запуск цикла не обошел проверку
C++
1
while( !win() )
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2014, 22:25     Как функции присвоить значение false?
Посмотрите здесь:

Переменной k логического типа присвоить значение true в том случае, если массив n целых чисел упорядочен по возрастанию, i значение false если нет C++
Не получается присвоить значение указателя в функции C++
как присвоить переменной char значение слова ? C++
C++ Как присвоить полям структуры значение?
Как присвоить значение возвращаемое функцией? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TenGen
Будущее рядом
 Аватар для TenGen
96 / 94 / 20
Регистрация: 06.03.2014
Сообщений: 342
03.05.2014, 22:32     Как функции присвоить значение false? #2
007imran007, bool win() { return false; } ???
Melg
418 / 154 / 62
Регистрация: 23.09.2013
Сообщений: 306
03.05.2014, 22:39     Как функции присвоить значение false? #3
Вы могли бы предоставить код функции win?
Фактически после выбора игрока повторной игры вы должны возвратить состояние игрового поля(игры в общем случае) к некоторому, первоначальному, в котором win по умолчанию будет возвращать false.
007imran007
1 / 1 / 0
Регистрация: 08.07.2012
Сообщений: 83
03.05.2014, 22:41  [ТС]     Как функции присвоить значение false? #4
У меня уже есть функция win() возвращает true если условие победы выполнено, иначе false. Нельзя определить функцию с таким же именем 2 раза. Вот ее код, если хотите:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool win()
{
    for(int i(0); i < 3; i++)
            if((table[i][0] == table[i][1]) && (table[i][0] == table[i][2]))    //горизонталь
                return true;
        else 
            if((table[0][i] == table[1][i]) && (table[0][i] == table[2][i]))    //вертикаль
                return true;
        else
            if((table[0][0] == table[1][1]) && (table[0][0] == table[2][2]) || (table[0][2] == table[1][1]) && (table[0][2] == table [2][0]))   //диагональ
                return true;
 
    //иначе
    return false;
}
Melg
418 / 154 / 62
Регистрация: 23.09.2013
Сообщений: 306
03.05.2014, 22:45     Как функции присвоить значение false? #5
Обнуляйте состояние поля table - в вашем случае, В тот момент когда игрок выбрал повторную игру. Ну или наоборот - в начале цикла
C++
1
2
3
4
5
6
do
{
оператор1;
оператор2;
оператор n;
обнуление состояния поля;
007imran007
1 / 1 / 0
Регистрация: 08.07.2012
Сообщений: 83
03.05.2014, 22:45  [ТС]     Как функции присвоить значение false? #6
Цитата Сообщение от Melg Посмотреть сообщение
Вы могли бы предоставить код функции win?
Фактически после выбора игрока повторной игры вы должны возвратить состояние игрового поля(игры в общем случае) к некоторому, первоначальному, в котором win по умолчанию будет возвращать false.
Как функции присвоить значение false?
Melg
418 / 154 / 62
Регистрация: 23.09.2013
Сообщений: 306
03.05.2014, 22:55     Как функции присвоить значение false? #7
В общем случае ваш вопрос не корректен. Функции нельзя присвоить значение. Любое значение может храниться в переменной. Если переменная не константная - её значение может меняться в процессе работы программы. Функция может только обрабатывать некоторые данные, и на основании этих данных возвращать то или иное значение. Если у функции есть доступ к глобальной области видимости, то простейший пример:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
bool is_finished = false;
 
 
bool Win() {
  return is_finished;
}
 
void GameLoop() {
 
  do {
      is_finished = false;
 
      while (!Win()) {
          is_finished = true;
        }
 
    } while(UserWantsRestart());
 
}
Но такой подход является концептуально неверным.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.05.2014, 23:22     Как функции присвоить значение false? #8
Цитата Сообщение от Melg Посмотреть сообщение
Функции нельзя присвоить значение.
Но если очень хочется, то можно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
bool is_finished = false;
 
bool& Win() 
{
  if (...)
    return is_finished = true;
  else return is_finished = false;
}
 
void GameLoop() 
{
  do 
  {
      while (!Win()) 
      {
          
      }
      ...
      Win() = false;
  } while(UserWantsRestart());
 
}
007imran007
1 / 1 / 0
Регистрация: 08.07.2012
Сообщений: 83
03.05.2014, 23:28  [ТС]     Как функции присвоить значение false? #9
Всем спасибо! Пришлось сделать немного придурковато) Скопировал цикл while( !win() ) и убрал инверсию, то есть при повторном запуске, когда win() будет true - запустится такой же цикл
Melg
418 / 154 / 62
Регистрация: 23.09.2013
Сообщений: 306
03.05.2014, 23:30     Как функции присвоить значение false? #10
От того что вы по lvalue referenc-у, возвращаемому функцией, присвоили значение объекту типа int, мир не перевернулся, и функция не приобрела "значения". Присвойте значение таким образом значение функции возвращающей void, или не ссылочный тип данных. В конечном счёте никто не отменял ассоциативных контейнеров - в этом смысле, мы можем присвоить значение некоторой функции (т.е. пронумеровать функцию). Но далеко не в том контексте, о котором спрашивал автор темы.

C++
1
Win() = false;
Кроме того такой код в мало-мальски большом проекте, или при прочтении Н недель спустя - ничего кроме почёсывания затылка у читающего не вызовет.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.05.2014, 23:31     Как функции присвоить значение false? #11
Цитата Сообщение от Melg Посмотреть сообщение
Но далеко не в том контексте, о котором спрашивал автор темы.
Как раз, в том контексте.
Цитата Сообщение от 007imran007 Посмотреть сообщение
мне нужно присвоить win() значение false, чтобы повторный запуск цикла не обошел проверку
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2014, 23:32     Как функции присвоить значение false?
Еще ссылки по теме:

Как присвоить возвращаемое значение функции переменной? C++
C++ Как правильно присвоить значение NULL
Как присвоить значение любое число C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
03.05.2014, 23:32     Как функции присвоить значение false? #12
у вас функция win решает что возвращать на основе содержимого ячеек.
чтобы она возвращала false вам нужно перед рестартом игры в ваши ячейки
записать правильные значения обнулить или хз какие значения вы используете
для не занятых ячеек. впрочем, это уже сказали в одном из первых ответов.
Yandex
Объявления
03.05.2014, 23:32     Как функции присвоить значение false?
Ответ Создать тему
Опции темы

Текущее время: 01:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru