【问题标题】:Nested Loop Unexpected Behavior嵌套循环意外行为
【发布时间】:2015-09-23 00:02:51
【问题描述】:

我正在尝试使用嵌套循环来调试我的程序,以打印出二维数组中的所有值。我从循环中得到了一些意想不到的行为,所以我注释掉了一些东西并添加了一个简单的 printf。

`int u = 0;
 int y = 0;
 char m = 'm';
 for (u; u < 12; u++)
 {
    printf("\n");
    for (y; y < 5; y++)
    {
        //transition[u][x] = &m;
        printf("o"); //this nested loop isnt working???? 
        //printf("%c", *transition[u][y]);
    }
 }`

显然这应该打印 12 行 5 'o's。但相反,它只打印出一行 5 'o',后跟 11 个换行符。

编辑:非常感谢!愚蠢的错误,我没有意识到 y 在第二次循环运行时不会将自己设置回 0。我想忽略了这一点,因为我太习惯于 Java 在循环语句中初始化和设置增量变量。

【问题讨论】:

    标签: c loops for-loop nested


    【解决方案1】:

    您的for 初始声明没有任何意义:

    for (y; y < 12; y++) 
    

    第一条语句就是y。这没有副作用,因此您实际上并没有在第一个最内层循环之后将y 重置为0。所以从外循环的下一次迭代,y == 5 和内循环根本不执行。

    你应该这样做

    for (y = 0; y < 12; y++)
    

    【讨论】:

      【解决方案2】:

      您没有在内部循环中重置y;试试for (y = 0; y &lt; 5; y++)

      这将在每个循环开始时重置y

      附言这实际上更像是一个代码审查问题

      【讨论】:

        【解决方案3】:

        通过查看您的问题,我假设您正在尝试将 5 o 与 12 o 排成一行。

        试试这个

        for(u=0;u<12;u++)
        {
            for(y=0;y<5;y++)
           {
                 printf("o");
            }
            printf("\n");
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-16
          • 1970-01-01
          相关资源
          最近更新 更多