我试图通过使用函数maxin
从数组及其索引号中获取最大值,但我的逻辑不知何故不起作用?
#include <iostream>
#include <conio.h>
#include <proceass.h>
void maxin(double[], int);
void main()
{
const int k = 10;
int l = 0;
double num[k];
for (int j = 0; j < k; j++)
{
cout << "Enter the number " << j + 1 << " = ";
cin >> num[j];
if (cin.fail())
{
cout << "Wrong data entered " << "\nTry again";
getch();
exit(0);
}
}
maxin(num, l);
cout << "The Greatest number is = " << num;
cout << "\nIt is " << l << "th number";
getch();
}
void maxin(double k[], int p)
{
int l, s;
l = 10;
s = 0;
double m;
for (int n = 0; n < l; n++)
{
if (k[s] > k[n++])
{
m = k[n];
}
else
{
m = k[n++];
s = ++;
}
}
p = s;
k[s] = m;
}
答案 0 :(得分:2)
您的maxin
函数正在您的程序上调用Undefined Behavior,以便访问超出数组k
范围的区域。发生这种情况是因为n
循环语句中不仅for
递增,而且在每次迭代时评估的if
语句中也是如此。这也发生在else
语句中,这是问题的另一种情况。
当n
小于l
时,n++
将为>= l
,随后取消引用该地址k[n++]
将导致未定义的行为。之后,您的程序可能会发生任何事情,包括有效或无效的副作用。
当在数组中找到最大值/最小值时,通常将变量设置为数组中的任意值(通常是第一个索引),然后执行迭代以检查数组中的任何其他值是否更小/大于那个变量。当该条件通过时,变量将设置为数组中的新值。
此外,由于您说您需要将变量设置为找到最大值的索引,因此您必须通过引用传递p
。
答案 1 :(得分:2)
STL方法:
vector< double > v = {1,2,3,4,5};
auto maxElemIter = std::max_element(begin(v), end(v));
cout << "Max is: " << *maxElemIter;
cout << ", at index: " << distance(begin(v), maxElemIter) << endl;
(我知道,这是一个残酷的建议,考虑到上面提到的代码......)