繁体   English   中英

函数返回错误值

[英]Function returning the wrong value

该项目是学校的家庭作业。 讲师要求我们输入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;
}

您的程序具有未定义的行为,因为您正在使用无效的索引访问数组a

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

您正在使用

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

然后在循环中访问a[i] 如果number_used等于20,你正在访问a使用和索引值20,这是不正确的。

将其更改为使用i < number_used

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

一个小问题是您正在使用temp >= a[i] ,可以将其更改为使用temp > a[i] 在这种情况下,使用>=是可以的,但是会做很多不必要的工作。


这是该功能的更新版本:

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

假设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())

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

您还可以启动i=1因为您使假设index 0最小。

更改

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM