C 如何存储max(变量)的值?

C 如何存储max(变量)的值?,c,binary-search,C,Binary Search,当我运行它时,在按下第二个“n”后,它不符合逻辑,原因是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"); p

当我运行它时,在按下第二个“n”后,它不符合逻辑,原因是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;
     }
"

max的值将为0

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

 }
 i++;
}

}

程序具有未定义的行为,因为处于循环状态

while(i<max)
{
还调用未定义的行为,因为在调用
scanf
尝试读取字符串时,传递了一个字符的地址。例如,如果用户输入
'n'
scanf将两个字符
'n'
'\0
'

改用

scanf(" %c",&ans);

在转换说明符>代码> %c>代码>之前注意空白。< /P>


不要使用goto语句。而是使用循环。

程序具有未定义的行为,因为在循环条件下使用了未初始化的变量i。while(i而不是scanf(“%s”),&ans);使用scanf(“%c”,&ans);其中转换说明符前有一个空格。%c(不是%s)
while(i<max)
{
 scanf("%s",&ans);
scanf(" %c",&ans);