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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
007imran007
1 / 1 / 0
Регистрация: 08.07.2012
Сообщений: 83
#1

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

03.05.2014, 22:25. Просмотров 531. Ответов 11
Метки нет (Все метки)

Пишу крестики-нолики и в конце когда пользователь нажимает "Начать сначала" игра начинается сначала
(цикл 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() )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2014, 22:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как функции присвоить значение false? (C++):

Переменной k логического типа присвоить значение true в том случае, если массив n целых чисел упорядочен по возрастанию, i значение false если нет - C++
Условие задачи: Переменной k логического типа присвоить значение true в том случае, если массив n целых чисел упорядочен по возрастанию,...

Как присвоить второму элементу массива в функции A(), значение, которое было возвращено из функции B()? - C++
Как присвоить к второму элементу массива в функции innfunc значение 10, который вернет innfunc1? Замечание: нельзя указывать b = 10, а...

Как присвоить возвращаемому значению функции значение - C++
Да, заголовок написан очень некорректно, но лучше не сформулирован, уж простите. Короче говоря, есть шаблонный класс List, точнее его...

Как присвоить возвращаемое значение функции переменной? - C++
double sine(int index, int frequency) { return (100*sin(index*frequency)); } вопрос: как присвоить возвращаемое значение...

Не получается присвоить значение указателя в функции - C++
void Gauss(double *x,double b) { for (int i = n-1; i &gt;0 ; i--) { *x=0; for (int j = n; j &lt; i; j--) { *x+=-*x*A; } ...

Как вывести значение переменной bool в виде литералов false и true? - C++
В C++ когда я вывожу значение переменной bool, оно выводится всегда 1 или 0. Как сделать чтобы выводилось false или true, какие аргументы...

11
TenGen
Будущее рядом
98 / 96 / 20
Регистрация: 06.03.2014
Сообщений: 342
03.05.2014, 22:32 #2
007imran007, bool win() { return false; } ???
0
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
03.05.2014, 22:39 #3
Вы могли бы предоставить код функции win?
Фактически после выбора игрока повторной игры вы должны возвратить состояние игрового поля(игры в общем случае) к некоторому, первоначальному, в котором win по умолчанию будет возвращать false.
0
007imran007
1 / 1 / 0
Регистрация: 08.07.2012
Сообщений: 83
03.05.2014, 22:41  [ТС] #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;
}
0
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
03.05.2014, 22:45 #5
Обнуляйте состояние поля table - в вашем случае, В тот момент когда игрок выбрал повторную игру. Ну или наоборот - в начале цикла
C++
1
2
3
4
5
6
do
{
оператор1;
оператор2;
оператор n;
обнуление состояния поля;
0
007imran007
1 / 1 / 0
Регистрация: 08.07.2012
Сообщений: 83
03.05.2014, 22:45  [ТС] #6
Цитата Сообщение от Melg Посмотреть сообщение
Вы могли бы предоставить код функции win?
Фактически после выбора игрока повторной игры вы должны возвратить состояние игрового поля(игры в общем случае) к некоторому, первоначальному, в котором win по умолчанию будет возвращать false.
Как функции присвоить значение false?
0
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
03.05.2014, 22:55 #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());
 
}
Но такой подход является концептуально неверным.
1
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.05.2014, 23:22 #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());
 
}
1
007imran007
1 / 1 / 0
Регистрация: 08.07.2012
Сообщений: 83
03.05.2014, 23:28  [ТС] #9
Всем спасибо! Пришлось сделать немного придурковато) Скопировал цикл while( !win() ) и убрал инверсию, то есть при повторном запуске, когда win() будет true - запустится такой же цикл
0
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
03.05.2014, 23:30 #10
От того что вы по lvalue referenc-у, возвращаемому функцией, присвоили значение объекту типа int, мир не перевернулся, и функция не приобрела "значения". Присвойте значение таким образом значение функции возвращающей void, или не ссылочный тип данных. В конечном счёте никто не отменял ассоциативных контейнеров - в этом смысле, мы можем присвоить значение некоторой функции (т.е. пронумеровать функцию). Но далеко не в том контексте, о котором спрашивал автор темы.

C++
1
Win() = false;
Кроме того такой код в мало-мальски большом проекте, или при прочтении Н недель спустя - ничего кроме почёсывания затылка у читающего не вызовет.
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.05.2014, 23:31 #11
Цитата Сообщение от Melg Посмотреть сообщение
Но далеко не в том контексте, о котором спрашивал автор темы.
Как раз, в том контексте.
Цитата Сообщение от 007imran007 Посмотреть сообщение
мне нужно присвоить win() значение false, чтобы повторный запуск цикла не обошел проверку
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
03.05.2014, 23:32 #12
у вас функция win решает что возвращать на основе содержимого ячеек.
чтобы она возвращала false вам нужно перед рестартом игры в ваши ячейки
записать правильные значения обнулить или хз какие значения вы используете
для не занятых ячеек. впрочем, это уже сказали в одном из первых ответов.
0
03.05.2014, 23:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2014, 23:32
Привет! Вот еще темы с ответами:

Как присвоить массиву значение суммы? - C++
Вычислить сумму элементов матрицы по столбцам . Найти наименьшую сумму. #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; ...

Как присвоить переменной значение pow? - C++
Здравствуйте! У меня есть число, которое нужно возвести в большую степень (например 7 в степень 132) и взять остаток который получится...

Как присвоить полям структуры значение? - C++
Добрый день! У меня есть некая структура, как присвоить ей значение и передать в функцию. Если не трудно, можно на примере: { char...

Как правильно присвоить значение NULL - C++
Есть класс:struct TPointR3 { float r0; float r1; float r2; }; struct TPointR2 { float r0;


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru