我尝试让用户输入一个数字给每个人。控制台然后输出数组中的最大值。一切工作正常,但最大值总是输出为-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循环定义错误。循环体未执行。我尝试查找此警告,但此警告似乎非常宽泛,找不到任何有用的信息
2条答案
按热度按时间bvk5enib1#
这声明了一个包含10个
int
值的数组。这些值都没有被显式初始化。这就是C++中在自动作用域中声明的普通值的工作方式,它们没有被初始化为任何值。初始化它们是代码的责任。这会将
max
的值设置为数组的第一个值。数组尚未初始化为任何值。这是未定义的行为。从这一点开始,程序的行为是未定义的。此外,即使
people
s的值被初始化,它仍然会被破坏。程序的意图很清楚:将值读入people
数组,然后找到它们的最大值。但是,在这一点上,还没有从任何地方读到任何东西。
此处尝试的目标是将
max
初始设置为数组中的第一个值,即第一个读取值。但是为了使这有意义,
max
应该在***从input读取数组中的值之后***设置,而不是***之前***。这应该在***读取所有值之后***完成,而不是***之前***。3ks5zfa02#
在
int max = people[0]
行中,你正在解引用数组的第一个元素。但是解引用什么呢?在程序的那个点上,你还没有初始化people数组中的10个元素中的任何一个。因此,在程序的那个点上取people[0]的值,并将其复制到另一个int中以供稍后比较是未定义的行为。最好的解决方案是在用户输入后将int max = people[0]
移动到,比较循环从i = 1开始,因为max已经等于第一个输入值。