Нужна помощь в отладке простой консольной игры - PullRequest
0 голосов
/ 23 ноября 2010

Мой цикл while внутри main не работает должным образом. как я его настроил, он не запускается после ввода у. Может ли кто-нибудь помочь мне с этим, пожалуйста

#include <stdio.h>
#pragma warning(disable:4996)
#include <stdlib.h>
#include <time.h>

void play_game();

int main()
{
 char resp;

 printf("Welcome to the game of Guess It!\n\n");
 printf("I will choose a number between 1 and 100.\n");
 printf("You will try and guess that number.If you guess wrong, I\n");
 printf("will tell you if you guessed too high or too low.\n\n");
 printf("You have six tries to guess the number.\n\n");

 play_game();

 printf("Would you like to play again? (y/n)\n");
 scanf("%c%*c",&resp);

 while((resp=='y') || (resp=='Y'))
 {
  play_game();

  printf("Would you like to play again?\n");
  scanf("%c%*c",&resp);

 }

 printf("Goodbye it was fun.\n");
 printf("Hope to play Guess It with you again soon.\n");

 return 0;
}
void play_game()
{
 int num;
 int guess = 0;
 int count = 1;
 count =1;

 srand((unsigned int)time(NULL));
 num = rand() % 100 +1;

 printf("Ok I am thinking of a number. Try to guess it.\n");
 printf("Your guess?\n");
 scanf("%d",&guess);

 while(guess != num && count != 6)
 {
  if(guess > 100 || guess < 1)
  {
   printf("Illegal guess. Your guess must be between 1 and 100.\n");
   printf("Guess again\n");
   scanf("%d", &guess);
   count ++;
  } 
  else if(guess > num)
   {
    printf("Too High! Guess again\n");
    scanf("%d", &guess);
    count ++;
   }
   else if(guess < num)
   {
    printf("Too Low! Guess again\n");
    scanf("%d", &guess);
    count ++;
   }
 }
  if (guess == num)
  {
   printf("***CORRECT***\n");
  }
  else 
   printf("Too many guesses\n");

   printf("The number is %d\n\n", num);
}

Ответы [ 2 ]

0 голосов
/ 23 марта 2014

Вместо этого попробуйте изменить "%c%*c" на "%c\n".

scanf () сканирует клавиатуру.И я предполагаю, что вы хотите остановить сканирование после ввода нажмите.Следовательно, символ новой строки char "\ n", соответствует enterpress.

Вы также можете использовать do while вместо вашего while.Таким образом, вы должны написать дублированный код только один раз.Например:

 do
 {
  play_game();

  printf("Would you like to play again?\n");
  scanf("%c%*c",&resp);

 } while((resp=='y') || (resp=='Y'))

Таким образом, код внутри вашего du, в то время как тело выполняется перед проверкой условия.

0 голосов
/ 23 ноября 2010

Вероятно, вы можете добавить "% * c" в свой scanf внутри функции play_game, чтобы также удалить символ новой строки, который вы можете вводить после ввода числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...