предупреждение: присваивание делает указатель из целого числа без приведения [-Wint-преобразование] - PullRequest
0 голосов
/ 11 декабря 2018

Хочу предложить пользователю ввести 3 цифры.Затем поменяйте местами первое число со вторым, второе число с третьим и третье с первым, вызвав функцию с именем «swap».

Функции в C не могут возвращать более одного значения, поэтомуЯ решил создать структуру с указателями, которые позже я буду использовать в своей функции.Затем я создал три указателя, которые будут хранить адрес каждого из чисел, чтобы я мог разыменовать эти числа в своей функции (как показано ниже)

Number.pa = *ppb;
Number.pb = *ppc;
Number.pc = *ppa;

Вот мой код:

#include <stdio.h>

void swap(); // a = b, b = c, c = a

struct Numbers {

    int *pa, *pb, *pc;

} ;

int main(void) {

    struct Numbers Number; // Structure to hold the values of the three variables.

    int a, b, c;
    int *ppa, *ppb, *ppc;                                              
    printf("\n Please enter three integer numbers: ");  
    scanf("%d%d%d", &a, &b, &c);
    ppa = &a; ppb = &b; ppc = &c;                                         
    swap(a, b, c, Number, *ppa, *ppb, *ppc);
    printf("\n %d \t %d \t %d \n", Number.pa, Number.pb, Number.pc);
}

void swap(int a, int b, int c, struct Numbers Number, int *ppa, int *ppb, int *ppc) { 

    Number.pa = *ppb;
    Number.pb = *ppc;
    Number.pc = *ppa;  

   } ;

1 Ответ

0 голосов
/ 11 декабря 2018

Большинство аргументов вашей функции подкачки либо бессмысленны, либо работают просто на угадывание (или и то, и другое).Присвоение фактически требует, чтобы вы «вращали» значения от a до c.Так сделайте это, и только это.

#include <stdio.h>

void swap(int *pa, int *pb, int *pc);

int main() 
{
    int a, b, c;

    printf("\n Please enter three integer numbers: ");  
    if (scanf("%d %d %d", &a, &b, &c) == 3)
    {
        swap(&a, &b, &c);
        printf("%d %d %d \n", a, b, c);
    }
    return 0;
}

void swap(int *pa, int *pb, int *pc)
{ 
    int tmp = *pa;
    *pa = *pb;
    *pb = *pc;
    *pc = tmp;
}

Хватит читать больше в задании, чем там.Если это звучит просто, возможно, так и есть.Предупреждение было связано с передачей значения разыменованных указателей в int (то есть int значения) функции, ожидающей int указателей;не int значения.Как видите, вам не нужно ничего этого делать (и не нужно было вообще).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...