Значение 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");
}
}