2016-07-15 5 views
-2

Я сделал этот код, чтобы предложить пользователю номер, который не равен 5, в противном случае игра заканчивается. Если пользователь вводит число 10 раз, он должен показывать выигрышное сообщение. Тем не менее, я нахожусь в попытке не показывать выигрышное сообщение, если пользователь вводит 5. Что я мог сделать, чтобы печатать только сообщение об ошибке, когда пользователь вводит 5, а не оба? Кроме того, есть ли способ сделать мой код проще?Для трюков петли

for (int i = 0; i < 10; i++) 
{ 
    cout << i+1 << "- enter a number: "; 
    cin >> number; 

    if (number == 5) 
    { cout << "you were not supposed to enter 5!\n"; // Failure message 
     break; 
    } 
} 

cout << "Wow, you're more patient than I am, you win.\n"; // winner message 
+0

'bool did_user_enter_5 = false;' ... 'if (number == 5) {did_user_enter_5 = true; ...} '...' if (! did_user_enter_5) cout << "Wow, ..." - это один из способов, который работает. Вы также можете использовать 'goto' вместо' break' для перехода после получения выигрышного сообщения напечатаны или вы можете сделать это в другую функцию и изменить 'break' на' return; ' – immibis

+1

Вам нужно установить какой-то флаг (переменная bool) в true, если пользователь вводит 5, а затем проверяет, что перед тем, как распечатать выигрыш сообщение – NathanOliver

+0

Я очень изумлен, насколько быстро все ответили на это! Большое вам спасибо за советы. Никогда не слышал о булевых флагах раньше. Спасибо вам большое :) –

ответ

3

Одним из способов было бы расширить сферу, если i и проверьте, что:

int i = 0; 
for (; i < 10; i++) 
{ 
    cout << i+1 << "- enter a number: "; 
    cin >> number; 

    if (number == 5) 
    { 
     cout << "You were not supposed to enter 5!\n"; // Failure message 
     break; 
    } 
} 

if (i == 10) 
{ 
    cout << "Wow, you're more patient than I am, you win.\n"; // winner message 
} 

Еще бы использовать логический флаг:

bool win = true; 
for (int i = 0; i < 10; i++) 
{ 
    cout << i+1 << "- enter a number: "; 
    cin >> number; 

    if (number == 5) 
    { 
     cout << "You were not supposed to enter 5!\n"; // Failure message 
     win = false; 
     break; 
    } 
} 

if (win) 
{ 
    cout << "Wow, you're more patient than I am, you win.\n"; // winner message 
} 
+0

О, вау! Я думаю, что это мой первый раз, когда я вижу булевский флаг! Это потрясающе! –

0

Простой логический флаг исправит твоя проблема.

bool enteredFive = false; 
for (int i = 0; i < 10; i++) 
{ 
    cout << i + 1 << "- enter a number: "; 
    cin >> number; 

    if (number == 5) 
    { 
     cout << "You were not supposed to enter 5!" << endl; 
     enteredFive = true; 
     break; 
    } 
} 

if (!enteredFive) 
    cout << "Wow, you're more patient then I am, you win!" << endl; 
1

Цикл завершается для одной из 2 причин: пользователь ввел 10 нон-5, либо они вошли в 5, который разрушает петлю. Поэтому просто проверьте, что значение number после цикла, чтобы отличить их.

1

Вы можете поставить весь for цикл в функции, которая возвращает булево/INT , а затем вызвать функцию в if

как:

if(game()==true) 
    cout << "Wow, you're more patient then I am, you win.\n"; // winner message 
else 
    cout << "you were not supposed to enter 5!\n"; // Failure message 

Положив вещи в функции домашнего задания :)

Совет: Заменить couts с возвратов внутри функции;)

+0

'if (x == true)' является домашним животным Почему бы не просто 'if (game())? –

+0

Конечно вы тоже можете это сделать, не хотели предполагать, что вы это знаете, это просто более очевидно :) –

1

Вы необходимо использовать флаг, один из возможных решений являются (что также делает ваш код проще):

bool win = true; 
for (int i = 0; i < 10 && win; i++) 
{ 
    cout << i+1 << "- enter a number: "; 
    cin >> number; 

    win = number != 5; 
} 
if(win) 
    cout << "Wow, you're more patient then I am, you win.\n"; // winner message 
else 
    cout << "you were not supposed to enter 5!\n"; // Failure message 
0

Используйте переменный флаг [Здесь isFive], чтобы проверить, является ли когда-либо введен пользователем 5 и печать на основе этого решения.

bool isFive = false; 
for (int i = 0; i < 10; i++) 
{ 
    cout << i+1 << "- enter a number: "; 
    cin >> number; 

    if (number == 5) 
    { 
     isFive = true; 
     cout << "you were not supposed to enter 5!\n"; // Failure message 
     break; 
    } 
} 
if(!isFive) 
    cout << "Wow, you're more patient then I am, you win.\n"; // winner message 
Смежные вопросы