Wskaźnik do funkcji

0

Hej! (:

Chyba niezupełnie rozumiem wskaźniki do funkcji, mam za zadanie napisać program, który ma zapisywać liczby zespolone do pliku tekstowego i binarnego z użyciem wskaźników. Napisałam właściwie dopiero początek, ale nie mam pojęcia co zrobiłam źle, że wyskakuje błąd (miejsce zaznaczone komentarzem).

Kod:

 #include <stdio.h>
#include <stdlib.h>

/*struct zespolona{
        float re;
        float im;
        };

struct zespolona_modul{
        struct zespolona;
        float modul;
        };
*/
float los(void){
    srand(time(NULL));
    return (rand()%20);
}

void los_bin(int n){
    int i;
    FILE *plik;

    plik=fopen("zesp_bin", "wb");
    if(plik==NULL){
		printf("Blad odczytu pliku\n");
		exit(5);
	}
	for(i=0;i<n;i++)
        fwrite(los, sizeof(float), 1, plik);
    fclose(plik);
}

void los_text(int n){
    int i;
    FILE *plik;

    plik=fopen("zesp_txt", "w");
    if(plik==NULL){
		printf("Blad odczytu pliku\n");
		exit(5);
	}
    for(i=0;i<n;i++)
        fprintf(plik, "%f\n", los());
    fclose(plik);
}

void bin_or_text(void(*wfun), int n){                             // i tu jest blad.
    (*wfun)(n);
}

int main(void){
    int n; // ilosc liczb
    char ch;
    void (*wfun)(int);
    puts("Podaj ilosc liczb, ktorych modul chcesz policzyc.");
    scanf("%d", &n);
    puts("Dzialac na pliku binarnym(wpisz 'B'), czy tekstowym ('T')?");
    scanf("%s", &ch);
    if(ch=='B'){
        wfun=los_bin;
    }
    else if (ch=='T'){
        wfun=los_text;
    }
    else {puts("Nie wybrano opcji"); exit(1);}

    bin_or_tekst(wfun, n);
    printf("Wylosowano %d liczb i zapisano do pliku");


return 0;
}
 
0
void bin_or_text(void (*wfun)(int), int n)
0

Mam kolejne pytanie odnośnie tego programu. W jego dalszej części mam coś takiego
Kod:

 
    FILE *plik;
    plik=fopen("zesp_txt", "r");
    i=0;
    while(feof(plik)==0){
        fscanf(plik, "%f ", &tab_zm[i].z.re);
        printf("%f", tab_zm[i].z.re);
        fscanf(plik, "%f", &tab_zm[i++].z.im);
        printf("%f", tab_zm[i].z.re);
    }

gdzie:

struct liczba{
        float re;
        float im;
        };

struct zesp_mod{
        struct liczba z;
        float modul;
        };

pamięć alokowałam w ten sposób:

 struct zesp_mod *tab_zm;
tab_zm = (struct zesp_mod*) malloc (sizeof(struct zesp_mod) * n);

n-ilosc liczb
I nie wiem dlaczego fscanf nie czyta tego, co chcę, tzn kolejnych liczb zapisanych w pliku zesp_txt.

0

O kur..de. 'ks' zamiast 'x' i godzina szukania błędu.
używaj jakiegoś sensownego IDE, które ci podkreśli takie literówki.

0
    while(fscanf(plik,"%f%f",&tab_zm[i].z.re,&tab_zm[i].z.im)==2)
       {
        printf("%f%+fii ", tab_zm[i].z.re, tab_zm[i].z.im);
        ++i;
       }
0

Dzięki wielkie Dragon :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1