这个项目是学校的家庭作业。教师要求我们输入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;
}
答案 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++)