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

Бесконечный цикл (как избежать?) - C++

Восстановить пароль Регистрация
 
vortexx1
 Аватар для vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
12.06.2011, 00:49     Бесконечный цикл (как избежать?) #1
Программа должна принимать только одно из трёх значений переменной 'destiny'. Если вводят любое другое значение, программа должна повторять вопрос до тех пор, пока не введут значение так, как следует.

Пробовал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    do
    {
        if (destiny == 'e')     // если выбран легкий уровень сложности
        {
           capital = 10000;     // капитал = 10 000
           cout << "You have chosen easy game and your start capital is $" << capital << ".";
        }
        else if (destiny == 'm') // если выбран средний уровень сложности
        {
           capital = 7500;       // капитал = 7 500
           cout << "You have chosen middle game and your start capital is $" << capital << ".";
        }
        else if (destiny == 'h') // если выбран сложный уровень сложности
        {
           capital = 5000;       // капитал = 5 000
           cout << "You have chosen hard game and your start capital is $" << capital << ".";
        }
        else                     // если ввели левое значение
            cout << "Error. Sorry.";    // сообщение об ошибке
    } while (destiny != 'e' || destiny != 'm' || destiny != 'h');
но выдает бесконечный цикл.

Как сделать правильно?

Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.06.2011, 00:55     Бесконечный цикл (как избежать?) #2
В условии цикла вместо || поставьте && везде.
vortexx1
 Аватар для vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
12.06.2011, 00:58  [ТС]     Бесконечный цикл (как избежать?) #3
Пробовал.

Если вводить нужные значения, то работает как предусмотрено, а вот если ввести что-то левое, то бесконечно зацикливает "Error. Sorry.".
YsWaY
Сообщений: n/a
12.06.2011, 01:01     Бесконечный цикл (как избежать?) #4
лучше использовать оператор case, чем else if мне кажется, т.е. swith
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.06.2011, 01:06     Бесконечный цикл (как избежать?) #5
vortexx1, ну так вы ввод значения внутри цикла сделайте.
vortexx1
 Аватар для vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
12.06.2011, 01:13  [ТС]     Бесконечный цикл (как избежать?) #6
YsWaY, если вы имели ввиду это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    do
    {
         switch (destiny)
         {
            case 'e':
                 capital = 10000;
                 cout << "Easy mode. Your capital is $" << capital << ".";
                 break;
                 
            case 'm':
                 capital = 7500;   
                 cout << "Middle mode. Your capital is $" << capital << ".";
                 break;
                 
            case 'h':
                 capital = 5000;
                 cout << "Hard mode. Your capital is $" << capital << ".";
                 break;
                 
            default:
                 cout << "Error. Enter correct value, please.";
         }
    } while (destiny != 'e' && destiny != 'm' && destiny != 'h');
... то оно не помогло.

silent_1991, простите, не понимаю, что вы подразумеваете. Можете показать?
Спасибо.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.06.2011, 01:14     Бесконечный цикл (как избежать?) #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
do
    {
        cin >> destiny;
 
        if (destiny == 'e')     // если выбран легкий уровень сложности
        {
           capital = 10000;     // капитал = 10 000
           cout << "You have chosen easy game and your start capital is $" << capital << ".";
        }
        else if (destiny == 'm') // если выбран средний уровень сложности
        {
           capital = 7500;       // капитал = 7 500
           cout << "You have chosen middle game and your start capital is $" << capital << ".";
        }
        else if (destiny == 'h') // если выбран сложный уровень сложности
        {
           capital = 5000;       // капитал = 5 000
           cout << "You have chosen hard game and your start capital is $" << capital << ".";
        }
        else                     // если ввели левое значение
            cout << "Error. Sorry.";    // сообщение об ошибке
        } while (destiny != 'e' || destiny != 'm' || destiny != 'h');
vortexx1
 Аватар для vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
12.06.2011, 01:15  [ТС]     Бесконечный цикл (как избежать?) #8
Аааа, понял.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    do
    {
        cin >> destiny;
        cout << endl;
            
        if (destiny == 'e')     // если выбран легкий уровень сложности
        {
           capital = 10000;     // капитал = 10 000
           cout << "You have chosen easy game and your start capital is $" << capital << ".";
        }
        else if (destiny == 'm') // если выбран средний уровень сложности
        {
           capital = 7500;       // капитал = 7 500
           cout << "You have chosen middle game and your start capital is $" << capital << ".";
        }
        else if (destiny == 'h') // если выбран сложный уровень сложности
        {
           capital = 5000;       // капитал = 5 000
           cout << "You have chosen hard game and your start capital is $" << capital << ".";
        }
        else                     // если ввели левое значение
            cout << "Error. Sorry.";    // сообщение об ошибке
        } while (destiny != 'e' || destiny != 'm' || destiny != 'h');
Работает. Спасибо большое.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2011, 05:56     Бесконечный цикл (как избежать?)
Еще ссылки по теме:

как создать бесконечный цикл C++
C++ как засунуть условно-бесконечный цикл
Как создать бесконечный цикл C++

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

Или воспользуйтесь поиском по форуму:
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
12.06.2011, 05:56     Бесконечный цикл (как избежать?) #9
Понимаю что уже на тему ответили, но все таки
ТС, используй лучше

switch (destiny) {
case 'h':
//.....
break;
case 'e':
//.....
break;
default:
//.....
}

будет лучше
Yandex
Объявления
12.06.2011, 05:56     Бесконечный цикл (как избежать?)
Ответ Создать тему
Опции темы

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