Ответ Кайла очень хорош (как я вижу), но я могу заметить несколько проблем, надеюсь, это поможет вам в дальнейших случаях.
- Ты всегда побеждаешь, и я знаю, что это хорошо, но держу пари, что это не ожидаемое поведение:
while(true) // This will always happen, because true is always evaluated as true
{
printf("Won\n\n");
printf("Play again? y/n: ");
break;
}
while(false) //This will never happen, since false is always evaluated as false
{
printf("Lost\n\n");
printf("Play again? y/n: ");
break;
}
Я думаю, что вы хотели проверить результат play_game()
. Поэтому добавьте еще одну переменную и проверьте ее:
bool win;
win = play_game();
while (win == true)
...
while (win == false)
...
- Зачем использовать цикл while? в любом случае вы нарушаете его в первой итерации
if(win == true)
{
printf("Won\n\n");
}
else
{
printf("Lost\n\n");
}
printf("Play again? y/n: ");
- Игра будет выполняться не более двух раз, потому что у вас нет цикла, который зависит от ответа, а только оператор if, который оценивается только один раз:
if(v=getchar() == 'y') //This is the second time the code runs, after that? nada.
{
point =0; /* reset point var */
play_game();
}
else if(v=getchar() == 'n') // Why adding this check? you're going out anyway after the if-else
exit(1);
EDIT
Когда вы используете цикл while, вы делаете следующее:
Хотя (некоторое выражение в скобках) истинно, выполните код в блоке {..}, а затем снова проверьте выражение в скобках.
Если вы пишете while(true)
, вы на самом деле пишете while true is true, execute the code in the block
. И это всегда будет происходить.
Если вы пишете while(false)
, вы на самом деле пишете while false is true, execute the code in the block
. и эта ложь никогда не верна, тогда она никогда не выполнит код в блоке.
Если вы хотите получить реальное условие здесь, вы можете использовать while(play_game())
. это похоже на запись while the returned value from the function play_game is true, execute the code in the block
, и тогда код будет выполняться только тогда, когда функция play_game вернет true (что указывает на победу в игре).
Есть много хороших обучающих программ по C, начинайте с здесь или здесь