C ++:为什么它不起作用?

时间:2017-06-06 14:32:07

标签: c++11

我试图solve

你已经给出了一个int数组,你必须返回它的总和。

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <cstdlib>
using namespace std;

int main(){
int n;
cin >> n;
int k;
vector<int> arr(n);
for(int arr_i = 0;arr_i < n;arr_i++){
   cin >> arr[arr_i];
    k = k + arr[arr_i];
    //cout << "arr = " << arr[arr_i] << " k " << k << endl;     //  [0]
    if (arr_i == (n-1))
    {
        cout << k;
    }    

}
return 0;
}

这回归没有。而不是总和。

但是当取消注释[0]行时。代码开始正常工作。

P.S。我通过将cout更改为cerr来找到解决方案。 但是想知道它为什么不起作用。

3 个答案:

答案 0 :(得分:1)

作为另一个答案,初始化k,将if移出循环

vector<int> arr(n);
int k = 0;
for(int arr_i = 0;arr_i < n;arr_i++){
   cin >> arr[arr_i];
    k = k + arr[arr_i];
    //cout << "arr = " << arr[arr_i] << " k " << k << endl;     //  [0]    
}
cout << k;

作为您的问题,不再需要std::vector

int sum = 0, num;
for(int arr_i = 0;arr_i < n;arr_i++){
   cin >> num;
   sum = sum + num;
}
std::cout << sum << std::endl;

答案 1 :(得分:1)

在使用之前初始化k,否则它将包含垃圾值int k = 0;

答案 2 :(得分:0)

正如建议的其他答案(+1),您需要初始化k。但是,我认为最初为它分配第一个值并减少迭代次数会稍微好一些:

vector<int> arr(n);
if (n > 0) {
    int k = arr[0];
    for(int arr_i = 1;arr_i < n;arr_i++){
        //Your cycle
    }
}