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

mznpcxlj  于 2022-12-01  发布在  其他
关注(0)|答案(2)|浏览(376)

我尝试让用户输入一个数字给每个人。控制台然后输出数组中的最大值。一切工作正常,但最大值总是输出为-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循环定义错误。循环体未执行。我尝试查找此警告,但此警告似乎非常宽泛,找不到任何有用的信息

bvk5enib

bvk5enib1#

int people[10];

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

int max = people[0];

这会将max的值设置为数组的第一个值。数组尚未初始化为任何值。这是未定义的行为。从这一点开始,程序的行为是未定义的。
此外,即使people s的值被初始化,它仍然会被破坏。程序的意图很清楚:将值读入people数组,然后找到它们的最大值。
但是,在这一点上,还没有从任何地方读到任何东西。
此处尝试的目标是将max初始设置为数组中的第一个值,即第一个读取值。
但是为了使这有意义,max应该在***从input读取数组中的值之后***设置,而不是***之前***。这应该在***读取所有值之后***完成,而不是***之前***。

3ks5zfa0

3ks5zfa02#

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

相关问题