C ++结构,函数不能打印最小直径

时间:2016-01-10 21:46:22

标签: c++ arrays function struct

到目前为止,这是我的代码我遇到的问题是打印出行星的最小直径。 更新代码 ....但仍然没有工作......

brew install python

' 在菜单中设置具有较小直径控制台打印的行星上的打印命令: 名称: 到太阳的距离:0 直径:0 质量:0

2 个答案:

答案 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;
 }