Ввод 2d массива в кадре в C - PullRequest
0 голосов
/ 28 апреля 2011

Я пытаюсь, чтобы пользователь ввел 2d массив, а затем он распечатал бы этот массив в виде рамки, я написал код и он работает, но когда дело доходит до печати массива, программа просто печатает первую строку из того, что пользователь вводил снова и снова, как это:

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;
}

Ответы [ 2 ]

0 голосов
/ 28 апреля 2011

После

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

вы никогда не измените x.

0 голосов
/ 28 апреля 2011

Вам нужно увеличить x, когда вы закончите линию.

Исправление мало:

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

Когда у вас было z y с, пришло времяперейти на одну строку вниз (с шагом 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...