• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Z void * na struct *

0 głosów
262 wizyt
pytanie zadane 28 kwietnia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)

Hej

Powiedzmy, że mam taką funkcję (zwracającą 0 w przypadku sukcesu i 1 w przeciwnym wypadku).

int read_complex(void *a, void *b)
{
    if( a == NULL || b == NULL )
    {
        return 1;
    }
    float re1,im1;
    char znak_operatora;
    char znak_i;
    if(scanf("%f%c%c%f",&re1,&znak_operatora,&znak_i,&im1)!=4)
    {
        return 1;
    }
    if( im1 < 0)
    {
        return 1;
    }
    switch(znak_operatora)
    {
            case '-':
                im1 *= -1;
                break;
            case '+':
                break;
            default:
                return 1;

    }
    switch(znak_i)
    {
            case 'i':
                break;
            default:
                return 1;

    }
    float re2,im2;
    if(scanf(" %f%c%c%f",&re2,&znak_operatora,&znak_i,&im2)!=4)
    {
        return 1;
    }
    if( im2 < 0)
    {
        return 1;
    }
     switch(znak_operatora)
    {
            case '-':
                im2 *= -1;
                break;
            case '+':
                break;
            default:
                return 1;
    }
     switch(znak_i)
    {
            case 'i':
                break;
            default:
                return 1;
    }
    return 0;
}

Ma ona za zadanie wprowadzić dwie liczby zespolone. Kod jest prawie gotowy dla tej funkcji oprócz jednej rzeczy. Zadanie, dla którego go rozpisuję wymaga, aby w ramach ujednolicenia zrobić parametry dla funkcji typu void *. Oczywiście to a i b w samym main to będą odpowiednio wskaźniki na dwie struktury tego samego typu. Pojawia się jednak pytanie jak mogę ot choćby w scanf-ach zamienić &re1 i &im1 tak, by odpowiednio wskazywać na &(a->re) i &(a->im)?

1 odpowiedź

+1 głos
odpowiedź 28 kwietnia 2020 przez mokrowski Mędrzec (158,940 p.)
wybrane 28 kwietnia 2020 przez Hubertius
 
Najlepsza

Po prostu rzutuj wskaźnik na typ docelowy:

#include <stdio.h>

struct MyComplex {
    float real;
    float imag;
};

void setValue(void * value) {
    struct MyComplex * ptr_cplx = value;
    ptr_cplx->real = 42.3;
    ptr_cplx->imag = 33.3;
}

int main(void) {
    struct MyComplex cplx;
    setValue(&cplx);
    printf("Real: %f, Imag: %f\n", cplx.real, cplx.imag);
    return 0;
}

BTW.... wiesz że typ zespolony jest obecny w C w nagłówku <complex.h> ?

komentarz 28 kwietnia 2020 przez Hubertius Bywalec (2,970 p.)
Wiem, ale w zadaniu jest wymagane, abym samemu to robił bez korzystania choćby z pomocy pod postacią powyższego nagłówka.

Podobne pytania

0 głosów
3 odpowiedzi 3,821 wizyt
pytanie zadane 2 kwietnia 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
+1 głos
1 odpowiedź 425 wizyt
pytanie zadane 20 stycznia 2022 w C i C++ przez Krzysztofs1234 Użytkownik (890 p.)
0 głosów
0 odpowiedzi 267 wizyt
pytanie zadane 29 kwietnia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)

93,631 zapytań

142,554 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...