1

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

 2 years ago
source link: https://segmentfault.com/a/1190000040767977
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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

以上是问题代码,输出结果如下

我们来细分一下代码

#include <stdio.h>

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(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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK