как мне сохранить значение max (переменная)? - PullRequest
0 голосов
/ 17 февраля 2020

когда я запускаю его и после нажатия второй 'n' он не удовлетворяет логике c, и причина в том, что max возвращает 0 (проверьте последний printf), так как я могу сохранить новое значение в max?

//A GAME FOR GUESSING YOUR NUMBER BY USING THE BINARY SEARCH ALGORITHM
#include <stdio.h>
int main()
{

int min=1;
int max,z,i;
char ans;

printf("\t\t\t***GUESSING GAME***\n");
printf("Let put a rang, the min number is 1, the max is? \n");
scanf("%d",&max);//--> 15

z=(min+max)/2; //the average


while(i<max)
{
 dis:
 printf("The number is %d? (y/n)\n",z); //--> z =( min(1) + max(15) ) / 2 = 8
 scanf("%s",&ans);

 if(ans=='n')
 {

     printf("Is %d too high? (y/n)\n",z);
     scanf("%s",&ans);
     //new range [1,8]
     if(ans=='y')
     {
         z=(min+z)/2;  //--> z =( min(1) + z(8) ) / 2 = 4
         goto dis;
     }

ЭТО "

     //new range [8,15]
     if(ans=='n')
     {
         z=(z+max)/2; //it should be z =( z(8) + max(15) ) / 2 = 11 
         goto dis;
     }

"

 }
 if(ans=='y')
 {
     printf("\\BINGO/");

значение max будет 0

    // printf("max %d z %d",max,z);

 }
 i++;
}

}

1 Ответ

1 голос
/ 17 февраля 2020

Программа имеет неопределенное поведение, потому что в состоянии l oop

while(i<max)
{

используется неинициализированная переменная i.

Этот вызов

 scanf("%s",&ans);

также вызывает неопределенное поведение, поскольку передается адрес одного символа, в то время как вызов scanf пытается прочитать строку. Например, если пользователь вводит 'n' scanf, записать в адресную память два символа 'n' и '\0 '.

Вместо этого использовать

scanf(" %c",&ans);

Обратите внимание на пробел перед спецификатор преобразования %c.

и не использовать оператор goto. Вместо этого используйте al oop.

...