Gabriel Rebello
Gabriel Rebello

Reputation: 1147

int variable not resetting on c++?

So, my program is supposed to receive test inputs like:

3
1 0 1
0 1 1
1 0 1
5
1 1 1 0 0
1 1 0 1 1
1 0 1 0 1
0 1 0 1 0
0 1 1 1 1
3
1 0 0
0 1 0
0 0 1
2
1 1
1 1
0

where the single-valued lines (n) are the size of a NxN matrix located in the following n entries like shown above. If n = 0, the program stops. The output must be the biggest sum amongst the columns of the matrix. So I expect outputs like this:

3
4
1
2

After a lot of effort and wasted time, I managed to get the first output correctly, but I noticed the following ones sometimes summed up and suggested some variable was not being reset. Here's my code:

#include <iostream>
using namespace std;

int pop = 0;

int main() {
    int n, i, j, k;
    cin >> n;
    while (n!=0) {
        int alunos[n]={0};
        pop = 0;
        for (i=0;i<n;i++) {
            int array[n]={0};
            for (j=0;j<n;j++) {
                cin >> array[j];
                if (array[j]==1) alunos[j]++;
            }  
        }
        for (k=0;k<n;k++) {
            if(alunos[k]>pop) pop = alunos[k];
        }
        cout << pop << endl;
        cin >> n;
    }
    return 0;
}

Noticed that I'm outputting pop(the biggest sum) and resetting it to 0 everytime a new n is given. alunos[n] is an array with the sums of each column (also resetted on every while loop) and array[n] is just an auxiliary array for reading each line of input. My outputs with this are:

3
5
6
8

Thanks in advance!

Upvotes: 1

Views: 265

Answers (1)

anon
anon

Reputation:

You cannot use initializers with variable length arrays. Either switch to some sort of container:

std::vector<int> alunos(n);

or fill the array with zeros manually:

int alunos[n];
std::fill(alunos, alunos+n, 0);

Also, ignoring errors is unhealthy. Don't do it.

Upvotes: 2

Related Questions