0

我的编译器一直说 'small' 和 'x' 没有在这个范围内声明,我该如何修复我的数组以便准确显示它们?总体而言,代码应该找到存储在数组中的最小正非零值。

#include <iostream>
#include <string>
using namespace std;


int findthesmall( int small[x], int y) 
{
  for(int i=0; i< y; i++){
    for(int j=0; j< y; j++){
      int temp = small[i];
      if( small[i] > small[j] )
      small[i] = small[j];
      small[j] = temp;
    }
  }
  return small[0];

}

int main(){
  return 0;
}
4

4 回答 4

3

我认为你需要:

int findthesmall( int* small, int y) {
于 2012-12-19T01:29:47.543 回答
2

尝试这个:

int findthesmall( int small[], int y) {
   for(int i=0; i< y; i++){
      for(int j=0; j< y; j++){
         int temp = small[i];

         if( small[i] > small[j] )
            small[i] = small[j];
         small[j] = temp;
      }
   }
   return small[0];

}

int main(){
   return 0;
}
于 2012-12-19T01:31:42.377 回答
1

除了其他答案外,逻辑中也存在错误。如果您的函数只是查找函数名称所示的最小元素,那么一个 for 循环就足够了。示例代码如下:

int findthesmall( int small[], int y) 
{
  int temp = small[0];
  for(int i=1; i< y; i++)
  {
  if( temp > small[i] )
      temp = small[i];
  }
  return temp; 
}

或者你也可以使用 std::min_element 算法

std::cout << *std::min_element(small, small+y) << std::endl;
于 2012-12-19T01:35:52.710 回答
1
int small[x]

这是非法的,原因有两个。

  • 就像你的编译器说的那样,X 是未定义的
  • 数组的大小不能设置为非编译时常量的值。

要解决此问题,您可以执行@ajon 建议的操作(将数组作为指针 + 长度传递),它在历史上是传递数组的方式。

不过,C++ 中还有其他更好的方法。

  • 您可以考虑使用std::arrayor std::vector。它们都可以像传递任何其他变量一样传递,知道它们自己的大小,并且可以像普通数组一样访问
  • 或者您可以使用template代码自动捕获数组的大小。

    template<int len>
    int findthesmall(int (&small)[len]){

第二个选项可能比其他选项有点复杂,尤其是现在你已经得到了答案,我只是为了完整起见把它包括在这里。

于 2012-12-19T01:30:10.120 回答