在写矩阵转换时发现的一个for循环括号的问题
在写矩阵转换时发现的一个for循环的问题
最近在写c语言作业的一个矩阵转换的时候,程序运行没有问题,但输出总是存在问题。
后来与朋友讨论了一下,最后发现问题存在于for循环的括号问题。以此记录一下,方便学习。
文章图片
以上是问题代码,输出结果如下
文章图片
我们来细分一下代码
#include int main(){
int i,j,t;
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
for(i=0;
i<3;
i++)for(j=0;
j<3;
j++)printf("%d",a[i][j]);
/*输出原始矩阵*/printf("\n");
以下为该代码输出结果
文章图片
为什么会出现这样呢?在c primer里面讲述for循环的定义是这样的:
for(condition1;
condition2;
condition3) statement
也就是说执行主体的结束靠的是statement的结束,即一个语句的结束。自然,上面的代码它只考虑了第二个for循环里面的printf语句,而没有执行转行命令。(\n)
在存在多个逻辑语句的情况下,for循环里面需要用到大括号,即:{}
我们改变一下代码,试试看
for(i=0;
i<3;
i++)for(j=0;
j<3;
j++)
{
printf("%d",a[i][j]);
/*输出原始矩阵*/
printf("\n");
}
结果如下:
文章图片
【在写矩阵转换时发现的一个for循环括号的问题】很明显,我们在第二个for循环里面加了大括号,换行指令立刻在第二个for循环中执行了。
我们再改一下,看一看。
for(i=0;
i<3;
i++){for(j=0;
j<3;
j++)printf("%d",a[i][j]);
/*输出原始矩阵*/printf("\n");
}
输出结果如下:
文章图片
很明显,在整体的for循环里面(第一个for循环),它先执行了第二个for循环里面的指令,在第二个for循环里面的指令完成了,完成了换行。
一个清晰明了的例子:
文章图片
很明显,他是先遍历完一个for才输出test的,说明test的输出语句和遍历输出不在一个for下的。
总之,我们都要养成写一个工整代码的习惯,这不仅是为了方便别人查看,更是为了日后我们理解自己的代码,比如我现在写代码的时候,基本在for循环都会加个括号,这样会方便我理解代码是在哪个模块运行的。同时,缩进也显得非常重要,对于你理解自己的代码来说。
感谢:DynamicLab - The_sky
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 你到家了吗
- 闲杂“细雨”
- 杜月笙的口才
- 赢在人生六项精进二阶Day3复盘
- 祖母走了
- 樱花雨
- 眼观耳听美食的日子
- 今天写一些什么
- “成长”读书社群招募