Я не могу использовать существующую переменную внутри цикла for - PullRequest
0 голосов
/ 19 апреля 2020

Этот код должен составлять сумму чисел в главной диагонали матрицы.

#include <stdio.h>

#define RIG 2
#define COL 5

void sum(unsigned int a[RIG][COL]);

int main(){
    unsigned int a[RIG][COL] = {{1,2,3,4,5},{6,7,8,9,10}};

    sum(a);
}

void sum(unsigned int a[RIG][COL]){

    unsigned int c = 0;

    unsigned int j = 0;

    if (RIG<=COL){
        int n = RIG;
    }
    else{
        int n = COL;
    }


    for (size_t i=0;i<=n-1;++i){
        c += a[i][j];
        j += 1;

    }


    printf("%d\n", c);

}

Вывод:

matrix_sum.c:28:21: error: use of undeclared identifier 'n'
        for (size_t i=0;i<=n-1;++i){
                           ^
1 error generated.

Не понимаю, почему не могу используйте переменную n внутри для l oop. Как я могу это сделать?

1 Ответ

1 голос
/ 19 апреля 2020

Это

if (RIG<=COL){
    int n = RIG;
}
else{
    int n = COL;
}

не охватывает n так, как вы думаете. Правила области видимости лучше объясняются здесь , но вкратце: n существует только внутри каждой ветви блока if / else. Таким образом, когда вы попытаетесь получить доступ к n в вашем for-l oop позже, он больше не будет существовать!

Это тривиально исправляется путем введения в область действия n, например,

int n = COL;

if (RIG <= COL) {
    n = RIG;
}

for (size_t i = 0; i <= n - 1; ++i) {
    c += a[i][j];
    j += 1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...