Заполнение двумерного массива С - PullRequest
0 голосов
/ 02 марта 2011
#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

Ответы [ 5 ]

4 голосов
/ 02 марта 2011

Несколько вопросов сразу:

  • Массив 7x7, вы хотите, чтобы он был int my_data[8][8];
  • Вместо того, чтобы использовать число для размера массива снова и снова, определите константу #define FOO 8
  • Петли не ограничены должным образом, должны быть for (x=0;x<8;x++). (снова см. мое примечание об использовании определенной константы для размера)
  • Вы не сохраняете значение в массиве, вы сохраняете его в переменной итератора.
  • С двумя отдельными циклами for вы не сможете заполнить всю таблицу, пересмотрите эту структуру, потому что вам, вероятно, придется использовать вложенные циклы.
2 голосов
/ 02 марта 2011

Вы можете использовать один цикл, вложенный в другой:

#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;
    }
}
1 голос
/ 02 марта 2011
for (x=0;x<9;x++) {
    printf("Enter rows:");
    scanf("%i",&x);
   // printf("%i\n",my_data[x][y]);
}

То, что происходит здесь, это то, что вы меняете значение x.Вы ничего не сохраняете в массиве.

Аналогично для y

Также вы должны выполнить итерацию от 0 до 6 (включительно)

Попробуйте

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, следовательно, видя, чтосодержимое памяти от предыдущего использования.

0 голосов
/ 02 марта 2011

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;
}
0 голосов
/ 02 марта 2011

int my_data[7][7]; - массив 7 x 7. Используйте int my_data[8][8]; для 8 x 8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...