Как я могу выйти из цикла do-while?

У меня есть эти блоки кодов, которые принадлежат игре вычитания NIM. Я хотел бы реализовать то, что пользователь сможет играть в игру столько, сколько он / она хочет. Просто, если пользователь введет 999, программа выйдет, иначе пользователь будет играть, пока не введет 999. Вот мой блок кодов. Я не уверен, что совершил логическую ошибку или мне нужно добавить какой-то конкретный код выхода. Спасибо за ваше время и внимание.

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{

int total, n;
while(true){
cout << "Welcome to NIM. \nEnter 999 to quit the game!\nPick a starting total: ";
cin >> total;
if(total==999)
break;

while(true){
//pick best response and print results.
if ((total % 3) == 2)
{
total = total - 2;
cout << "I am subtracting 2." << endl;
}
else
{
total--;
cout << "I am subtracting 1." << endl;
}
cout << "New total is " << total << endl;
if (total == 0)
{
cout << "I win!" << endl;
break;
}
// Get user’s response; must be 1 or 2.
cout << "Enter num to subtract (1 or 2): ";
cin >> n;
while (n < 1 || n > 2)
{
cout << "Input must be 1 or 2." << endl;
cout << "Re-enter: ";
cin >> n;
}
total = total - n;
cout << "New total is " << total << endl;
if (total == 0)
{
cout << "You win!" << endl;
break;
}
}
}
return 0;
}

-3

Решение

Вы модифицируете total внутри петли. Просто проверить после cin>>total в начале, если total==999 а также break если trueт.е.

if(total==999)
break;

и заменить do-while цикл по while(true){}

1

Другие решения

В цикле do-while вы пытаетесь сравнить символьный литерал ‘999’ с переменной total, имеющей тип int.

}while(total!='999');

Хотя этот код действителен, его результат может быть чем-то другим, чем вы ожидаете. Значения символьных литералов с более чем одним символом определяются реализацией.
Вы должны написать

} while ( total != 999 );

Также, если игрок введет 999, вы начнете играть с ним, хотя вы должны выйти из игры.

Так что, по моему мнению, лучше использовать цикл while. Например

while ( true )
{
cout << "Welcome to NIM. \nEnter 999 to quit the game!\nPick a starting total: ";

cin >> total;

if ( total == 999 ) break;

// ...
}
0

Вы должны сделать три исправления в своем коде, чтобы сделать это правильно

сначала вы должны проверить, равен ли итог 999, а затем прервать цикл do сразу после получения суммы от пользователя.

второе — вы должны поставить такое же условие в ваш первый цикл while

и наконец — вместо while (total! = ‘999’) вы должны написать while (total! = 999), потому что оно целое

0
По вопросам рекламы [email protected]