Значение l требуется в качестве левого операнда присваивания. Что это значит?

Извините, что беспокою вас снова, но я получаю сообщение об ошибке, которое я не совсем уверен, как решить. Я пытаюсь сделать функцию, которая печатает матрицу с установленным значением для ROW и COLUMN. Однако, когда я использую ROW или COLUMN внутри "for" для печати матрицы, компилятор отправляет мне эту ошибку:

ошибка: lvalue требуется как левый операнд присваивания

Я пытался прочитать другие подобные вопросы и попытаться выяснить, что именно означает ошибка в этом случае, но я не могу этого сделать.

Поэтому мой вопрос: что означает эта ошибка и как ее исправить?

Спасибо

#include <stdio.h>
#include <stdlib.h>

#define ROW 3
#define COLUMN 4
#define SS1 4
#define SS2 1
#define SORTED1 8
#define SORTED2 1
#define SORTED3 5



void matrixPrint (int m[ROW][COLUMN]){
        for (ROW = 0; ROW < 3; ++ROW){
                for (COLUMN = 0; COLUMN < 4; ++COLUMN){
                    printf("%4d", m[ROW][COLUMN]);
        }
        printf ("\n");
    }
}

2 ответа

Препроцессора #define создает текстовую подстановку, а не переменную. После предварительной обработки ваша программа выглядит следующим образом:

for (3 = 0; 3 < 3; ++3){
    for (4 = 0; 4 < 4; ++4){
        printf("%4d", m[3][4]);
    }
    printf ("\n");
}

Это, очевидно, неверно: вы не можете присваивать значения константам. В C-говорят, выражение, которое вы можете назначить, называется lvalue (значение, которое может появиться слева в назначении). Это должно объяснить ошибку, которую вы видите.

Чтобы исправить ошибку, введите две переменные цикла, вызовите их row а также columnи использовать их вместо ROW а также COLUMN:

for (int row = 0; row < ROW ; ++row){
    for (int column = 0; column < COLUMN; ++column){
        printf("%4d", m[row][column]);
    }
    printf ("\n");
}

Исправить, как это

void matrixPrint (int m[ROW][COLUMN]){
    int row, column;
    for (row = 0; row < ROW; ++row){
        for (column = 0; column < COLUMN; ++column){
            printf("%4d", m[row][column]);
        }
        printf ("\n");
    }
}
Другие вопросы по тегам