Użycie funkcji w main

0

Cześć. Czy mógłby mi ktoś powiedzieć w jaki sposób użyć fukncji wczytaj w mainie ? Szukam na internecie już jakiś czas nadal nie potrafię.

struct pgm {
	char nazwaPliku[100];
	char p2[10];
	char *komentarz;
	int s,d,w;
	int **wartosc;
};




struct pgm* wczytaj(char nazwa, struct pgm *foto){

    int i,j;
    FILE *plik;
    plik=fopen("pgm.pgm","r");

    if (plik==NULL)
    {
        fprintf(stderr,"Blad: Nie podano uchwytu do pliku\n");
        return(0);
    }
    fgets(foto->p2, 10, plik);
    fgets(foto->komentarz, 100, plik);
    fscanf(plik,"%d %d",&(foto->s), &(foto->d));
	fscanf(plik,"%d",(&foto->w));

	(foto->wartosc) = (int**)malloc(foto->s*sizeof(int));

	for(i = 0; i<(foto->s); i++) {
		foto->wartosc[i] = (int*)malloc(foto->d*sizeof(int));
	}

		for (i=0; i < (foto->s);i++) {
		for(j=0; j < (foto->d); j++) {
			fscanf(plik,"%d", &( foto->wartosc[i][j]) ); //
		}
	}

	fclose(plik);
	return foto;
}
2

Coś słabo szukałeś. Pierwszy wynik z google'a: https://pl.wikibooks.org/wiki/C/Funkcje#Wywo.C5.82ywanie_funkcji

0

Przy prostym przypadku nie mam problemu, ale w bardziej skomplikowanym już nie za bardzo.

Czy jest możliwość żeby mi ktoś napisał jak to ma wyglądać? Jest mi to bardzo potrzebne.

0

W takim stanie jak teraz funkcja jest, wywołanie musiałoby wyglądać tak (aby nie było UB):

 struct pgm {
    char nazwaPliku[100];
    char p2[10];
    char *komentarz;
    int s,d,w;
    int **wartosc;
};
 
struct pgm* wczytaj(char *nazwa, struct pgm *foto) // poprawione char => char *
{ 
    int i,j;
    FILE *plik;
    plik=fopen(nazwa,"r"); // zmienna zamiast literal string
 
    if (plik==NULL)
    {
        fprintf(stderr,"Blad: Nie podano uchwytu do pliku\n");
        return(0);
    }
    fgets(foto->p2, 10, plik);
    fgets(foto->komentarz, 100, plik);
    fscanf(plik,"%d %d",&(foto->s), &(foto->d));
    fscanf(plik,"%d",&(foto->w));
 
    (foto->wartosc) = (int**)malloc(foto->s*sizeof(int *)); // int => int *
 
    for(i = 0; i<(foto->s); i++) {
        foto->wartosc[i] = (int*)malloc(foto->d*sizeof(int));
    }
 
        for (i=0; i < (foto->s);i++) {
        for(j=0; j < (foto->d); j++) {
            fscanf(plik,"%d", &( foto->wartosc[i][j]) ); //
        }
    }
 
    fclose(plik);
    return foto;
}

int main(int, char **)
{
    struct pgm f;
    f.komentarz = malloc(100);
    wczytaj("pgm.pgm", &f);
    // ...
    // zwolnienie pamięci
}

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