Неверные операнды в двоичном / (имеют 'int *' и 'int')? - PullRequest
4 голосов
/ 11 декабря 2011

Каждый раз, когда я пытаюсь это сделать:

long crypt(int *integer)
{
printf("Enter five digit integer:\n");  
scanf("%i",integer);

int digit1=integer/10000;
int digit2=(integer%10000)/1000;
int digit3=(integer%1000)/100;
int digit4=(integer%100)/10;
int digit5=(integer%10)/1;

const char *digit1c[10];
const char *digit2c[10];
const char *digit3c[10];
const char *digit4c[10];
const char *digit5c[10];

(Это еще не все, но, похоже, проблема в этом, я добавлю остальное по запросу.)

, затем возвращается эта ошибка.:

math2.h:44:20: error: invalid operands to binary / (have ‘int *’ and ‘int’)
math2.h:45:21: error: invalid operands to binary % (have ‘int *’ and ‘int’)
math2.h:46:21: error: invalid operands to binary % (have ‘int *’ and ‘int’)
math2.h:47:21: error: invalid operands to binary % (have ‘int *’ and ‘int’)
math2.h:48:21: error: invalid operands to binary % (have ‘int *’ and ‘int’)

Я знаю, что это как-то связано с операторами, которые я использовал для инициализации цифр, и я попытался изменить их тип на "int *", но это не сработало.Так что же здесь происходит?

Ответы [ 3 ]

13 голосов
/ 11 декабря 2011

integer - это указатель до int (int*), поэтому, если вы хотите использовать int, на который он указывает, вы должны разыменовать его:

int digit1=(*integer)/10000; // and so on...
4 голосов
/ 11 декабря 2011

Проблема здесь в том, что тип integer равен int *, указатель, который не поддерживает операторы / и %. Есть два решения вашей проблемы.

  1. Разыменование integer, используя оператор * каждый раз, когда вы выполняете арифметику с ним.
    например int digit1=(*integer)/10000;

  2. Измените integer на тип int. Вы должны изменить сигнатуру функции, и scanf придется изменить, чтобы использовать оператор &, scanf("%i",&integer);

4 голосов
/ 11 декабря 2011

Параметр integer не является int объектом;это int* объект, то есть указатель.(И integer - вводящее в заблуждение имя для объекта указателя.)

Если вы измените:

int digit1=integer/10000;

на

int digit1 = *integer / 10000;

и внесите соответствующие изменения востальная часть вашего кода, по крайней мере, скомпилируется.integer - указатель;*integer - это объект int, на который он указывает.

(Кроме того, пробелы вокруг бинарных операторов облегчили бы чтение вашего кода. Еще одна веская причина использовать пробелы в том, что, если деление было обратным,тогда это:

int digit1=10000/*integer;

введет /* ... */ комментарий.)

...