背景:
今天学了多维数组,上机实践,用嵌套循环打印,遇到一个问题。
问题描述
问题:只打印了第一组,没有打印第二组。
要打印的数组:
float arr[2][3] =
{
{1.0,1.2,1.3},//下标(0.0)、(0.1)、(0.2)
{2.0,2.1,2.3} //下标 (1.0)、(1.1)、(1.2)
};
有误的代码:
#include <stdio.h>
int main(void)
{
//二维数组
float arr[2][3] =
{
{1.0,1.2,1.3},//下标(0.0)、(0.1)、(0.2)
{2.0,2.1,2.3} //下标 (1.0)、(1.1)、(1.2)
};
//初始化变量
int i = 0;
int l = 0;
//内嵌循环,进行打印
for (i; i < 2; i++)
for (l; l < 3; l++)
printf("%.1f\n",arr[i][l]);
return 0;
}
运行结果:
原因分析:
内循环没有按原本的假想进行第二次循环。
思考:内循环为什么不随着外循环不进行第二次
//初始化变量
int i = 0;
int l = 0;
//内嵌循环,进行打印
for (i; i < 2; i++)
for (l; l < 3; l++)
printf("%.1f\n",arr[i][l]);
经过分析得:
因为内循环使用的变量不是本身的,而是外部的。
具体:
(1)随着外循环第一次的结束,内循环也结束,但内循环中的变量l的值也变成了3。(2)当外循环进行第二次的时候,内循环的初始值调用外部变量l,但现在变量l的值是3,使得初始值不是0,而是3,不符合循环条件。
解决方案:
请查看更改后的代码:
#include <stdio.h>
int main(void)
{
//二维数组
float arr[2][3] =
{
{1.0,1.2,1.3},//下标(0.0)、(0.1)、(0.2)
{2.0,2.1,2.3} //下标 (1.0)、(1.1)、(1.2)
};
//初始化变量
int i = 0;
int l = 0;
//内嵌循环,进行打印
for (i; i < 2; i++)
for (l=0; l < 3; l++)
printf("%.1f\n",arr[i][l]);
return 0;
}
运行结果:
解决思路:
(1)因为我们所写代码的原因,使得内循环的初始值用的是外部的。
(2)既然不能使用外部的,那么我们就使用的内部的,所以进行了for (l=0; l < 3; l++)。l=0,对初始值进行定义,使得每次循环他的初始值都是0,0<3,满足条件,进行循环