两个地方的问题,第11行取数组长度错误的,这里得到sz=100,第17行取 mid 的值算法错误,修改如下,供参考:
#include <stdio.h>
int main()
{
int s[100],sz=0; //修改
for (int i=0;i<5;sz++,i++)//修改
scanf("%d",&s[i]);
int n;
scanf("%d",&n);
//int sz=sizeof(s)/sizeof(s[0]); //修改
int left = 0;
int right = sz - 1;
while (left <= right)
{
int mid = left + (right - left)/2;
//int mid = (left + (right + left)/2);//修改
if (s[mid] == n)
{
printf("%d %d",n , mid+1);
break;
}
else if(s[mid]>n)
{
left = mid + 1;
}
else if(s[mid]<n)
{
right = mid -1;
}
}
if (left > right)
printf("找不到");
return 0;
}
for循环结束后,要用getchar读入换行符
否则后面的scanf无法得到正确的值
学编程要会调试,再遇到类似的问题你首先要做的就是打印数组和n的值,看看到底里面是个什么东西
mid算错了,mid = left + (right - left) / 2