Я пытаюсь вернуть 2 указателя из этой функции, которая меняет местами их значения и отображает их на экране. Проблема в том, что я все время получаю сообщение об ошибке компилятора, в котором говорится, что я не могу вернуть целые числа в функции типа void. Может кто-нибудь показать мне, что я делаю не так?
void numberSwap(int *number1, int *number2);
int main()
{
int x,
y;
scanf("%d%d", x, y);
printf("before swap: %d and %d", x, y);
printf("after swap: %d and %d", numberSwap(&x, &y));
return(0);
}
void numberSwap(int *number1, int *number2)
{
int t;
t = *number1;
*number1 = *number2;
*number2 = t;
return
}
Так следует ли мне изменить его на функцию int и должно ли это сработать?
Это поможет? Вы можете вернуть только один int из функции int. Но это странно, потому что в вашем коде вы ничего не возвращаете ни от одной функции (кроме main).
Показанный код не возвращает int. Фактически он не компилируется из-за отсутствия точки с запятой после return
Пол, scanf("%d%d", x, y); ожидает, что x,y будет int *, а не int. Какой компилятор вы используете, который не предупреждает об этом?
Без обид, но самое время начать читать свой учебник C.





Вы используете функцию numberSwap в выражении, ожидающем int (т.е. как параметр для printf), но возвращаемый тип функции - void. Вот что вызывает ошибку.
Вам просто нужно вызвать функцию в отдельном операторе. Когда он вернется, x и y будут обновлены, так что вы можете их распечатать.
printf("before swap: %d and %d", x, y);
numberSwap(&x, &y);
printf("after swap: %d and %d", x, y);
У вас тоже есть проблема:
scanf("%d%d", x, y);
Поскольку спецификатор формата %d для scanf ожидает int *, но вы передаете int. Вам необходимо передать адреса x и y:
scanf("%d%d", &x, &y);
Во-первых, вы не можете вернуть int в функции типа void.