Игра случайных чисел C
Игра отлично работает в первый раз, хотя; во второй раз это дает только две жизни... Я пытался изменить количество жизней, но все еще не могу понять, что я делаю неправильно.
// C_program_random_number_game
#include<stdio.h>
#include<time.h>
#include <stdlib.h>
int main()
{
srand(time(NULL));
int num1,x = 0;
char game, cont, replay;
printf("Would you like to play a game? : ");
scanf("%c",&game);
if (game == 'y' || game == 'Y')
{
printf("\nThe rules are simple. You have have 5 tries to guess the computers number. \n \n If you succeed you win the game, if you dont you lose the game. Good luck!");
do
{
int r = rand()%5 +1;
printf("\n\nEnter a number between 1 and 5 : ");
scanf("\n%d",&num1);
x++;
if(num1 > 0 && num1 < 5)
{
do
{
if(num1 < r)
{
printf("\nClose! try a little higher... : ");
x++;
}
else if (num1 > r)
{
printf("\nClose! try a little lower...: ");
x++;
}
scanf("%d",&num1);
}while(num1!=r && x <3);
if(num1 == r)
{
printf("\nWinner! >> you entered %d and the computer generated %d! \n",num1, r);
}
else if(num1 != r)
{
printf("\nBetter luck next time!");
}
printf("\n\nWould you like to play again? (y or n) : ");
scanf("\n%c",&replay);
}
else
{
printf("Sorry! Try again : ");
scanf("%d",&num1);
}
}while(replay == 'y'|| replay == 'Y');
}
else if (game == 'n' || game == 'N')
{
printf("Okay, maybe next time! ");
}
else
{
printf("Sorry, invalid data! ");
}
return 0;
}
2 ответа
Есть много проблем с вашим кодом (большинство из них незначительны с точки зрения программирования). Большинство ошибок - опечатки в том, что вы хотите сделать с помощью этого вопроса, и в том, что вы печатаете f().
Таким образом, этот код будет случайным образом между 1-25, будет принимать входные данные любого допустимого целого числа, проверять, соответствовали ли вы ему, и дает только 5 попыток. (Я не добавил проверку ошибок, чтобы убедиться, что ввод между 1-25. Это, вероятно, следует добавить.)
Я прокомментировал мой код ниже со всеми моими изменениями и пошел тем же путем, что и в printf().
Примечание: см. Мои комментарии выше для объяснения моих изменений, так как я уже указал на них. Я также отформатировал его так, чтобы его было немного легче читать.
Примечание 2: Я сделал это быстро с помощью онлайн-компилятора. Если вы обнаружите, что с этим что-то не так или не работает, как вам хотелось бы, просто прокомментируйте ниже, и я рассмотрю это
// C_program_random_number_game
#include<stdio.h>
#include<time.h>
#include <stdlib.h>
int main()
{
srand(time(NULL));
int num1,x = 0;
char game, cont, replay;
printf("Would you like to play a game? : ");
scanf("%c",&game);
if (game == 'y' || game == 'Y')
{
printf("\nThe rules are simple. You have have 5 tries to guess the computers number. \n \n If you succeed you win the game, if you dont you lose the game. Good luck!");
do
{
int r = rand()%25 +1;
printf("\n\nEnter a number between 1 and 25 : ");
scanf("%d",&num1);
do
{
printf("r = %d\n", r);
if(num1 < r)
{
printf("\nClose! try a little higher... : ");
x++; //Increment x if wrong guess
}
else if (num1 > r)
{
printf("\nClose! try a little lower...: ");
x++; //Increment x if wrong guess
}
scanf("%d",&num1);
}while(num1!=r && x < 5); //If x is 5 or more, they ran out of guesses (also, you want an && not an ||)
if(num1 == r) //Only print "winner" if they won!
{
printf("\nWinner! >> you entered %d and the computer generated %d! \n",num1, r);
}
printf("\nWould you like to play again? (y or n) : ");
scanf("\n%c",&replay);
}while(replay == 'y'|| replay == 'Y');
}
printf("Thanks for playing! ");
if (game == 'n' || game == 'N')
{
printf("Okay, maybe next time! ");
}
return 0;
}
Есть комбинация двух проблем. Во-первых, вы не выходите из цикла "for", когда число совпадает. Поэтому совпадение проверяется только при каждом третьем предположении.
Вторая проблема в этой проверке логики:
}while(num1!=r || x <= 3);
Мы видим, что это превращается в "истину", если цикл for прерывается на ранней стадии.