二分法求解过程中if else循环出问题

最近在看b站上的视频学习c语言,他在函数这一节中有一个关于二分法求下标的题,我跟着敲了一遍缺怎么也做不出来,代码如下
#include<stdio.h>
int chazhao(int arr[], int sz, int k)
{
int left = 0;
int right = sz - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] < k)
left = mid + 1;
else if (arr[mid] > k)
right = mid - 1;
else (arr[mid] = k)
return mid; //提示缺少;
}
return -1;
}
int main()
{
int arr[] = { 0,1,2,3,4,5,6,7,8,9,10 }, sz, k;
sz = sizeof(arr) / sizeof(arr[0]);
printf("请输入要查找的数字\n");
scanf_s("%d", &k);
int x=chazhao(arr, sz, k);
if (x = -1)
printf("没有找到该下标\n");
else
printf("该数字的下标是%d\n", x);
return 0;
} //最终结果只会输出没有该下标

if (x = -1)
printf("没有找到该下标\n");
if的=改成==就行了

if里面用 == ,不要用 =

那个主函数里的第六行那个if里吧一个等于号改成两个就丢了
另外附赠一个简单易懂的二分程序

#include<stdio.h>
#include<iostream>
using namespace std;
int n;//个数 
int x;//查找的数 
int a[10000005];//字符串     
int efcz(int l,int r,int x)
{
    int mid;
    while(l<=r)
    {
          mid=(l+r)/2;
          if(x<a[mid])
          {
              r=mid-1;
         }
          else if(x==a[mid])
          {
            return mid;
        }
        else if(a[mid]<x)
          {
              l=mid+1;
          }
    }
    return -1;
} 
int main(){
    int p;
    cin>>n; 
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    cin>>x;
    p=efcz(1,n,x);
    cout<<p;
    return 0;
}