logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak przekazać tablicę 2D do funkcji wczytującej float z pliku w C?

nakon 19 Lis 2006 11:38 2711 2
REKLAMA
  • #1 3239730
    nakon
    Poziom 13  
    Posty: 126
    Pomógł: 2
    Ocena: 1
    witajcie

    mam nastepujący problem:
    właśnie tworze program do działań na macierzach(tablicach dwuwymiarowych)

    jak należy przekazac tablice dwuwymiarową (o znanym rozmiarze) do funkcji wczytującej z pliku liczby typu float?
    int wczytywanie (tutaj rarumentem jest sciezka do pliku i tablica do której wczytuje)
    {..
    ...for (i=0 ; i<*w ; i++) //w,k to wymiary tablicy przeczytane z pierwszej linijki pliku
    for (j=0 ; j<*k ; j++)

    fscanf (plik,"%f",???)!=EOF) <--jak powinno byc tytaj wcytywane?
    ....
    }

    i w jaki sposób tą funkcje wywołać? gdzie i ile powinno być * i &

    jesli napisze w ten sposob:
    int wczyt (char *scie,float **tab)
    {............fscanf(plik,"%f ",&tab[i][j])......} to wczytuje, ale nie zwraca (nie modyfikuje zawartosci - dziala tylko na lokalnej kopii)
    a kompilator ( dev ) wywala ostrzezenie : [Warning] passing arg 2 of `read' from incompatible pointer type //niekompatabilny wskaznik do tablicy, aledlaczego??
  • REKLAMA
  • #2 3241082
    wiesniak
    Poziom 31  
    Posty: 1006
    Pomógł: 231
    Ocena: 52
    zamiast fscanf polecam użyć np fgetc (czytanie znaku) albo fgets (czytanie ciągu). jak wrzucisz w google, to trafisz na stronkę www.cplusplus.com - tam znajdziesz dokładny opis oraz przykład użycia.
  • #3 3241185
    nakon
    Poziom 13  
    Posty: 126
    Pomógł: 2
    Ocena: 1
    tylko ze później musiałbym to konwertować jeszcze na liczby - i działałoby to tak samo - bo teraz funkcja nie modyfikuje zawartosci tablicy, tylko działa na lokalnej kopii!! cały problem rozchodzi się wskazniki!!

    ROZWIAZANIE PROBLEMU - doszedłem w końcu jak to zrobić
    w nagłówku ma byc tak
    #define MAX 10; //MAX to maksymalny rozmiar tablicy
    int wczyt(....,float tab[MAX][MAX] ,..)
    {....fscanf (plik,"%f",&tab[i][j]).....}

    a wywolanie:
    float mac[MAX][MAX];
    wczyt(......., mac, ....)

    problem rozwiazany(tylko ze na tablicach statycznych o rozmiarze nieprzekraczajcym MAX) -ale najwazniejsze ze zachowuje wartosci
REKLAMA