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

Помогите разобраться с циклом while. - C++

Восстановить пароль Регистрация
 
Dmitriy1342
1 / 1 / 0
Регистрация: 07.02.2012
Сообщений: 37
15.05.2012, 16:34     Помогите разобраться с циклом while. #1
Здравствуйте. Уже долго мучаюсь с крестиками-ноликами. Наконец то подошел финал, как вдруг на самом простом запутался. Помогите разобраться. Без циклов while программа работает как часы, но с ними выполнение прекращается на приветствии. Где же ошибка?

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
int main(){
    setlocale (LC_ALL, "Russian");
 
    cout <<"Приветствуем в игре Крестики-нолики!\n";
    char reply[]= "y";
    int x_wins=0, o_wins=0, ties=0;
 
    while(reply =="y") {
    clearboard();                         //заполнение игрового поля
    char winner = play_and_get_winner();  //запуск игры, получение победителя (winner)
    print_board();                        //показать доску
    
    switch(winner){                        //счетчик побед
    case 'X':
        x_wins++;
        break;
    case 'O':
        o_wins++;
        break;
    case 'D':
        ties++;
        break;
    }
 
    cout <<"\nСтатистика побед\nИгрок Х: "<<x_wins
        <<" , Игрок О: "<<o_wins<<" Ничья: "<<ties<<"\n\n";
    cout <<"\nХотите сыграть еще раз?(y/n)";
    cin >>reply;
    
    while(reply != "y" && reply != "n"){
        cout <<"Введите правильный вариант:";
        cin >>reply;
    }
    }
            
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2012, 16:34     Помогите разобраться с циклом while.
Посмотрите здесь:

Помогите разобраться... C++
помогите решить циклом!!! C++
C++ Помогите разобраться
C++ Помогите разобраться :)
С циклом for не могу разобраться C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
15.05.2012, 16:41     Помогите разобраться с циклом while. #2
Цитата Сообщение от Dmitriy1342 Посмотреть сообщение
while(reply =="y") {
Так сравнивать С-строки нельзя (сравнение указателей на первые элементы строк), для этого есть strcmp из <cstring>:
C++
1
 while (std::strcmp(reply, "y") == 0)
Вообще, по хорошему, в С++ в качестве строк лучше использовать std::string (по крайней мере, их можно сравнивать с помощью ==).
Dmitriy1342
1 / 1 / 0
Регистрация: 07.02.2012
Сообщений: 37
15.05.2012, 16:49  [ТС]     Помогите разобраться с циклом while. #3
А что за тип string? Не помню, для чего и как он создается. Пробовал стащить его из примера, но не работало понятия не имею почему.

Попробовал вместо char reply[]= "y"; написать string reply = "y"; , компилятор выдает ошибку на строке 8...
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
15.05.2012, 16:55     Помогите разобраться с циклом while. #4
Как вариант -- "y" -- это строка. А вот 'y' -- это уже символ, и с ним вы сравнивать можете.
И вообще, зачем там строка, если вам ответят y\n? Одним символом же обойтись можно!
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
15.05.2012, 16:59     Помогите разобраться с циклом while. #5
Цитата Сообщение от Dmitriy1342 Посмотреть сообщение
А что за тип string?
Стандартный класс строк в С++.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
 
 
int main() {
    std::string reply = "y";
    
    while (reply == "y") {
        std::cout << "Hi!" << std::endl;
        std::cout << "continue? ";
        std::cin >> reply;
    }
}
Dmitriy1342
1 / 1 / 0
Регистрация: 07.02.2012
Сообщений: 37
15.05.2012, 17:06  [ТС]     Помогите разобраться с циклом while. #6
Выдает ошибку на строке 8: бинарный "==": не найден оператор, принимающий левый операнд типа "std::string" (или приемлемое преобразование отсутствует). Можете показать, как надо правильно написать? Никак не пойму, как надо.

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
int main(){
    setlocale (LC_ALL, "Russian");
 
    cout <<"Приветствуем в игре Крестики-нолики!\n";
    string reply = "y";
    int x_wins=0, o_wins=0, ties=0;
 
    while (reply=="y") {
    clearboard();                         //заполнение доски
    char winner = play_and_get_winner();  //запуск игры, получение победителя
    print_board();                        //показать доску
    
    switch(winner){
    case 'X':
        x_wins++;
        break;
    case 'O':
        o_wins++;
        break;
    case 'D':
        ties++;
        break;
    }
 
    cout <<"\nСтатистика побед\nИгрок Х: "<<x_wins
        <<" , Игрок О: "<<o_wins<<" Ничья: "<<ties<<"\n\n";
    cout <<"\nХотите сыграть еще раз?(y/n)";
    cin >>reply;
    
    while(reply !="y" && reply !="n"){
        cout <<"Введите правильный вариант:";
        cin >>reply;
    }
    }
    
    getch();
    return 0;
}
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
15.05.2012, 17:08     Помогите разобраться с циклом while. #7
Ишшо раз. Зачем там вообще строки? Там же 1 символ?
Dmitriy1342
1 / 1 / 0
Регистрация: 07.02.2012
Сообщений: 37
15.05.2012, 17:13  [ТС]     Помогите разобраться с циклом while. #8
Разве между ними есть значительная разница?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
15.05.2012, 17:15     Помогите разобраться с циклом while. #9
Что-нибудь из этого забыли?
C++
1
2
3
4
#include <iostream>
#include <string>
 
using namespace std;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2012, 17:21     Помогите разобраться с циклом while.
Еще ссылки по теме:

C++ Не могу разобраться с циклом!
Не могу разобраться с циклом C++
C++ Не могу разобраться с циклом

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

Или воспользуйтесь поиском по форуму:
Dmitriy1342
1 / 1 / 0
Регистрация: 07.02.2012
Сообщений: 37
15.05.2012, 17:21  [ТС]     Помогите разобраться с циклом while. #10
Да, забыл библиотеку string. Спасибо больше! Наконец то все работает как надо) Пойду искать информацию по искусственному интеллекту)
Yandex
Объявления
15.05.2012, 17:21     Помогите разобраться с циклом while.
Ответ Создать тему
Опции темы

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