加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如果带有括号的循环中的return语句,则会显示错误可能到达非

发布时间:2020-12-16 09:20:58 所属栏目:百科 来源:网络整理
导读:在第一种情况下,它显示错误:控制到达非void函数的结尾. 但在第二种情况下,即使代码与第一个代码完全相同,它也不会显示任何错误.有人可以告诉我在编译器中两种情况下究竟发生了什么? 同样为什么案例1中的退货声明未得到承认 //case 1 int checkA(const vect
在第一种情况下,它显示错误:控制到达非void函数的结尾.
但在第二种情况下,即使代码与第一个代码完全相同,它也不会显示任何错误.有人可以告诉我在编译器中两种情况下究竟发生了什么?
同样为什么案例1中的退货声明未得到承认

//case 1
    int checkA(const vector<int>& a,int n,int k)
    {
        for(int i=0; i<n; i++)
        { if(k%a[i])
                return 0;
            return 1;
        }
    }
//case 2
    int checkA(const vector<int>& a,int k)
    {
        for(int i=0; i<n; i++)
         if(k%a[i])
                return 0;
            return 1;
    }

解决方法

它没有做同样的事情.如果您使用更好的格式发布了代码段,则会看到以下内容:

//case 1
int checkA(const vector<int>& a,int k)
{
    for(int i=0; i<n; i++)
    {
        if(k%a[i])
            return 0;
        return 1;
    }
}

案例2是

//case 2
int checkA(const vector<int>& a,int k)
{
    for(int i=0; i<n; i++)
        if(k%a[i])
            return 0;
    return 1;
}

在情况1中,检查第一个数组元素(a [0])是否除以k,如果是,则在同一次迭代中立即返回1.问题是,如果数组有零个元素(n为0),则根本没有第一次迭代,因此,没有命中任何return语句(返回0和返回1只能在第一次迭代时发生).

情况2的最终返回1仅在循环之后发生,如果没有数组元素触发先前的退出.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读