2014-01-31 10 views
0

Итак, эта программа просит пользователя ввести нижнюю и верхнюю границы, и объект предназначен для того, чтобы программа угадывала число, основанное на системе обратной связи (-1,0,1). Все работает и компилирует его каждый раз, когда я даю ему обратную связь, он удваивает число, например, выводят результат. Любая помощь будет в значительной степени быть оценена, так как им все еще учусь всегда открыты для предложений благодаряC Угадающая игра Верхняя и нижняя граница

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

int main(void) { 

int low; 
int high; 
int Guess; 
int feedback; 


printf("Enter Upper bound number: "); 
scanf("%d", &high); 

printf("Enter lower bound number: "); 
scanf("%d", &low); 

Guess = (high - low)/2+low; 


while (feedback != 0) 
{ 

printf("my guess is: %d ", Guess); 

printf("What do you think?"); 
scanf("%d", &feedback); 

//guess was too low 
if (feedback == -1) 
{ 
Guess = Guess+1; 
printf("my guess is: %d ", Guess); 

printf("What do you think?"); 
scanf("%d", &feedback); 
} 

//guess was too high 
else if (feedback == 1) 
{ 
Guess = Guess-1; 
printf("my guess is: %d ", Guess); 

printf("What do you think?"); 
scanf("%d", &feedback); 
} 

else if (feedback == 0) 
{ 
printf("I win!\n"); 
} 
} 

return 0; 
} 

Выход:

Enter a upper bound number: 40 
Enter a lower bound number: 20 
my guess is: 30 what do you think? -1 
my guess is: 31 what do you think? -1 
my guess is: 31 what do you think? -1 
my guess is: 32 what do you think? -1 
my guess is: 32 what do you think? -1 
my guess is: 33 what do you think? -1 
my guess is: 33 what do you think? -1 
my guess is: 34 what do you think? -1 
my guess is: 34 what do you think? -1 
my guess is: 35 what do you think? 0 
I win! 

ответ

1

Предлагаемые изменения в разрез`ать остающийся диапазон после каждого guesss.

// Initialize 
int feedback = !0; // @Digital_Reality 

// Guess = (high - low)/2+low; 
Guess = (high + low)/2; 

//guess was too low 
if (feedback == -1) { 
    // Guess = Guess+1; 
    low = Guess+1; 
    Guess = (high + low)/2; 
    .... 

//guess was too high 
else if (feedback == 1) { 
    // Guess = Guess-1; 
    high = Guess-1; 
    Guess = (high + low)/2; 
    .... 
+0

Вы быстро! .. написать комментарий на обратной связи = 0 :) –

0

Chux is correct. Если вы не хотите, чтобы ваша программа повторялась, вы просто вынимаете printf и scanf в операторы if или привносите print/scanf внутри цикла while вовне.

1

Возьмите ваш printfs перед тем while loop. В любом случае у вас есть те, в if

printf("my guess is: %d ", Guess); 
printf("What do you think?"); 
scanf("%d", &feedback); 
while (feedback != 0) 
{ 
    //guess was too low 
    if (feedback == -1) 
    { 

PS: Инициализировать feedback с 1 или другой анолита номер.

0

Вы получаете двойной выход из-за своей петли. Вы тестируете ввод, затем в своем «if» вы печатаете свое предположение и принимаете вход снова. Как только вход принят, цикл перезапускает и печатает текущее значение угадывания и запросы ввода. В вашем «if» просто измените значение угадывания, и пусть цикл продолжит, а не подскажет.

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