【问题标题】:I can't use an existent variable inside a for loop我不能在 for 循环中使用现有变量
【发布时间】:2020-08-02 04:11:00
【问题描述】:

这段代码应该对矩阵主对角线上的数字求和。

#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.

我不明白为什么我不能在 for 循环中使用 n 变量。我该怎么做?

【问题讨论】:

  • 删除未签名
  • 给定的代码对我来说编译得很好。我怀疑您热衷于将问题减少到MVCE,您不小心丢失了一些重要信息。你能多贴一点上下文代码吗?
  • @MohammadMoeinGolchin 没有任何变化。
  • 编辑后,n 在块范围内定义,因此在块外不可见
  • @user3121023 如何使该变量在其余代码中可用?

标签: c for-loop variables


【解决方案1】:

这个

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

不像你想象的那样作用于n。范围规则更好地解释here,但简而言之:n 仅存在于 if/else 块的每个分支中。因此,当您稍后尝试在 for 循环中访问 n 时,它不再存在!

这可以通过将n 纳入范围来轻松解决,例如

int n = COL;

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

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

【讨论】:

    猜你喜欢
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多