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

Игра "Угадай число" - C++

Восстановить пароль Регистрация
 
Mikle90
1 / 1 / 0
Регистрация: 15.03.2012
Сообщений: 23
13.02.2013, 17:02     Игра "Угадай число" #1
Написал программу угадывания числа. Программа работает, но есть проблема повторного вызова игры. Когда мы угадываем число, программа нам предлагает повторно начать игру, введя 1. Но после ввода 1, приложение завершает работу. Помогите разобраться

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int zagadka (int);
int main()
{
    setlocale(0,"");
    int chislo;
    char otvetili;
 
    cout << "Мое число между 1 и 1000\nВы можете его отгадать ?\nПожалуйста, напечатайте вашу первую догадку" << endl;
    cin >> chislo;
    int a = zagadka(chislo);
    if (a == 1) // не срабатывает это условие, когда число отгадали
    {
        cout << "Мое число между 1 и 1000\nВы можете его отгадать ?\nПожалуйста, напечатайте вашу первую догадку" << endl;
        cin >> chislo;
        zagadka(chislo);
    }
 
}
int zagadka (int chisl)
{
    srand(time(NULL));
    int zagadanoe = 1 + rand()%1000;
    int otvet;
 
    while (chisl != zagadanoe)
    {
        if (chisl < zagadanoe)
        {
            cout << "Мало. Введите снова" << endl;
            cin >> chisl;
        }
        if (chisl > zagadanoe)
        {
            cout << "Много. Введите снова" << endl;
            cin >> chisl;
        }
    }
 
    if (chisl == zagadanoe)
    {
        cout << "Отлично! Вы отгадали число" << endl
            << "Хотели бы сыграть еще раз ? (Да (1) или Нет (0))" << endl;
        cin >> otvet;
        if (otvet == 1)
            return 1;
        else if (otvet == 0)
            return 0;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2013, 17:02     Игра "Угадай число"
Посмотрите здесь:

Игра "Угадай число" C++
Игра "Угадай число" C++
Game "Угадай число" как зделать запрет на "букви" ???? C++
C++ Игра "Угадай число"!
Игра "Угадай слова" через массивы! C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
13.02.2013, 17:10     Игра "Угадай число" #2
В вас otvet типа char а вы сравниваете как int значение!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int zagadka (int);
int main()
{
    setlocale(0,"");
    int chislo;
    char otvetili;
 
    cout << "Мое число между 1 и 10\nВы можете его отгадать ?\nПожалуйста, напечатайте вашу первую догадку" << endl;
    cin >> chislo;
    int a = zagadka(chislo);
    if (a == 1) // не срабатывает это условие, когда число отгадали
    {
        cout << "Мое число между 1 и 10\nВы можете его отгадать ?\nПожалуйста, напечатайте вашу первую догадку" << endl;
        cin >> chislo;
        zagadka(chislo);
    }
 
}
int zagadka (int chisl)
{
    srand(time(NULL));
    int zagadanoe = rand()%10+1;
    char otvet;
 
    while (chisl != zagadanoe)
    {
        if (chisl < zagadanoe)
        {
            cout << "Мало. Введите снова" << endl;
            cin >> chisl;
        }
        if (chisl > zagadanoe)
        {
            cout << "Много. Введите снова" << endl;
            cin >> chisl;
        }
    }
 
    if (chisl == zagadanoe)
    {
        cout << "Отлично! Вы отгадали число" << endl
            << "Хотели бы сыграть еще раз ? (Да (1) или Нет (0))" << endl;
        cin >> otvet;
        if (otvet == '1')
            return 1;
        else if (otvet == '0')
            return 0;
    }
}
Mikle90
1 / 1 / 0
Регистрация: 15.03.2012
Сообщений: 23
13.02.2013, 17:13  [ТС]     Игра "Угадай число" #3
Да, глупая ошибка
Alexxx7
97 / 33 / 5
Регистрация: 24.04.2012
Сообщений: 151
13.02.2013, 17:34     Игра "Угадай число" #4
Всё верно в третий раз функия не вызовется, так как желание продолжить игру вы проверяете 1 раз, для постоянного отслеживания можно поменять if на while

Добавлено через 11 минут
Я бы упростил до такого
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
void zagadka (void);
int main()
{
    setlocale(0,"");
    char a = '1';
    while(a == '1'){
        zagadka();
       cout << "Отлично! Вы отгадали число" << endl
            << "Хотели бы сыграть еще раз ? (Да (1) или Нет (0))" << endl;
       cin >> a;
    }
}
void zagadka (void)
{
    srand(time(NULL));
    int zagadanoe = 1 + rand()%1000;
    int otvet;
    cout << "Мое число между 1 и 1000\nВы можете его отгадать ?\nПожалуйста, напечатайте вашу первую догадку" << endl;
    cin >> otvet;
    while (otvet != zagadanoe)
    {
        if (otvet < zagadanoe)
            cout << "Мало. Введите снова" << endl;
        if (otvet > zagadanoe)
            cout << "Много. Введите снова" << endl;
            cin >> otvet;
    }
}
makShot
15 / 15 / 1
Регистрация: 07.07.2011
Сообщений: 38
13.02.2013, 18:33     Игра "Угадай число" #5
А еще можно добавить проверку числа a на валидные данные (на случай, если введено не 1 и не 0):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include<iostream>
#include<stdlib.h>
#include<time.h>
 
using namespace std;
 
void zagadka (void);
int main()
{
    setlocale(0,"");
    char a = '1';
    while(a == '1'){
        zagadka();
       cout << "Отлично! Вы отгадали число" << endl;
 
       do
       {
           if ((a != '1') && (a != '0'))
               cout <<  "Неверное значение. Пожалуйста, повторите попытку"  <<  endl;
 
           cout << "Хотели бы сыграть еще раз ? (Да (1) или Нет (0))" << endl;
           cin >> a;
       } while ((a != '1') && (a != '0'));
       
    }
}
void zagadka (void)
{
    srand(time(NULL));
    int zagadanoe = 1 + rand()%1000;
    int otvet;
    cout << "Мое число между 1 и 1000\nВы можете его отгадать ?\nПожалуйста, напечатайте вашу первую догадку" << endl;
    cin >> otvet;
    while (otvet != zagadanoe)
    {
        if (otvet < zagadanoe)
            cout << "Мало. Введите снова" << endl;
        if (otvet > zagadanoe)
            cout << "Много. Введите снова" << endl;
            cin >> otvet;
    }
}
Yandex
Объявления
13.02.2013, 18:33     Игра "Угадай число"
Ответ Создать тему
Опции темы

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