Cryil 2023-05-02 00:18 采纳率: 50%
浏览 42
已结题

在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;
}

  • 写回答

2条回答 默认 最新

  • serendipity★ 2023-05-02 02:47
    关注

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

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

    int mid = (left + right) / 2;
    

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月10日
  • 已采纳回答 5月2日
  • 修改了问题 5月2日
  • 修改了问题 5月2日
  • 展开全部

悬赏问题

  • ¥15 soildworks装配体的尺寸问题
  • ¥100 有偿寻云闪付SDK转URL技术
  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