繁体   English   中英

填充二维数组C

[英]Filling two dimensional array C

#include <stdio.h>

int main()
{
    //Variables
    int x=0,y=0;
    int my_data[7][7];
    for (x=0;x<9;x++) {
        printf("Enter rows:");
        scanf("%i",&x);
       // printf("%i\n",my_data[x][y]);
    }
    for(y=0;y<9;y++) {
        printf("Enter columns: ");
        scanf("%i", &y);
        //printf("%i\n",my_data[x][y]);
    }
    for(y=0;y<9;y++) {
    printf("%i\n",my_data[0][y]);
    }
    return 0; //Return process complete.
}
  1. 声明一个8X8整数数组my_data
  2. 提示用户输入数据以填充8X8数组my_data
  3. 打印每一行所有元素的总和
  4. 打印8X8数组中所有元素的总和
  5. 打印8x8数组对角线上所有元素的总和。

我做错了什么? 当我输入1,2,3,4,5,6,7,8; 1,2,3,4,5,6,7,8我回来了:

3612392
2686632
1966142592
3604480
0
1966142601
1825884643
4
3612396

马上有几个问题:

  • 数组是7x7,您希望它是int my_data[8][8] ;
  • 定义一个常量#define FOO 8而不是一遍又一遍地使用数字作为数组的大小
  • 循环的边界不正确,应该for (x=0;x<8;x++) (再次,请参见我关于使用定义的常量作为大小的注释)
  • 您没有将值保存到数组,而是将其保存到迭代器变量。
  • 使用两个单独的for循环,您将无法填充整个表,请重新考虑此结构,因为您可能必须使用嵌套循环。

您可以使用一个嵌套在另一个循环中的循环:

#define SIZE 8

for (i = 0; i < SIZE; i++) {
    for (j = 0; j < SIZE; j++) {
        printf("(%d,%d): ", i+1, j+1);
        scanf("%d", &value);
        array[i][j] = value;
    }
}
for (x=0;x<9;x++) {
    printf("Enter rows:");
    scanf("%i",&x);
   // printf("%i\n",my_data[x][y]);
}

这里发生的是您更改x的值。 您不会在阵列上保存任何内容。

对于y同样

另外,您应该从06 (含)进行迭代

尝试

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

要么 :

int row , col;
for (row=0; row<7; row++) 
{
    for (col=0; col<7; col++) 
    {
        scanf("%d" , &ticTacToeBoard[row][col]);
    }
}

您看到的是数组在声明时所具有的值。 这样做的原因是,当您在C声明变量而不对其进行初始化时,如您的情况,您的程序仅使用足够的内存将数据存储到内存中,但没有将该内存设置为0 ,因此可以看到内存来自以前的用法。

int my_data[7][7]; 是7 x 7的数组。 使用int my_data[8][8]; 8 x 8。

my_data是一个数组,它的空间为49 int ,而不是64!

在for循环中,您要使用scanf及其地址来更改循环控制变量本身!

我想你要:

#include <stdio.h>

#define ROWS 8
#define COLUMNS 8

int main(void) {
  int my_data[ROWS][COLUMNS];
  int rows[ROWS];
  int cols[COLUMNS];
  size_t i, row, col;

  /* input rows */
  printf("Enter rows: ");
  fflush(stdout);
  for (i = 0; i < ROWS; i++) scanf("%d", &rows[i]);

  /* input columns */
  printf("Enter cols: ");
  fflush(stdout);
  for (i = 0; i < COLUMNS; i++) scanf("%d", &cols[i]);

  /* calculate sums */
  for (row = 0; row < ROWS; row++) {
    for (col = 0; col < COLUMNS; col++) {
      my_data[row][col] = rows[row] + cols[col];
    }
  }

  /* print results */
  for (row = 0; row < ROWS; row++) {
    for (col = 0; col < COLUMNS; col++) {
      printf("%d ", my_data[row][col]);
    }
    puts("");
  }

  return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM