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

Игра Угадай Слово ошибка в коде - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
hotborsh
0 / 0 / 0
Регистрация: 25.12.2010
Сообщений: 18
13.05.2013, 14:23     Игра Угадай Слово ошибка в коде #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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <cctype>
using std::string;
const int NUM = 20;
const string wordlist[NUM] = {"Г*ðáóç", "ГЎГ*ГЎГіГёГЄГ*", "âîðîáåé",
    "Г¤Г*Г¬Г*", "¸æèê", "ГґГ*áðèêГ*", "ГЈГ*Г°Г*Г¦", "äåäóøêГ*", "ГіГІГЄГ*",
    "êîñìåòèêГ*", "ГІГ°Г*êòîð", "ëèГ*Г*Г*", "ìîðÿê", "Г*Г*ñîñ", "îìëåò",
    "Г·Г*éêГ*", "ГЈГЁГІГ*ðèñò", "ðåìîГ*ГІ", "Г±Г*ìîâГ*Г°", "ÿáëîêî"};
int main()
{
    setlocale(LC_ALL, "Russian");
    
    using std::cout;
    using std::cin;
    using std::tolower;
    using std::endl;
    
    std::srand(std::time(0));
    char play;
    cout << " Áóäåøü ëè ГўГ» ГЁГЈГ°Г*ГІГј èãðó Гў ñëîâГ*? <Г¤Г*/Г*ГҐГІ> ";
    cin >> play;
    play = tolower(play);
    while (play == 'Г¤Г*')
    {
        string target = wordlist[std::rand() % NUM];
        int length = target.length();
        string attempt(length, '-');
        string badchars;
        int guesses = 6;
        cout << " ìîå ñåêðåòГ*îå ñëîâî " << length
            << " ГЎГіГЄГўГ», ГўГ» äîãГ*Г¤Г*ëè \ Г*ГҐГІ "
            << " îäГ*Гі ГЎГіГЄГўГі Г§Г* îäèГ* Г°Г*Г§. Âû ïîëó÷Г*ГҐГІГҐ " << guesses
            << " Г*ГҐГЇГ°Г*âèëüГ*Г®.\ Г*ГҐГІ ";
        cout << " Г‚Г*ГёГ* ñëîâî: " << attempt << endl;
        while (guesses > 0 && attempt != target)
        {
            char letter;
            cout << " ÓãГ*Г¤Г*éòå ñëîâî ";
            cin >> letter;
            if (badchars.find(letter) != string::npos
                || attempt.find(letter) != string::npos)
            {
                cout << " Âû óæå äîãГ*Г¤Г*ëèñü. Ïîïðîáóéòå ГҐГ№ГҐ Г°Г*Г§..\ Г*ГҐГІ ";
                    continue;
            }
            int loc = target.find(letter);
            if (loc == string::npos)
            {
                cout << "Oh, bad guess!\ Г*ГҐГІ ";
                --guesses;
                badchars += letter; // add to string
            }
            else
            {
                cout << " ГЇГ°Г*âèëüГ*Г®!\ Г*ГҐГІ ";
                attempt[loc]=letter;
                // check if letter appears again
                loc = target.find(letter, loc + 1);
                while (loc != string::npos)
                {
                    attempt[loc]=letter;
                    loc = target.find(letter, loc + 1);
                }
           }
            cout << " Г‚Г*ГёГҐ ñëîâî:" << attempt << endl;
            if (attempt != target)
            {
                if (badchars.length() > 0)
                    cout << " ГЌГҐГЇГ°Г*âèëüГ*ûé âûáîð:" << badchars << endl;
                cout << guesses << " Г*ГҐГўГҐГ°Г*ûõ ïðåäïîëîæåГ*ГЁГ© îñòГ*ëîñü \ Г*ГҐГІ ";
            }
        }
        if (guesses > 0)
            cout << " ГќГІГ® ГЇГ°Г*âèëüГ*Г®!\ Г*ГҐГІ ";
        else
            cout << " ГЉ ñîæГ*ëåГ*ГЁГѕ, ГЅГІГ® ñëîâî " << target << ".\ Г*ГҐГІ ";
 
        cout << " Áóäåòå ëè ГўГ» ГЁГЈГ°Г*ГІГј ГҐГ№ГҐ?< Г¤Г* / Г*ГҐГІ > ";
        cin >> play;
        play = tolower(play);
    }
 
    cout << " äî Г±ГўГЁГ¤Г*Г*ГЁГї \ Г*ГҐГІ ";
 
 system("pause");
    return 0; 
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2013, 14:23     Игра Угадай Слово ошибка в коде
Посмотрите здесь:

Игра "Угадай число" C++
Игра "Угадай число" C++
C++ Игра "Угадай число"!
Игра "Угадай слова" через массивы! C++
Игра "Угадай число" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
13.05.2013, 14:29     Игра Угадай Слово ошибка в коде #2
Цитата Сообщение от hotborsh Посмотреть сообщение
C++
1
char play;
Цитата Сообщение от hotborsh Посмотреть сообщение
C++
1
while (play == 'да')
тогда уже
C++
1
while(play == 'д')
Ден90
2 / 2 / 0
Регистрация: 19.11.2012
Сообщений: 55
13.05.2013, 14:30     Игра Угадай Слово ошибка в коде #3
попробуй 'да' на "да" поменять
а ну и char на char* =)
KATbIK
 Аватар для KATbIK
