函数返回错误的值

时间:2018-01-26 18:03:57

标签: c++ algorithm return

这个项目是学校的家庭作业。教师要求我们输入20个随机整数,然后打印列表中的最小值,然后在列表中搜索输入数字的第一次迭代。我的问题是返回列表中最小的数字。该函数如下所示接受整数数组和一个大小为数组的整数。在Visual Studio中,最小数字的测试一直有效,直到函数返回值。该函数返回某种默认值而不是最小的整数,而不是返回最小的数字。我过去两个小时一直盯着这段代码,任何帮助都会受到赞赏。

int theSmallest(const int a[], int number_used)
{
    int temp = a[0];
    // Find the smallest number in array a[]
    for (int i = 0; i <= number_used; i++)
    {
        if (temp >= a[i])
        {
            temp = a[i];
        }
    }
    return temp;
}

4 个答案:

答案 0 :(得分:3)

您的程序有未定义的行为,因为您使用无效索引访问数组validateSession()

当数组有20个元素时,有效索引为0-19,而不是0-20。

您正在使用

a

然后在循环中访问for (int i = 0; i <= number_used; i++) 。如果a[i]等于20,则您使用的是number_used并且索引值为20,这是不正确的。

将其更改为使用a

i < number_used

一个小问题是您使用的是for (int i = 0; i < number_used; i++) ,可以将其更改为使用temp >= a[i]。在这种情况下使用temp > a[i]会起作用,但它会做更多的工作而不是必要的。

这是该功能的更新版本:

>=

答案 1 :(得分:2)

假设number_used是数组的大小,代码可以写成:

int theSmallest(const int a[], int number_used)
{
    if( a == nullptr or number_used == 0 )
        throw std::runtime_error( "invalid argument" );
    return *std::min_element( a, a + number_used );
}

注意:如果number_used等于0或a指针作为nullptr传递,则代码存在问题,您可能不会发生这种情况,但始终是好主意验证您的输入(至少通过assert())

答案 2 :(得分:0)

更改为i < number_used,我认为更改为if(temp > a[i])

您也可以启动i=1,因为您假设index 0是最小的。

答案 3 :(得分:0)

更改

for (int i = 0; i <= number_used; i++)

for (int i = 1; i < number_used; i++)