在写矩阵转换时发现的一个for循环括号的问题

在写矩阵转换时发现的一个for循环的问题 最近在写c语言作业的一个矩阵转换的时候,程序运行没有问题,但输出总是存在问题。
后来与朋友讨论了一下,最后发现问题存在于for循环的括号问题。以此记录一下,方便学习。
在写矩阵转换时发现的一个for循环括号的问题
文章图片

以上是问题代码,输出结果如下
在写矩阵转换时发现的一个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");

以下为该代码输出结果在写矩阵转换时发现的一个for循环括号的问题
文章图片

为什么会出现这样呢?在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循环中执行了。
我们再改一下,看一看。
for(i=0; i<3; i++){for(j=0; j<3; j++)printf("%d",a[i][j]); /*输出原始矩阵*/printf("\n"); }

输出结果如下:
在写矩阵转换时发现的一个for循环括号的问题
文章图片

很明显,在整体的for循环里面(第一个for循环),它先执行了第二个for循环里面的指令,在第二个for循环里面的指令完成了,完成了换行。
一个清晰明了的例子:
在写矩阵转换时发现的一个for循环括号的问题
文章图片

很明显,他是先遍历完一个for才输出test的,说明test的输出语句和遍历输出不在一个for下的。
总之,我们都要养成写一个工整代码的习惯,这不仅是为了方便别人查看,更是为了日后我们理解自己的代码,比如我现在写代码的时候,基本在for循环都会加个括号,这样会方便我理解代码是在哪个模块运行的。同时,缩进也显得非常重要,对于你理解自己的代码来说。
感谢:DynamicLab - The_sky

    推荐阅读