【问题标题】:Entering a 2d array in a frame in C在C中的框架中输入二维数组
【发布时间】:2011-04-28 13:52:54
【问题描述】:

我试图让用户输入一个二维数组,然后它会以类似框架的形式打印出该数组,我编写了代码并且它可以工作,但是在打印数组时,程序只打印第一行用户反复输入的内容是这样的:

Enter size
3
Enter Array
1 2 3
4 5 6
7 8 9

Your Array:
     a b c    
   # # # # # 
1  # 1 2 3 # 
2  # 1 2 3 # 
3  # 1 2 3 # 
   # # # # # 

这是我的代码:我觉得这是一个小错误,但我就是找不到。

#include <stdio.h>

int main(){
    int i,j;
    int y,x;
    int n,a,num,readNum,z;
    char ch;

    ch = 'a';
    num = 1;

    printf("Enter size\n");
    readNum = scanf("%d",&z);

    int Board[z][z];
    n = z+2;
    a = n+1;

    printf("Enter Array\n");
    for(x=0;x<z;x++){
        for(y=0;y<z;y++){
           readNum = scanf("%d",&Board[x][y]);
        }
    }

    printf("\nYour Array:\n");
    x=0;
    for(i=0;i<a;i++){
        y=0;
        for(j=0;j<a;j++){
            if(((i==0)&&(j==1))||
               ((i==1)&&(j==0))||
               ((i==0)&&(j==n))||
               ((j==0)&&(i==n))){
                printf("   ");
            }
            if ((i==0)&&(j==0)){
                printf("  ");
            }
            if ((i==0 && (j>=2 && j<n))){
                printf("%c ",ch);
                ch++;
            }
            if ((j==0) &&(i>=2 && i<n)){
                printf("%d  ",num);
                num++;
            }
            if(((i==1) && (j>=1 && j<=n))||
               ((i==n) && (j>=1 && j<=n))||
               ((j==1) && (i>1  && i<n ))||
               ((j==n) && (i>1  && i<n ))){
                printf("# ");
            }
            if((i>1 && i<n) && (j>1 && j<n)){ 
                printf("%d ",Board[x][y]);
                y++;
            }
        }
        printf("\n");
    }
    return 0;
}

【问题讨论】:

  • 你好像没有更新x
  • print row of stars; [print star, print row 0, print star, linefeed; repeat n rows;] print row of stars; 有什么问题

标签: c loops multidimensional-array


【解决方案1】:

之后

     printf("\nYour Array:\n");
     x=0; 

你永远不会改变x

【讨论】:

  • 我试图在每个循环中增加 x,但它并没有相对于 j 增加,所以数组只是打印出随机数,你知道我可以把它放在哪里让它实际工作吗?
  • printf("\n") 之后插入x++。您可能需要使用-1-2 初始化x:我没有密切关注那个具体问题。
【解决方案2】:

当你完成一行时,你需要增加x

修复很小:

            if((i>1 && i<n) && (j>1 && j<n)){ 
                printf("%d ",Board[x][y]);
                y++;
                if ((y%z) == 0)
                    x++;
            }

当你有zys 时,是时候向下一行了(增量 x)。

以下代码,即我修改后的代码,打印出正确的行(我尝试了最多 5 行):

#include <stdio.h>

int main(){
    int i,j;
    int y,x;
    int n,a,num,readNum,z;
    char ch;

    ch = 'a';
    num = 1;

    printf("Enter size\n");
    readNum = scanf("%d",&z);

    int Board[z][z];
    n = z+2;
    a = n+1;

    printf("Enter Array\n");
    for(x=0;x<z;x++){
        for(y=0;y<z;y++){
           readNum = scanf("%d",&Board[x][y]);
        }
    }

    printf("\nYour Array:\n");
    x=0;
    for(i=0;i<a;i++){
        y=0;
        for(j=0;j<a;j++){
            if(((i==0)&&(j==1))||
               ((i==1)&&(j==0))||
               ((i==0)&&(j==n))||
               ((j==0)&&(i==n))){
                printf("   ");
            }
            if ((i==0)&&(j==0)){
                printf("  ");
            }
            if ((i==0 && (j>=2 && j<n))){
                printf("%c ",ch);
                ch++;
            }
            if ((j==0) &&(i>=2 && i<n)){
                printf("%d  ",num);
                num++;
            }
            if(((i==1) && (j>=1 && j<=n))||
               ((i==n) && (j>=1 && j<=n))||
               ((j==1) && (i>1  && i<n ))||
               ((j==n) && (i>1  && i<n ))){
                printf("# ");
            }
            if((i>1 && i<n) && (j>1 && j<n)){ 
                printf("%d ",Board[x][y]);
                y++;
                if ((y%z)==0)
                   x++;
            }
        }
        printf("\n");
    }
    return 0;
}

【讨论】:

  • 我究竟可以把 x++ 放在哪里?因为我试过了,但它只是通过打印随机数破坏了数组
  • 就在最后的printf("\n"); 之前。
  • 它只打印帧中第一行的最后一行,其余行是随机数
  • 抱歉解决方案不好,请查看更新的答案,我想你会喜欢的。
  • @Henry James 其余行是随机数 => 您是否尝试打印出 Board 数组的实际内容?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 2013-01-10
  • 2017-03-15
相关资源
最近更新 更多