我正在尝试使用整数数组中的最小元素返回索引。我错过了什么吗?在我将整数放入后,它不会返回索引。
更新:我在int main()
结束时收到有关阵列堆栈损坏的错误。谢谢。我的代码如下:
#include <iostream>
#include <conio.h>
using namespace std;
int indexofSmallestElement(double array[], int size);
int main()
{
int size = 10;
double array[10];
for (int i = 0; i <= size; i++)
{
cout << "Enter an integer: " << endl;
cin >> array[i];
}
indexofSmallestElement(array, size);
}
int indexofSmallestElement(double array[], int size)
{
int index = 0;
if (size != 1)
{
int n = array[0];
for (int i = 1; i < size; i++)
{
if (array[i] < n)
{
n = array[i];
index = i;
}
}
}
return index;
}
答案 0 :(得分:14)
许多人向您展示了indexofSmallestElement
的变体。我将包括我的为什么的解释我认为它更好:
int indexofSmallestElement(double array[], int size)
{
int index = 0;
for(int i = 1; i < size; i++)
{
if(array[i] < array[index])
index = i;
}
return index;
}
您会注意到我取消了n
变量,该变量用于保存到目前为止遇到的最小值。我这样做是因为,根据我的经验,必须保持两个不同的事物同步可能是微妙的错误的来源。即使在这个简单的情况下,它也是多个错误的来源,其中最重要的是您的n
被声明为int
,但您分配的类型为{其中{1}}。
底线:取消double
变量,只记录一件事:索引。
答案 1 :(得分:3)
应该是n = array[0]
而不是array[0] = n
。这意味着你假设数组的第一个元素在开头是最小的,然后将它与其他元素进行比较。
此外,在循环中,您超出了数组的范围。 for循环应该运行到i < size
而不是i <= size
。
你的代码应该是这样的..
int indexofSmallestElement(double array[], int size)
{
int index = 0 ;
double n = array[0] ;
for (int i = 1; i < size; ++i)
{
if (array[i] < n)
{
n = array[i] ;
index = i ;
}
}
return index;
}
答案 2 :(得分:0)
在循环内部使用array [i]和index = i。大小是边界:)