Firetheestle
@Firetheestle

Как избавиться от ошибки invalid type argument of unary (have ) в си?

Написал код, вроде правильный,но вылезли ошибки от которых я не могу избавиться даже смотря ответы на зарубежных форумах. Вставил код целиком. Пишу в Atom компилирую через gcc
Вот что выдает компилятор:
spoiler

C:\Users\Firetheestle\YandexDisk\ТТИТ\Labs>gcc Kimlaba7.c -o Kimlaba7.exe
Kimlaba7.c: В функции :
Kimlaba7.c:20:23: ошибка: invalid type argument of unary <*> (have )
printf("%2d \n",*(X+i*4+j));
^
Kimlaba7.c: В функции :
Kimlaba7.c:31:19: ошибка: invalid type argument of unary <*> (have )
int i=0,j=0,max=*(X+i*4+j),maxj=0;;
^
Kimlaba7.c:34:14: ошибка: invalid type argument of unary <*> (have )
if(max>*(X+i*4+j)){
^
Kimlaba7.c:35:13: ошибка: invalid type argument of unary <*> (have )
max=*(X+i*4+j);
^
Kimlaba7.c:39:5: ошибка: invalid type argument of unary <*> (have )
*(X+i*4+max)=0;
^
Kimlaba7.c: В функции :
Kimlaba7.c:45:8: предупреждение: при передаче аргумента 1 указатель преобразуется в целое без приведения типа
VVOD(A);
^
Kimlaba7.c:6:5: замечание: expected but argument is of type
int VVOD(int X){
^
Kimlaba7.c:46:9: предупреждение: при передаче аргумента 1 указатель преобразуется в целое без приведения типа
VIVOD(A);
^
Kimlaba7.c:15:5: замечание: expected but argument is of type
int VIVOD(int X){
^
Kimlaba7.c:47:15: предупреждение: при передаче аргумента 1 указатель преобразуется в целое без приведения типа
MAXANDOBMEN(A);
^
Kimlaba7.c:30:5: замечание: expected but argument is of type
int MAXANDOBMEN(int X){

Компилирую командой:
gcc Kimlaba7.c -o Kimlaba7.exe
А вот сам код:
/*
Дана матрица В(8,8). Заменить в каждой строке  матрицы
      максимальный элемент нулем.
*/
#include<stdio.h>
int VVOD(int X){
  int i,j;
  printf("Vvedite massive:\n");
  for(i=0;i<4;i++){
    for(j=0;j<4;j++){
      scanf("%d",X+i*4+j );
    }
  }
}
int VIVOD(int X){
  int i,j,k=0;
  printf("Vivod massiva \n");
  for(i=0;i<4;i++){
    for(j=0;j<4;j++){
      printf("%2d \n",*(X+i*4+j));
      k++;
      if(k==4){
        printf("\n");
        k=0;
      }

    }
  }
}
int MAXANDOBMEN(int X){
  int i=0,j=0,max=*(X+i*4+j),maxj=0;;
  for(i=0;i<4;i++){
    for(j=0;j<4;j++){
      if(max>*(X+i*4+j)){
        max=*(X+i*4+j);
        maxj=j;
      }
    }
    *(X+i*4+max)=0;
  }

}
int main(){
  int A[4][4];
  VVOD(A);
  VIVOD(A);
  MAXANDOBMEN(A);
}

Помогите пожалуйста разобраться ;з
ПРОБЛЕМА РЕШЕНА ВОТ РАБОЧИЙ КОД:
/*
Дана матрица В(8,8). Заменить в каждой строке  матрицы
      максимальный элемент нулем.
*/
#include<stdio.h>
int VVOD(int* X){
  int i,j;
  printf("Vvedite massive:\n");
  for(i=0;i<4;i++){
    for(j=0;j<4;j++){
      scanf("%d", X+i*4+j );
    }
  }
}
int VIVOD(int* X){
  int i,j,k = 0;
  printf("Vivod massiva \n");
  for(i=0; i < 4; i++){
    for(j=0; j < 4; j++){
      printf("%3d", *(X+i*4+j));
      k++;
      if(k == 4){
        printf("\n");
        k = 0;
      }

    }
  }
}
int MAXANDOBMEN(int* X){
  int i = 0, j = 0, k = 0,max = 0, maxj = 0;
  for(i = 0; i < 4; i++){
    max = *(X+i*4+j);
    for(j = 0; j < 4; j++){
      if(max < *(X+i*4+j)){
        max = *(X+i*4+j);
        maxj = j;
      }
    }
    j=0;
    *(X+i*4+maxj) = 0;
}

}
int main(){
  int A[4][4];
  VVOD(*A);
  VIVOD(*A);
  MAXANDOBMEN(*A);
  VIVOD(*A);
}
  • Вопрос задан
  • 5690 просмотров
Решения вопроса 1
tsarevfs
@tsarevfs
C++ developer
Почитайте, (Не пугайтесь C++ в названии статьи, там разница только в том как выполняется печать на экран). Сейчас вы делаете странное. Параметры вы объявили как int, а не *int.

PS Рекомендую сразу отказаться от капса в названиях функций, так принято называть константы. Транслит тоже не желателен, воспользуйтесь переводчиком и учите английский. После "," ставится пробел. До и перед +-= и.т.д. тоже принято ставить пробелы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
так все же написано
*(X+i*4+max)=0;
так делать нельзя

X+i*4+max не является указателем

В VVod вообще не понятно что передали.
Вы бы определись ,с указателями ,ссылками или с чем работаете. Каша
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы