数组中最大的元素输出为-858993460 [c++]



我试图让用户为每个人输入一个数字。控制台然后输出数组中的最大值。一切都很好,但Max总是输出为-858993460。我尝试了多种组合,但我似乎无法弄清楚

我对数组不熟悉,所以任何帮助都会很感激,以及如何改进我的代码的反馈

#include <iostream>

int main()
{
int people[10];
int max = people[0];
std::cout << "please enter number of pancakes eaten by each person.n";
//lets the user input values for each element
for (int i = 0; i < 10; ++i) {
std::cin >> people[i];
}
//outputs all the elements of the array
for (int i = 0; i < 10; ++i) {
std::cout << people[i] << " ";
}
//finds the largest element in the array
for (int i = 0; i > 10; ++i) { 
if (people[i] > max) {
max = people[i];
}

}
std::cout << "nmax: " << max;
return 0;
}

我也一直得到一个警告说:定义不清的for循环。循环体未执行。我试着查找这个警告,但警告似乎非常广泛,我找不到任何帮助

int people[10];

声明了一个包含十个int值的数组。这些值都没有显式初始化。这就是在c++中自动作用域中声明的普通值的工作方式,它们不会初始化为任何值。初始化它们是代码的责任。

int max = people[0];

max的值设置为数组的第一个值。它还没有初始化为任何值。这是未定义的行为。从这一点开始,程序的行为是未定义的。

此外,即使people的值被初始化,这仍然会被打破。该程序的意图是明确的:将值读入people数组,然后找到它们的最大值。

但是,此时没有从任何地方读取任何内容。

这里尝试的目标是将max初始设置为数组中的第一个值,即第一个读值。

但是为了使它有意义,max应该在之后设置数组中的值从输入中读取,而不是之前。这应该在之后完成所有的值都被读入,而不在之前。.

int max = people[0]行,您正在解引用数组的第一个元素。但是去引用什么呢?在程序的这一点上,您还没有初始化people数组中10个元素中的任何一个。因此,在程序中取people[0]的值并将其复制到另一个int中以供稍后比较是未定义的行为。最好的解决方案是简单地将int max = people[0]移到用户输入之后,并以i = 1开始比较循环,因为max已经等于第一个输入的值。

最新更新