2014-10-07 2 views
-4

Я пишу программу для блэкджека для кубиков из Лаборатории, и для этого я использую команду break. В приведенном ниже коде, если игрок перевернул 21 с первой руки, он должен вырваться из цикла while и перейти к коду ниже, но этого не происходит. Я знаю, что он проходит через «если», потому что он печатает «Ты разорился! Снова удача!» но оператор break не работает. Что я делаю не так??Команда Break в C работает неправильно?

while(1) { //Loop for each round 
    rollDie(&roll1, &roll2); 
    printf("Your first roll is %d and %d \n", roll1, roll2); 
    count = (roll1 + roll2)*2; 
    check = count; 
    printf("This totals to %d. Doubling this we get %d as your current hand.\n", roll1+roll2, count); 

    if(count > 21) { 
     printf("You busted! Bad luck!"); 
     break; 
    } 

    while(flag == 1) { 
     playerMove = getPlayerMove(); 
     if(playerMove == 'H' || playerMove == 'h') 
      flag = hitMe(&count, &check); 

     if(flag == 2) 
      break; 
     else 
      flag = 0; 
    } 

    printf("It is now the dealers turn to roll."); 
    flag = dealer(count, &total); 

    if(total > count) 
     printf("The dealers %d beats your %d", total, count); 
    else if (total == count) { 
     printf("It's a tie!"); 
    } 
    else 
     printf("Your %d beats the dealers %d", count, total); 

    break; 
} 
+0

Вы могли бы дать весь результат? это напечатало 'You busted! «Не повезло!», Тогда «Теперь дилеры поворачиваются к рулону»? – HuStmpHrrr

+0

Последовала функция playerMove внутри следующего цикла while, который спрашивает, хочет ли игрок Hit или Stand. Я никогда не входил в ответ за это, я просто прекратил программу, потому что она никогда не должна была там D: – bibzuda7

+0

Это C не python, вы должны добавить фигурные скобки там, где это необходимо –

ответ

5

Отпечаток неправильный. Это может свидетельствовать о том, что ваш код не делает то, что вы думаете. «Еще» идет вместе с «если» непосредственно перед этим, а не с тем, что вы думаете.

+0

в соответствии с описанием ОП, если 'вы разорились! Не повезло! »Напечатано, петля выхода нарушена уже. – HuStmpHrrr

+0

О, я вижу, где я там перепутался. Но это не должно повлиять на факт перерыва; не вырваться из цикла while, как это должно быть в этом случае? – bibzuda7

1
if(playerMove == 'H' || playerMove == 'h') 
     flag = hitMe(&count, &check); 
     if(flag == 2) 
      break; 
    else 
     flag = 0; 

В этом проблема. еще не считается еще в паре с первым, если

if(playerMove == 'H' || playerMove == 'h') 

Он работает в паре с последним, если

if(flag == 2) 

Решение: Используйте {} разделители, чтобы определить, откуда ваши тела, если и еще начинают и где они заканчиваются. Его хорошая практика. Теперь вы знаете, почему.

+0

Но разве мое понимание перерыва не так, оно никогда не должно получиться так далеко? Я согласен с тем, что это ошибка, если в коде, который я буду исправлять, это далеко не так, но не должен перекодировать код; пропустить? – bibzuda7

+0

Если управление достигает инструкции break (в этом случае, если флаг == 2), тогда управление выйдет из цикла, но если это условие не будет истинным, цикл продолжит работу. –

+1

@ MurtazaZaidi вы не поняли OP. проблема в первом перерыве, вы говорите о втором. – HuStmpHrrr

Смежные вопросы