Int变量在c++上不重置

int variable not resetting on c++?

本文关键字:c++ 变量 Int      更新时间:2023-10-16

所以,我的程序应该接收如下测试输入:

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

,其中单值行(n)是位于以下n项中的NxN矩阵的大小,如上所示。如果n = 0,程序停止。输出必须是矩阵各列中最大的和。所以我希望输出像这样:

3
4
1
2

经过大量的努力和浪费的时间,我设法得到正确的第一个输出,但我注意到以下几个有时总结,并建议一些变量没有被重置。下面是我的代码:

#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;
}

注意,我输出pop(最大的和),并在每次给出新的n时将其重置为0。alunos[n]是一个数组与每列的总和(也重置在每个while循环)和array[n]只是一个辅助数组读取每一行输入。我的输出是:

3
5
6
8

提前感谢!

不能对变长数组使用初始化式。或者切换到某种容器:

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

或手动用零填充数组:

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

同样,忽略错误是不健康的。别这么做。