[英]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.