我试图让用户为每个人输入一个数字。控制台然后输出数组中的最大值。一切都很好,但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已经等于第一个输入的值。