在C语言中的break用法遇到了问题求解

关于C语言中if语句和break用法遇到的问题↓
有咩有师兄指导一下啊,请问以下代码中如果要正常执行,为什么需要else里面的break呢。
如果没有break,当输入了一个数组中存在的scanf的值,执行代码后它会一直等待;当输入了一个数组中不存在的scanf的值,执行代码后它会正常打印“未找到”。不太理解呀,猜测如果没有break,结果应该是重复打印“找到了,下标是*”,而不是一直等待吧。感谢各位师兄指导~

//在一个有序数组中查找具体的某个数字k,并输出它的下标。
#include <stdio.h>
int main(void)
{
    int arr[] = {1,2,3,4,5,6,7,8,9,10};
    int k = 0;
    printf("Please enter a number:>");
    scanf("%d",&k);
    int sz = sizeof(arr)/sizeof(arr[0]);
    int left = 0;
    int right = sz-1;
    while(left<=right)
    {
        int mid = (left+right)/2;
        if(k<arr[mid])
        {
            right=mid-1;
        }
        else if(k>arr[mid])
        {
            left=mid+1;
        }
        else
        {
            printf("找到了,下标是%d\n",mid);
            break;
            //就是上面这个break
        }
    }
    if(left>right)
    {
        printf("未找到\n");
    }
    return 0;
}

你的理解是正确的,但在实际运行中,当输入一个数组中存在的值时,程序并不会一直等待。在这段代码中,break语句的目的是在找到目标值时立即跳出while循环,避免进行多余的查找操作。如果没有break语句,程序仍然会继续执行,但可能会导致错误的结果或者陷入死循环。

首先,我们要纠正一下代码中的一个小错误。在计算mid的值时,我们应该使用括号来确保先进行加法运算,然后再进行除法运算:

int mid = (left + right) / 2;

现在,让我们来分析为什么在没有break的情况下,程序的行为与预期不符。当在数组中找到目标值时,我们期望程序跳出while循环并打印出目标值的下标。然而,如果没有break语句,程序将继续执行while循环。在这种情况下,leftright的值将不会发生改变,因为它们只在ifelse if分支中更新。

由于leftright的值保持不变,mid的值也将保持不变,导致程序陷入死循环。在这种情况下,程序看起来似乎一直在等待,但实际上它在无休止地重复执行while循环。因此,我们需要使用break语句来确保在找到目标值时立即跳出循环。

如果你还有其他问题或需要进一步的解释,请随时提问,如此回答对你有帮助望采纳

找到后,是需要靠break;跳出循环的。如果没有 break; 找到后 left right 两个值就不变化了,则 mid 值也不变了,始终是 k == arr[mid] , 则 while(left<=right) 条件始终满足, 就死循环了。
没有找到想找的值,left right 两个值是变化的,最终会出现 left != right ,也就是 while(left <= right) 条件不满足退出循环,此时不需要break;来跳出循环。