Пробламетический оператор равен Num[r,c]==Num[c,r]
и почему он таков, он сообщается компилятором при запуске gcc -Wall -Wstrict-prototypes -Werror test.c
как
ошибка: левый операнд выражения запятой не действует [-Werror= unused-value]
В Num[r,c]
есть оператор запятая между r
и c
, а свойство оператора запятой состоит в том, что он будет решать все аргументы, но учитывать толькоправые операнды, поэтому Num[r,c]
приводит к Num[c]
, и теперь вы сравниваете указатели Num[c]
и Num[r]
, которые не дадут правильного результата.
Вы хотели проверить, является ли матрица symmetric
или нет, для этого
Num[r,c]==Num[c,r]
==> Num[r][c] == Num[c][r]
А поскольку Num
является симметричной матрицей,Вы должны вычислить число rows
так, чтобы оно работало для любого массива, не жестко запрограммированного как size=4
.
size=4;
==> size = sizeof(Num)/sizeof(Num[0]);
И при сравнении Num[r][c]
и Num[c][r]
часть else
бесполезна, лучше удалите ее.
else{ /* not needed as if if block is false count value doesn't need to change */
count=count;
}