关于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
循环。在这种情况下,left
和right
的值将不会发生改变,因为它们只在if
和else if
分支中更新。
由于left
和right
的值保持不变,mid
的值也将保持不变,导致程序陷入死循环。在这种情况下,程序看起来似乎一直在等待,但实际上它在无休止地重复执行while
循环。因此,我们需要使用break
语句来确保在找到目标值时立即跳出循环。
如果你还有其他问题或需要进一步的解释,请随时提问,如此回答对你有帮助望采纳
找到后,是需要靠break;跳出循环的。如果没有 break; 找到后 left right 两个值就不变化了,则 mid 值也不变了,始终是 k == arr[mid] , 则 while(left<=right) 条件始终满足, 就死循环了。
没有找到想找的值,left right 两个值是变化的,最终会出现 left != right ,也就是 while(left <= right) 条件不满足退出循环,此时不需要break;来跳出循环。