Как получить доступ к элементам матрицы с помощью циклов - PullRequest
0 голосов
/ 05 мая 2019

У меня есть два многомерных массива 4x4, а строки и столбцы помечены как A, B, C и D.Когда пользователь вводит координаты, значение выбранного selected_location_info изменяется на значение bomb_location_info.Так, например, если был введен AA, тогда значение [1][1] в known_location_info изменяется на значение [1][1] в bomb_location_info.На данный момент я получаю только первый элемент, который нужно изменить, независимо от того, какие координаты введены.Что не так в моей петле?

char inputRow;
char inputColumn;
char letterA = 'A';

void display(int known_location_info[][DIM], int size) {

    printf("  A  B  C  D\n");

    for (int row = 0; row < DIM; row++) {

        printf("%c", letterA);
        letterA++;

        for (int column = 0; column < DIM; column++) {
            printf("%d ", known_location_info[row][column]);
        }
        printf("\n");
    }

    printf("Please select a row and column: ");
    scanf("%c, %c", &inputRow, &inputColumn);
}

void update_known_info(int row, int col, int bomb_location_info[][DIM], 
                       int known_location_info[][DIM]) {

    for (inputRow = letterA; inputRow < DIM; inputRow++) {
        for (inputColumn = letterA; inputColumn < DIM; inputColumn++) {
            row++;
            col++;
        }
    }

    known_location_info[row][col] = bomb_location_info[row][col];
}

Ответы [ 2 ]

0 голосов
/ 05 мая 2019
#include <stdio.h>
#include <assert.h>

#define DIM 4

void display(int known_location_info[][DIM]) {

    printf("  A  B  C  D\n");

    for (int row = 0; row < DIM; ++row) {
        printf("%c ", 'A' + row);
        for (int column = 0; column < DIM; ++column)
            printf("%2d ", known_location_info[row][column]);
        putchar('\n');
    }

    printf("Please select a row and column: ");
    char inputRow; char inputColumn;
    if (scanf(" %c, %c", &inputRow, &inputColumn) != 2 ||
        inputRow < 'A' || 'A' + DIM < inputRow ||
        inputColumn < 'A' || 'A' + DIM < inputRow)
    {
        // handle input error
    }
}

void update_known_info(char row, char col, int bomb_location_info[][DIM],
                       int known_location_info[][DIM])
{
    row -= 'A';
    col -= 'A';

    assert(0 <= row && row < DIM && 0 <= col && col < DIM);

    known_location_info[row][col] = bomb_location_info[row][col];
}
0 голосов
/ 05 мая 2019

матрица доступа с использованием символов, отсканированных пользователем, не очень хорошая идея.потому что каждый символ представлен кодом ASCII.следовательно, у вас будет неявное смещение значения ascii буквы (например, ASCII fo A = 64). В других матрицах они похожи на массивы. Они индексируются начиная с 0. Вы можете восстановить смещение ascii перед запуском ваших циклов..

...