到目前为止,这是我的代码我遇到的问题是打印出行星的最小直径。 更新代码 ....但仍然没有工作......
brew install python
' 在菜单中设置具有较小直径控制台打印的行星上的打印命令: 名称: 到太阳的距离:0 直径:0 质量:0
答案 0 :(得分:1)
无论main()
中的代码丢失,那里的语法错误以及填充行星的方式如何,搜索函数FindSmallestDiameter()
将永远不会起作用:
resultSmallest = INT_MAX
开始。这是一个非常大的数字j=1
开始循环(通常数组索引startw为0)arr[resultSmallest].diameter
,并导致未定义的行为。它可能会导致破坏或分段错误,但它也可能返回一个随机数,甚至是0. INT_MAX
,这可能会导致main()
中的代码(尝试)访问更多元素超出范围。 可能的纠正:
int FindSmallestDiameter(Planet * arr, int n)
{
if (n==0)
return -1; // handle special case first
else {
int resultSmallest = 0; // let's suppose the smallest is the first element
for (int j = 1; j < n; j++) { // then it makes sense to loop starting with the second
if(arr[j].diameter < arr[resultSmallest].diameter) // and challenge the current smalest
resultSmallest = j;
}
return resultSmallest;
}
}
或shorter one,使用标准算法std::min_element()
:
int FindSmallestDiameter(Planet * arr, int n)
{
return n==0 ? -1 : std::min_element(arr,arr+n,[](const Planet &a,const Planet &b)->bool {return a.diameter<b.diameter;})-arr;
}
答案 1 :(得分:0)
使用以下功能解决问题:
Planet FindSmallestDiameter(Planet * arr, int n)
{
Planet smallestDiameter = arr[0];
for (int i = 0; i < n; i++)
{
if (smallestDiameter.diameter < arr[i].diameter)
{
smallestDiameter = arr[i];
}
}
return smallestDiameter;
}