数组中用于查找最大数的意外答案
我想在数组中找到最大数。但是我的代码向我展示了意想不到的答案。
我的代码有什么问题吗?
这是我的代码:
#include <iostream>
using namespace std;
int main()
{
int n;
cout<<"Enter array size: ";
cin>>n;
int a[n];
int maximum = 0;
maximum=a[0];
for(int i=0; i<n; i++)
{
cin>>a[i];
if(maximum<a[i])
{
maximum=a[i];
}
}
cout<<"Maximum number: "<<maximum;
return 0;
}
Here my input:
Enter array size: 3
4 5 6
Output:
16
My expected output must be 6
我的代码有什么问题吗?
回答
在初始化maximum该值a[0]之前,您已经使用 的值进行了初始化。这给出了未定义的行为,因为它可以是任何东西。在您的示例中,它最终得到的值16大于您随后输入的任何值。因此,您永远不会设置maximum为用户输入的实际值。
快速解决方法是在循环中执行此操作:
if (i == 0 || maximum < a[i])
在您的案例中,实际上没有理由将输入存储在数组中,除非您计划对它们做其他事情。您无需创建数组即可执行此任务。
另请注意,可变长度数组 (VLA) 是非标准的。他们也容易出现问题。考虑如果用户输入负数组大小或大量数字可能会发生什么。这将溢出您的程序堆栈并导致未定义的行为。更好地使用std::vector.