2014-02-10 3 views
0

Вот мой код. Это простой номер игры, в котором пользователь пытается угадать случайное число, однако я не могу понять, почему он никогда не побеждает ... Есть две вещи, которые возникают у меня проблемы решения 1) пользователь никогда не угадает правильный номер 2) Я хочу, чтобы иметь крышку 3 попыток угадывания, хотя я не могу показаться, поймать то, что я с видомПростая программа для случайных чисел

// C_program_random_number_game 

#include<stdio.h> 
#include<time.h> 
#include <stdlib.h> 




int main(){ 

srand(time(NULL)); 
int num1,x; 
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 5 : "); 
    scanf("%d",&num1); 
    do{ 
    for(x=1; x<=3; x++){ 

    if(num1 < r){ 
     printf("\nClose! try a little higher... : "); 
    } 
    else if (num1 > r){ 
     printf("\nClose! try a little lower...: "); 
    } 
    scanf("%d",&num1); 
    } 
    }while(num1!=r || x <= 3); 
    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; 
} 
+0

Вы помещаете '(num1 == r)' in '(num1! = R)' .... – moeCake

+0

Im confused ... Я переключаю их? – Djeter277

+0

хорошо, это просто не имеет смысла, потому что цикл while гарантирует, что num1! = R, а затем внутри вы проверите, будет ли он равен .., который, таким образом, никогда не будет истинным – ASKASK

ответ

3

Одна определенная проблема заключается в том, что формат спецификатор неверно :

scanf("&d",&num1); 

должно быть:

scanf("%d",&num1); 

Кроме того, последние 2 условия в вашем цикле while никогда не будут оцениваться, так как он не войдет в цикл, если угадание равно случайному числу. Используйте петлю do-while вместо этого, чтобы контур бесконечно и break из него в соответствии с пользовательским вводом. Не забудьте взять пользовательский ввод для догадки в цикле.

+0

Благодарим вас за помощь! Я изменил его на то, хотя, похоже, он все еще не достигает этого, судя по условиям HIGH или LOW ... любая идея, почему? – Djeter277

+0

@ Djeter277 Используйте бесконечный цикл, то есть 'do {} while (1);'. 'break' из него в соответствии с вашими потребностями. – devnull

+0

@ Djeter277 Я знаю, почему, как я объясняю в своем ответе – ASKASK

1

Существуют различные недостатки, вот код, который вы ищете:

while(num1 != r){ 
    if(num1 < r){ 
     printf("higher... : "); 
    } 
    else{ 
     printf("lower...: "); 
    } 
    scanf("%d",&num1); 
} 
printf("Winner! >> you entered %d and the computer generated %d! \n",num1, r); 
printf("Would you like to play again? (y or n) : "); 
scanf("%c",&replay); 

Как я отметил в комментарии выше, ранее, в то время цикла, там никогда не будет времени, когда num1 = = r и, следовательно, утверждение if внутри никогда не будет истинным. Теперь цикл jsut просто останавливается после того, как он достигнет числа.

+0

Эй, спасибо большое! посмотрел бы, что всю ночь haha..THANKS YOU! – Djeter277

+0

я могу получить галочку? – ASKASK

+0

Отметки для чего? – Djeter277

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