for循环明明初始化了,为什么还报错未定义标识符

问题遇到的现象和发生背景

for循环里明明已经初始化了j可是下方还是报错,显示未定义j

用代码块功能插入代码,请勿粘贴截图

int fun(int a[], int len1, int b[], int len2)
{

for (int i = 0;i//int j = 0;
    for (int j = 0;j < len2;j++)
        if (a[i] < b[j])
            break;
        if (j >= len2)
        {
            b[j] = a[i];
            len2++;
        }
        else {
            int k = len2;
            for (int k = len2;k >j;k--)
                b[k] = b[k - 1];
            b[k] = a[i];
            len2++;
        }
}
return len2;//len1改成len2

}

运行结果及报错内容

未定义标识符"j"

我的解答思路和尝试过的方法

加上int j=0;

我想要达到的结果

了解报错原因

for (int j = 0;j < len2;j++)
if (a[i] < b[j])
break;
因为j是在for语句中定义的,其作用域只是在for的代码块内,也就是上述3行内。所以后面的j是找不到定义的。

#include
using namespace std;
void print(int* t, int n)
{
for (int i = 0;i < n;i++)
cout << *(t + i) << ' ';
cout << endl;
}
int fun(int a[], int len1, int b[], int len2)
{

for (int i = 0;i<len1;i++)
{
    //int j = 0;
    for (int j = 0;j < len2;j++)
        if (a[i] < b[j])
            break;
        if (j >= len2)
        {
            b[j] = a[i];
            len2++;
        }
        else {
            int k = len2;
            for (int k = len2;k >j;k--)
                b[k] = b[k - 1];
            b[k] = a[i];
            len2++;
        }
}
return len2;//len1改成len2

}

int main()
{
int a[10] = { 3,5,9,15,25,30 }, b[20] = { 1,2,3,8,10,16,18,20 };
int n;
cout << "数组a:";
print(a, 6);
cout << "数组b:";
print(b, 7);
n = fun(a, 6, b, 7);
cout << "合并后的数组为:";
print(b, n);

return 0;

}
答案:
数组a:3 5 9 15 25 30
数组b:1 2 8 10 16 18 20
合并后的数组为:1 2 3 5 8 9 10 15 16 18 20 25 30

for (int j = 0;j < len2;j++) 后面没有大括号,变量j的有效范围也就它下面那一句,后面的j都是未定义。加个花括号

img


取消int j = 0 的注释;
将for内部的int j = 0 改为j = 0。