86 / 81 / 10
Регистрация: 02.08.2011
Сообщений: 335
13.05.2013, 15:25     Игра Угадай Слово ошибка в коде #4
C++
1
std::string play;
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
13.05.2013, 15:53     Игра Угадай Слово ошибка в коде #5
Цитата Сообщение от Ден90 Посмотреть сообщение
попробуй 'да' на "да" поменять
а ну и char на char* =)
нет, надо на 'д' менять.

Цитата Сообщение от KATbIK Посмотреть сообщение
std::string play;
А это уже STL!!!!!!!
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
13.05.2013, 16:00     Игра Угадай Слово ошибка в коде #6
Цитата Сообщение от hotborsh Посмотреть сообщение
char play;
поменяй на string play и в while() 'да' замени на "да".
hotborsh
0 / 0 / 0
Регистрация: 25.12.2010
Сообщений: 18
13.05.2013, 17:01  [ТС]     Игра Угадай Слово ошибка в коде #7
К сожалению ничего из выше перечисленного не помогло Если меняю на 'д', то ничего не меняется, а если заменяю char на char* или на string, то выдаёт ошибку о вообще не запускает. На "да" тоже пробовал менять.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
13.05.2013, 17:38     Игра Угадай Слово ошибка в коде #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
hotborsh, на string
Инструкция.
1. меняй char play на std::string play
2. слово 'да' замени на "да"
3. строчку эту: play = tolower(play); за комментируй.

Давай я в тебя верю, у тебя все получится! Должно заработать. Попробуй все так как я в инструкции написал сделать .
hotborsh
0 / 0 / 0
Регистрация: 25.12.2010
Сообщений: 18
13.05.2013, 17:51  [ТС]     Игра Угадай Слово ошибка в коде #9
Сделал всё как в инструкции, запускается, но опять та же фигня. Как только пишу "да", так программа закрывается. И при компиляции выдаёт [Warning] '\040'
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
13.05.2013, 18:03     Игра Угадай Слово ошибка в коде #10
Я тоже пробовал у меня не работает так русские символы не правильно отображаются при вводе попробуй на yes/no заменить отак:
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <string>
#include <cstdlib>
using std::endl;
#include <ctime>
#include <cctype>
using std::string;
const int NUM = 20;
const string wordlist[NUM] = {"арбуз", "бабушка", "воробей",
    "дама", "ёжик", "фабрика", "гараж", "дедушка", "утка",
    "косметика", "трактор", "лиана", "моряк", "насос", "омлет",
    "чайка", "гитарист", "ремонт", "самовар", "яблоко"};
int main()
{
    setlocale(LC_ALL, "Russian");
    
    using std::cout;
    using std::cin;
    using std::tolower;
    using std::endl;
    
    std::srand(std::time(0));
    std::string play="";
    cout << " Будешь ли вы играть игру в слова? <yes/no> ";
    cin >> play;
    //play = tolower(play);
    cout <<"play= "<<play<<endl;
    while (play == "yes")
    {
        //cout <<"Mu cdec6"<<endl;exit(1);
        string target = wordlist[std::rand() % NUM];
        int length = target.length();
        string attempt(length, '-');
        string badchars;
        int guesses = 6;
        cout << " мое секретное слово " << length
            << " буквы, вы догадали \ нет "
            << " одну букву за один раз. Вы получаете " << guesses
            << " неправильно.\ нет ";
        cout << " Ваша слово: " << attempt << endl;
        while (guesses > 0 && attempt != target)
        {
            char letter;
            cout << " Угадайте слово ";
            cin >> letter;
            if (badchars.find(letter) != string::npos
                || attempt.find(letter) != string::npos)
            {
                cout << " Вы уже догадались. Попробуйте еще раз..\ нет ";
                    continue;
            }
            int loc = target.find(letter);
            if (loc == string::npos)
            {
                cout << "Oh, bad guess!\ нет ";
                --guesses;
                badchars += letter; // add to string
            }
            else
            {
                cout << " правильно!\ нет ";
                attempt[loc]=letter;
                // check if letter appears again
                loc = target.find(letter, loc + 1);
                while (loc != string::npos)
                {
                    attempt[loc]=letter;
                    loc = target.find(letter, loc + 1);
                }
           }
            cout << " Ваше слово:" << attempt << endl;
            if (attempt != target)
            {
                if (badchars.length() > 0)
                    cout << " Неправильный выбор:" << badchars << endl;
                cout << guesses << " неверных предположений осталось \ нет ";
            }
        }
        if (guesses > 0)
            cout << " Это правильно!\ нет ";
        else
            cout << " К сожалению, это слово " << target << ".\ нет ";
 
        cout << " Будете ли вы играть еще?< yes / no > ";
        cin >> play;
        //play = tolower(play);
    }
 
    cout << " до свидания \ нет ";
 
 system("pause");
    return 0; 
}
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
13.05.2013, 18:08     Игра Угадай Слово ошибка в коде #11
C++
1
while (play + 64 == (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <cctype>
using std::string;
const int NUM = 20;
const string wordlist[NUM] = {"арбуз", "бабушка", "воробей",
    "дама", "ёжик", "фабрика", "гараж", "дедушка", "утка",
    "косметика", "трактор", "лиана", "моряк", "насос", "омлет",
    "чайка", "гитарист", "ремонт", "самовар", "яблоко"};
int main()
{
    setlocale(LC_ALL, "Russian");
    
    using std::cout;
    using std::cin;
    using std::tolower;
    using std::endl;
    
    std::srand(std::time(0));
    char play;
    cout << " Будешь ли вы играть игру в слова? <д/н> ";
    cin >> play;
    
    play=tolower(play);
        
 
    while (play + 64 == (int('д')))
    {
        string target = wordlist[std::rand() % NUM];
        int length = target.length();
        string attempt(length, '-');
        string badchars;
        int guesses = 6;
        cout << " мое секретное слово " << length
            << " буквы, вы догадали \ нет "
            << " одну букву за один раз. Вы получаете " << guesses
            << " неправильно.\ нет ";
        cout << " Ваша слово: " << attempt << endl;
        while (guesses > 0 && attempt != target)
        {
            char letter;
            cout << " Угадайте слово ";
            cin >> letter;
            if (badchars.find(letter) != string::npos
                || attempt.find(letter) != string::npos)
            {
                cout << " Вы уже догадались. Попробуйте еще раз..\ нет ";
                    continue;
            }
            int loc = target.find(letter);
            if (loc == string::npos)
            {
                cout << "Oh, bad guess!\ нет ";
                --guesses;
                badchars += letter; // add to string
            }
            else
            {
                cout << " правильно!\ нет ";
                attempt[loc]=letter;
                // check if letter appears again
                loc = target.find(letter, loc + 1);
                while (loc != string::npos)
                {
                    attempt[loc]=letter;
                    loc = target.find(letter, loc + 1);
                }
           }
            cout << " Ваше слово:" << attempt << endl;
            if (attempt != target)
            {
                if (badchars.length() > 0)
                    cout << " Неправильный выбор:" << badchars << endl;
                cout << guesses << " неверных предположений осталось \ нет ";
            }
        }
        if (guesses > 0)
            cout << " Это правильно!\ нет ";
        else
            cout << " К сожалению, это слово " << target << ".\ нет ";
 
        cout << " Будете ли вы играть еще?< да / нет > ";
        cin >> play;
        play = tolower(play);
    }
 
    cout << " до свидания \ нет ";
 
 system("pause");
    return 0; 
}
hotborsh
0 / 0 / 0
Регистрация: 25.12.2010
Сообщений: 18
13.05.2013, 19:14  [ТС]     Игра Угадай Слово ошибка в коде #12
Спасибо большое, оба последних варианта работают!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2013, 19:52     Игра Угадай Слово ошибка в коде
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
13.05.2013, 19:52     Игра Угадай Слово ошибка в коде #13
А Вот что-то похожее на полноценный русский. (коли уж захотелось по-русски)

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <cctype>
using std::string;
const int NUM = 20;
const string wordlist[NUM] = {"арбуз", "бабушка", "воробей",
    "дама", "ёжик", "фабрика", "гараж", "дедушка", "утка",
    "косметика", "трактор", "лиана", "моряк", "насос", "омлет",
    "чайка", "гитарист", "ремонт", "самовар", "яблоко"};
int main()
{
    setlocale(LC_ALL, "Russian");
    
    using std::cout;
    using std::cin;
    using std::tolower;
    using std::endl;
    
    std::srand(std::time(0));
    char play1;
    char play2;
 
    cout << " Будешь ли вы играть игру в слова? <да/нет> ";
    play1=getchar(); cout<<play1;
    play2=getchar(); cout<<play2;
    
    play1=tolower(play1);
    play1=play1+64;
 
    play2=tolower(play2);
    play2=play2+64;
        
 
    while (play1 == (int('д'))&&(play2 == (int('а'))))
    {
        string target = wordlist[std::rand() % NUM];
        int length = target.length();
        string attempt(length, '-');
        string badchars;
        int guesses = 6;
        cout << " мое секретное слово " << length
            << " буквы, вы догадали \ нет "
            << " одну букву за один раз. Вы получаете " << guesses
            << " неправильно.\ нет ";
        cout << " Ваша слово: " << attempt << endl;
        while (guesses > 0 && attempt != target)
        {
            char letter;
            cout << " Угадайте слово ";
            cin >> letter;
            if (badchars.find(letter) != string::npos
                || attempt.find(letter) != string::npos)
            {
                cout << " Вы уже догадались. Попробуйте еще раз..\ нет ";
                    continue;
            }
            int loc = target.find(letter);
            if (loc == string::npos)
            {
                cout << "Oh, bad guess!\ нет ";
                --guesses;
                badchars += letter; // add to string
            }
            else
            {
                cout << " правильно!\ нет ";
                attempt[loc]=letter;
                // check if letter appears again
                loc = target.find(letter, loc + 1);
                while (loc != string::npos)
                {
                    attempt[loc]=letter;
                    loc = target.find(letter, loc + 1);
                }
           }
            cout << " Ваше слово:" << attempt << endl;
            if (attempt != target)
            {
                if (badchars.length() > 0)
                    cout << " Неправильный выбор:" << badchars << endl;
                cout << guesses << " неверных предположений осталось \ нет ";
            }
        }
        if (guesses > 0)
            cout << " Это правильно!\ нет ";
        else
            cout << " К сожалению, это слово " << target << ".\ нет ";
 
        cout << " Будете ли вы играть еще?< да / нет > ";
        
        play1=getchar(); cout<<play1;
        play2=getchar(); cout<<play2;
 
        play1 = tolower(play1);
        play2 = tolower(play2);
    }
 
    cout << " до свидания \ нет ";
 
 system("pause");
    return 0; 
}
Yandex
Объявления
13.05.2013, 19:52     Игра Угадай Слово ошибка в коде
Ответ Создать тему
Опции темы

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