C ++ - 我的for循环没有启动

时间:2013-05-10 18:08:42

标签: c++ for-loop

我先为java编写了这段代码。它应该将2D阵列打印成螺旋形。我想在c ++中尝试它...在java中;有一种绘制方法。但是c ++不接受数组作为返回类型(可以通过指针完成),所以我删除了draw方法并复制到main方法中。我评论了开始和结束的绘制方法。但现在;在draw方法之后的for循环(我也评论过它)没有启动。有什么问题;我看不到它...... Thanx寻求帮助。

int T ;
scanf("%d", &T);
int num[T];
for(int i = 0; i < T; i++){
    scanf("%d", &num[i]);
}

for(int m = 0; m < T; m++){
    int n = num[m];
    int a[n][n];


    //draw -start
    int all = n*n;
    int x = 0, y=0;


    for(int counter=1; counter<=all; counter++){

        for(int i = 0; i < n; i++){
            a[x][y] = counter++;
            y++;}
        x++; y--;

        for(int i = 0; i < n-1; i++){
            a[x][y] = counter++;
            x++;}
        x--; y--;

        for(int i = 0; i < n-1; i++){
            a[x][y] = counter++;}
        x--; y++;

        for(int i = 0; i < n-2; i++){
            a[x][y] = counter++;}

        y++; x++; n = n-2;}

    //draw - end
   //this for is not starting
    for(int i = 0; i<n; i++){
        printf("a");
        for(int j = 0; i<n; j++){
            printf("a");
            printf("%d ", a[i][j]);

        }
        printf("\n");

    }

2 个答案:

答案 0 :(得分:4)

你在最大周期中递减n

n = n-2;

这就是为什么n&lt;当你到达你所说的for并且它没有循环时,为0。

我几乎可以肯定你并不打算在这个循环中修改n

答案 1 :(得分:0)

我整理了你的代码并在评论中提供了我的答案。

int T ;
scanf("%d", &T);
int num[T];
for(int i = 0; i < T; i++){
    scanf("%d", &num[i]);
}

for(int m = 0; m < T; m++){
    int n = num[m];
    int a[n][n];


    //draw -start
    int all = n*n;
    int x = 0, y=0;


    for(counter=1; counter<=all; counter++){

        for(int i = 0; i < n; i++) {
            a[x][y] = counter++;
            y++;
        }
        x++; 
        y--;

        for(int i = 0; i < n-1; i++) {
            a[x][y] = counter++;
            x++;
        }
        x--; 
        y--;

        for(int i = 0; i < n-1; i++) {
            a[x][y] = counter++;
        }
        x--; 
        y++;

        for(int i = 0; i < n-2; i++) {
            a[x][y] = counter++;
        }

        y++; 
        x++; 
        n = n-2;  //n = n - 2; all = n * n times?
    }

    for(int i = 0; i<n; i++){
        printf("a");
        for(int j = 0; i<n; j++){
            printf("a");
            printf("%d ", a[i][j]);

        }
        printf("\n");
    }
}

特别关注这一行

n = n-2;  //n = n - 2; all = n * n times?