c扫描2D阵列

时间:2018-04-01 18:25:36

标签: c arrays pointers

我对c语言很陌生并且遇到了一个我认为与指针有某些关系的问题(可能是错误的)。第一个输入显然是(当前)也决定了宽度和高度的输入数量数组。接下来的几个输入应该读取我自己的数组坐标和它的值。在最后一点我试图打印出阵列。出局是非常错误的。关于我做错了什么的提示扫描部分或打印或者两者兼而有之?

(如果st_objects是5,x_cord和y_cord的最大输入为4) 我只是试图将一些值更改为0以外的其他值。首先我需要用0值填充数组?

类似的东西:

0 0 0 2 0

0 2 3 0 0

0 0 0 0 2

0 0 0 1 2

0 0 2 0 3

Ps:对输入使用getchar函数会更好吗?

我的代码是:

 #include <stdio.h>

int main(){
  int st_objects;
  scanf("%d",&st_objects);

  int x_cord;
  int y_cord;
  int array[st_objects][st_objects];

  for(int i = 0; i < st_objects; i++){
    scanf("%d",&x_cord);
    scanf("%d",&y_cord);
    scanf("%d",&array[x_cord][y_cord]);

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

  return 0;
 }

3 个答案:

答案 0 :(得分:1)

您的扫描循环仅执行到st_object次(在本例中为5)。所以你只能输5个输入。但是如果你看到,该数组包含5 * 5 = 25个元素。所以这是一个出错的地方。

接下来,有更好的方法来扫描数组元素,比如

for(int i = 0; i < st_objects; i++)
   for(int j = 0; j < st_objects; j++)
         scanf("%d",&array[i][j]);

答案 1 :(得分:0)

我认为你并不完全了解2-D阵列及其元素&#39;位置。

另一件事,您可能会超出矩阵边界,因此请尝试检查x和y位置。

#include <stdio.h>

int main(){
              int st_objects;
              printf("Square Matrix length \n");

              scanf("%d",&st_objects);

              int x_cord;
              int y_cord;
              int array[st_objects][st_objects];

              for(int i = 0; i < st_objects*st_objects; i++){
              printf("x-position  \n");

             scanf("%d",&x_cord);
             printf("y-position   \n");

            scanf("%d",&y_cord);
            scanf("%d",&array[y_cord][x_cord]);

                                     }

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

          return 0;
       }

答案 2 :(得分:0)

您的代码中有2个错误.. 1)在第一个for循环中,i必须小于多维数组中的元素总数,即i <(st_objects * st_objects)。 2)for循环中的小错误..

    for(int j=0;j<st_objects;j++)

这是你的程序可以修改为(它适用于2x2):

    #include <stdio.h>
    int main(){
    int st_objects;
    scanf("%d",&st_objects);
    int x_cord;
    int y_cord;
    int array[st_objects][st_objects];
    for(int i = 0; i < (st_objects*st_objects); i++){
    printf("Enter x,y coordinate:\n");
    scanf("%d",&x_cord);
    scanf("%d",&y_cord);
    if(x_cord<st_objects&&y_cord<st_objects)
    {printf("Enter value at x,y:\n");
     scanf("%d",&array[x_cord][y_cord]);
    }else printf("\nWrong coordinate\n");
    }
    for(int i=0;i<st_objects;i++)
    {
     for(int j=0;j<st_objects;j++)
     {
      printf("%d\t",array[i][j]);
     }
     printf("\n");
    }

    return 0;
    }

我希望这会有所帮助:)