为什么这不打印 sum 的最终输出?

Why is this not printing the final output of sum?

给定一个包含 N 个整数的数组。我的任务是打印所有整数的总和。

输入:

输入文件的第一行包含一个整数T,表示测试用例的数量。对于每个测试用例,将有两行。第一行包含 N,表示数组中的元素数,第二行包含 N space 个分隔的整数。

输出:

对应每个测试用例,换行打印数组之和

约束条件:

1 <= T <= 100

1 <= N <= 1000

0 <= Arr[i] <= 200

#include <iostream>
using namespace std;

int main()
{
    int n, no_of_elem_array;
    int arr[50], sum[50];

    cin >> n;

    int j = 0;

    while (n--) {
        cin >> no_of_elem_array;

        for (int i = 0; i < no_of_elem_array; i++) {
            cin >> arr[i];
        }

        for (int i = 0; i < no_of_elem_array; i++) {
            sum[j] = sum[j] + arr[i];
        }
        j++;
    }
    for (int i = 0; i < n; i++) {
        cout << sum[i] << endl;
    }

    return 0;
}

输出

2

4

1 2 3 4

6

5 8 3 10 22 45

两期:

  1. 你的数组不够大,所以会出现无效访问,这是未定义的行为。

  2. 数组sum是局部变量,所以该值是未初始化的(即分配时包含任意值),需要自己置零。

你最后的循环中有n个

   for(int i=0; i<n; i++){
   cout<<sum[i]<<endl;
    }

中变为0
         while(n--)

这就是它不打印任何东西的原因

这不是在 C++ 中添加数组的方式:

这是我建议的代码:

#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>

int main() {
    std::vector<int> vec_of_ints;
    std::cout << "Enter the size of the array: ";
    unsigned size = 0;
    std::cin >> size;
    vec_of_ints.resize(size);
    for(auto& integer : vec_of_ints) {
        std::cin >> integer;
    }
    std::cout << std::accumulate(vec_of_ints.begin(), vec_of_ints.end(), 0);
    return 0;
}

此外,正如@Alan Birtles 所建议的,还有另一种(更好的)选择:

你根本不需要存储输入:

int main() {
    unsigned size = 0;
    std::cin >> size;
    long sum = 0;
    for (int i = 0; i < size; i++) {
        int num = 0;
        std::cin >> num;
        sum += num;
    }
    std::cout << sum << "\n";
    return 0;
}