才学习了二分法,不知道哪里出问题了

打印Input the number to search:以后没等输入就自动结束运行了

#include <stdio.h>
#include <stdlib.h>
#define SIZE 20
int Init(int * nums, int * size);
void Ask(int * target);
int search(int * nums, int size, int target);


int main()
{
    int * nums_1, size_1, target_1=0;
    printf("%d\n",Init(nums_1,&size_1));
    Ask(&target_1);
    search(nums_1, size_1, target_1);
    

}

int Init(int * nums, int * size){
   int i = 0, status = 0,num; 
   nums = (int*)malloc(sizeof(int) * SIZE);
   if(nums == NULL)
        status = 1;
    printf("Input numbers in the array(<=20),you must input smaller numbers first:(press q to quit)");
    while(scanf("%d",&num) != EOF){
        nums[i] = num;
        i++;
        if(i==20)
            break;
    }
    *size = i;
    return status;

}

void Ask(int * target){
    int num;
    printf("Input the number to search:");
    scanf("%d", &num);
    *target = num;

}
int search(int * nums, int size, int target){
    int left = 0, right = size-1, middle;
    middle = left + (right - left) / 2; //防止溢出
    while(right >= left){
        if(target == nums[middle]){
             printf("%d", middle);
            return 0;
        }
        else if(target < nums[middle])
            right = middle - 1;
        else if(target > nums[middle])
            left = middle + 1;
    }

    printf("%d",right+1);
    return 0;


}


你这代码难看懂啊,二分查找

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

int serch2(int t[],int key,int b,int n)
{
    int mid,e=n-1;
    while(b<=e)
    {
        mid=(b+e)/2;
        if(t[mid]==key)
        {
            return mid;
        }
        else if(t[mid]<key)
        {
            b=mid;
        }
        else
        {
            e=mid+1;
        }
    }
    return -1;
}
void p(int t[],int b,int n)
{
    for(int j=b; j<n; j++)
        printf("%d ",t[j]);
    printf("\n");
}
int main()
{
    int n,j,key;
    printf("输入数组大小:");
    scanf("%d",&n);
    int t[n];
    printf("输入数组:");
    for(j=0; j<n; j++)
        scanf("%d",&t[j]);
    printf("输入查找的数:");
    scanf("%d",&key);
    printf("search %d\n",key);
    int p2=serch2(t,key,0,n);

    if(p2==-1) printf("not found!\n");
    else printf("compleat,p2=%d,key=%d\n",p2,t[p2]);

    return 0;
}

Init()函数的第一个参数应该是int **nums,因为你要返回分配数组的首地址,得用指针的指针,否者main函数里的指针nums_1不会被修改。或者你把数组的首地址当作返回值返回。