Przejście do kolejnej linii w pliku tekstowym [c]

Witam.

mam plik tekstowy, a w nim:

test

1

22

333

4444

I chciałbym zrobić program, który zapisywałby pierwsza linijkę do tablicy charów, a resztę do 4 zmiennych typu int.

Potrafię pierwszą i drugą linijkę pobrać, ale reszty nie idzie :confused: Próbowałem funkcją fseek.

Jest jakaś funkcja, który przenosi wskaźnik na początek nowej linii ?

Pozdrawiam!

getline (ifstream, string)

Potem użyj string streamów i wszystko :wink:

Jeśli plik ma z góry ustaloną strukturę, to może fscanf? Dla tak małej ilości danych może się sprawdzić. Jeśli nie to można napisać własną funkcję w stylu getline ze std::string, zresztą można znaleźć dużo przykładowych implementacji w Internecie.

Pewno, że fscanf będzie najprostszy w tym przypadku.

Próbowałem fscanfem, ale działa mi to tylko, jak z góry wiem ile cyfr mają te liczby, które chcę pobrać do zmiennych, i to tylko wtedy kiedy liczby są oddzielone spacją, a nie jak są w kolejnych liniach. Może podam fragment kodu i mnie poprawicie, jeśli będzie coś do poprawienia:

Tym ładuję dane:

void Laduj(post *ja)

{

    int temp;

    if ((plik=fopen("test.txt", "r"))==NULL)

    {

        printf ("Nie mogę otworzyć pliku test.txt do zapisu!\n");

        getchar();[code]

exit(-10); } fscanf(plik,"%s",ja->Imie); fseek(plik,1,1); fscanf(plik,"%d",&temp); ja->wzrost=temp; fseek(plik,1,1); fscanf(plik,"%d",&temp); ja->wiek=temp; fseek(plik,1,1); fscanf(plik,"%d",&temp); ja->waga=temp; }

void Save(post ja)

{

    if ((plik=fopen("test.txt", "w"))==NULL)

    {

        printf ("Nie mogę otworzyć pliku test.txt do odczytu!\n");

        getchar();

        exit(-10);

    }

    fprintf(plik,"%s",ja.Imie);

    fseek(plik,1,1);

    fprintf(plik,"%d",ja.wzrost);

    fseek(plik,1,1);

    fprintf(plik,"%d",ja.wiek);

    fseek(plik,1,1);

    fprintf(plik,"%d",ja.waga);

}

Widzicie gdzieś jakieś błędy?

/edit: Teraz w ogóle nie działa… Zapisuje ładnie, ale odczytuje tylko imię, a reszta to jakieś krzaczki. A wczoraj czytało mi imię + jednocyfrowe dane …

Tym zapisuję:

A nie lepiej było to zrobić JEDNYM fscanfem?

fscanf(plik, "%s\n%d\n%d\n%d\n%d", str, &a, &b, &c, &d)

?

Zawsze zastanawiało mnie, czemu ludzie tak bardzo lubią utrudniać sobie życie i pracę. Chyba nigdy tego nie zrozumiem :frowning:

Takie coś popełniłem przed napisaniem poprzedniego posta i o dziwo działało. I będzie działać dla dowolnej liczby wierszy z liczbami w pliku.

#include 

#include 


int main()

{

    char tekst[255];

    int tab[4];

    int i;

    FILE *fp;


    fp = fopen ("C:\\Temp\\test.txt", "r");

    if (!fp)

    {

        fprintf (stderr, "Nie moge otworzyc pliku");

        exit (-1);

    }

    fscanf(fp, "%s", tekst);

    for(i = 0; i < 4; i++)

        fscanf(fp, "%d", &tab[i]);

    fclose(fp);


    printf("Wczytany tekst: %s\n", tekst);

    printf("Wczytane liczby:\n");

    for(i = 0; i < 4; i++)

        printf("%d\n", tab[i]);


    return 0;

}

O Boże! Że też o tym nie pomyślałem… Wstyd mi … Ale wielkie dzięki Fiołek :slight_smile: Teraz wszystko działa jak należy !