Мне было предложено создать код, который будет переупорядочить 3 введенных целых числа в порядке возрастания/убывания с помощью указателей.Возврат указателя на ошибки функции
Мне нужно использовать функцию order()
, чтобы вернуть указатель на любую функцию ascending3()
или descending()
, в зависимости от того, какое значение вводится «e».
Я продолжаю получать ошибку в строке, указанной в функции readInts(), и не знаю, как ее исправить.
ОШИБКИ
lvalue required as unary ‘&’ operand" -- The error for `ptr = &(order(e))`
warning: assignment makes pointer from integer without a cast -- The error for `ptr=order(e)`
Pointer код
void readInts(){
int *a,*b,*c;
char e;
int (*ptr1)(int*,int*,int*);
int result;
printf("Enter Integer 1:");
scanf("%d", a);
printf("Enter Integer 2:");
scanf("%d", b);
printf("Enter Integer 3:");
scanf("%d", c);
printf("Enter either A or D:");
scanf(" %c", &e);
ptr1 = &(order(e)); /*ERROR HERE*/
result = (*ptr1)(a,b,c);
printf("%d %d %d", a, b, c);
}
Функции
int ascending3(int* x, int* y, int* z)
{
/*removed sorting code for the sake of shortening the question*/
*x=smallest;
*y=middle;
*z=largest;
}
int descending(int* x, int* y, int* z)
{
int swap;
ascending3(x,y,z);
swap=*x;
*x=*z;
*z=swap;
}
int (*order(char e))(int*x ,int*y,int*z)
{
if(e=='a')
{
return ascending3;
}
else if(e =='d')
{
return descending;
}
return;
}
Вы определяете или объявляете 'порядок' перед' readInts'? – Barmar
Это должно быть 'ptr1 = order (e)', но функция 'order' должна быть объявлена до того, как вы ее используете в' readInts'. – Barmar
... и 'result = (* ptr1) (a, b, c);' должен быть просто 'result = ptr1 (a, b, c);'. – alk