嵌套循环意外行为

时间:2015-09-23 00:02:52

标签: c loops for-loop nested

我正在尝试使用嵌套循环调试我的程序,以打印出2d数组中的所有值。我从循环中得到了一些意想不到的行为,所以我评论了一些东西并添加了一个简单的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。但相反,它只打印出一行5'o's,然后是11行换行符。

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

3 个答案:

答案 0 :(得分:1)

您的for初始声明并不代表任何内容:

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

第一个陈述只是y。这没有任何副作用,因此您在第一个最内层循环后实际上并未将y重置为0。因此,从外部循环的下一次迭代,y == 5和内部循环根本不执行。

你应该做

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

答案 1 :(得分:1)

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

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

P.S。这实际上是一个代码审查问题

答案 2 :(得分:1)

通过查看您的问题,我假设您正试图在12行中打印5个。

试试这个

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