Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Fire/SOUL/CD

    félisten

    válasz Briganti #571 üzenetére

    Hali!

    Az fscanf() arra is jó, ha változó darabszámú érték van soronként.... :K
    csak azért írtam a korábbi módszert, mert az egyik lehetőséget feltételeztem, azaz fix számú érték szerepel soronként. itt egy példa ami demonstrálja a másik lehetőséget.
    (nem a legszebb, de a legáttekinthetőbb :DDD )

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

    int main()
    {
    FILE * FH;
    int szamok[9];

    if (!(FH=fopen("adat.txt","rt"))) {
    printf("Nem lehet megnyitni a fajlt...\nkilepes");
    exit(-1);
    }
    printf("%d",fscanf(FH,"%d;%d;%d;%d;%d;%d;%d;%d;%d;%d",
    &szamok[0], &szamok[1], &szamok[2], &szamok[3], &szamok[4], &szamok[5], &szamok[6], &szamok[7], &szamok[8], &szamok[9]));
    fclose(FH);
    return 0;
    }

    1. megnyitjuk a fájlt, ha nem lehet akkor hibával kilépünk
    2. beolvassuk az első sorát a SZAMOK tömb-be illetve kiíratom hogy hány adatot sikerült beolvasni
    3. lezárom a fájlt, kilépés

    ez utóbbi lehetőség nagyon fontos. Az fscanf visszad egy egész értéket, ami azt tartalmazza hogy hány darab adatot tudott beolvasni
    Ha az első sorban csak 1 adat volt, akkor 1-et ír ki, ha az első sorban 6 adat volt, akkor meg 6-ot ír ki a progi, stb, azaz tudod, hogy az adott sorban, hány adatod volt. Ezek bekerülnek a tömb-be, egy ciklussal végigjárva(aminek a ciklusszámlálója annyi, mint amennyit az fscanf() visszaadott) könnyen kikeresheted a legkisebbet.

    Ahhoz hogy ez menjen, persze kell tudnod, a szöveges fájlod egy sorában mennyi szám szerepelhet MAXIMÁLISAN. Ennyi elemszámú tömböt állíts elő és kész.

    Fire

    UI: bocs, hogy én is ide pakoltam a C-topic helyett... :R

    [ Szerkesztve ]

    Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)

  • Jester01

    veterán

    válasz Briganti #568 üzenetére

    Ha pedig az utolsó szám után közvetlenül jön a sorvég, akkor pl. egy "%d%c" formátum és a beolvasott plusz karakter ellenőrzése elárulja, hogy az utolsó számnál tartasz-e.

    Jester

  • Fire/SOUL/CD

    félisten

    válasz Briganti #568 üzenetére

    Hali!

    Ha C-ben kell valamit segíteni, akkor a következőkben, majd a C topic-ba írd... :K

    Az fscanf jó megoldás, feltéve ha a szöveges állományod fix formátumú, azaz minden sorban azonos számú érték szerepel. Tehát nem lehet, hogy az első sorban 6 míg a másodikban csak pl 4 integer szerepel. Nem írtad, hogy konkrétan hány szám van egy sorban, ezért én most 3-nak veszem.

    Léterhozod a 3 integert
    int szam1,szam2,szam3;

    megnyitod a fájlt, és beolvasod az értékeket
    fscanf(f,"%d %d %d", &szam1,&szam2,&szam3);
    Ebben esetben a 3 szám szóközzel van elválasztva a szöveges fájlban.

    Ha más karakterrel van elválasztva példul pontosvesszővel, akkor így:
    fscanf(f,"%d;%d;%d", &szam1,&szam2,&szam3);
    Tehát egyszerűen ugyanazt a karaktert kell az fscanf-nél használni mint amivel a szöveges fájlban is el vannak választva az adatok...

    Szöveges fájlban ENTER karakterig tart egy sor. Amikor végigolvasod a fájlt minden egyes fscanf egy sor...

    Fire.

    [ Szerkesztve ]

    Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)

Új hozzászólás Aktív témák