• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Odczyt danych z pliku

Object Storage Arubacloud
0 głosów
450 wizyt
pytanie zadane 2 czerwca 2017 w C i C++ przez AndekQR Użytkownik (880 p.)

Witam

Mam problem z odczytem danych mam taki oto plik tekstowy:

1
asd
A: sfdg
A: fhs
A: ery
A: xcvb
G: pop
G: rock
G: ssssss
34534
0
1

Co zrobić żeby program rozpoznawał wiersze rozpoczynające się od "A: " i wczytywał tam gdzie ja chce resztę znaków z tego samego wiersza? Analogicznie dla wierszy rozpoczynających się od" G: ".

Napisałem taką funkcje lecz nie działa. 

void odczyt(struct album **head_album, struct artysta **head_artysta, struct gatunek **head_gatunek)
{

    struct album *point;
    FILE *plik;
    plik = fopen("album.txt", "r");

    if(plik == NULL)
        printf("Blad podczas otwierania pliku!");
    else
    {
        int pomoc;
        while(feof(plik)==0)
        {
            struct album *nowy_album = (struct album*)malloc(sizeof(struct album));
            struct artysta *nowy_artysta = (struct artysta*)malloc(sizeof(struct artysta));
            struct gatunek *nowy_gatunek = (struct gatunek*)malloc(sizeof(struct gatunek));

            fscanf(plik, "%d", &nowy_album->id);
            fscanf(plik, "%s", nowy_album->tytul);
            while(feof(plik)==0)
            {
                if(getc(plik)==65)
                {
                    nowy_artysta->id_album=nowy_album->id;
                    fscanf(plik, "%s", nowy_artysta->imie);
                    fscanf(plik, "%s", nowy_artysta->nazwisko);
                    if(feof(plik)==0)
                        dodaj_artysta(head_artysta, nowy_artysta);
                }
            }
            while(feof(plik)==0)
            {
                if(getc(plik)==71)
                {
                    nowy_gatunek->id_albumu=nowy_album->id;
                    fscanf(plik, "%s", nowy_gatunek->nazwa);
                    if(feof(plik)==0)
                        dodaj_gatunek(head_gatunek, nowy_gatunek);
                }
            }
            fscanf(plik, "%d", &nowy_album->rok);
            fscanf(plik, "%d", &nowy_album->stan);
            fscanf(plik, "%d", &nowy_album->przesluchany);

            if(feof(plik)==0)
                dodaj_album(head_album, nowy_album);
        }
        printf("Odczyt udany!\n");
    }

    fclose(plik);
}

 

1 odpowiedź

0 głosów
odpowiedź 2 czerwca 2017 przez j23 Mędrzec (194,920 p.)
wybrane 4 czerwca 2017 przez AndekQR
 
Najlepsza

Czytaj liniami:

char line[1024];

char* ret = fgets(line, 1024, plik);

while (ret != NULL)
{
	struct album *nowy_album = (struct album*)malloc(sizeof(struct album));
	sscanf(line, "%d", &nowy_album->id);

	fgets(line, 1024, plik);
	sscanf(line, "%s", nowy_album->tytul);
	
	while((ret = fgets(line, 1024, plik)) != NULL)
	{
        if(line[1] != ':') break;
		switch(line[0]) 
		{
		case 'A': 
			/* tu dodajesz artystę, czytając resztę zawartości 'line' */
			break;
		case 'G': 
			/* a tu gatunek */
			break;
		};
	}
}

 

komentarz 2 czerwca 2017 przez AndekQR Użytkownik (880 p.)
edycja 2 czerwca 2017 przez AndekQR
1
polska
1996
0
1
Ajan
Akowalski
Apiotr
Adebski

Niestety to nie działa. Albo ja coś robię źle.Podczas próby odczytu program przestaje odpowiadać.

void odczyt(struct album **head_album, struct artysta **head_artysta, struct gatunek **head_gatunek)
{

    struct album *point;
    char line[1024];
    FILE *plik;
    plik = fopen("album.txt", "r");
    char* ret = fgets(line, 1024, plik);

    if(plik == NULL)
        printf("Blad podczas otwierania pliku!");
    else
    {
        int pomoc;
        while(ret)
        {
            struct album *nowy_album = (struct album*)malloc(sizeof(struct album));
            struct artysta *nowy_artysta = (struct artysta*)malloc(sizeof(struct artysta));
            struct gatunek *nowy_gatunek = (struct gatunek*)malloc(sizeof(struct gatunek));

           sscanf(line, "%d", &nowy_album->id);
           fgets(line, 1024, plik);
           sscanf(line, "%s", nowy_album->tytul);
            fgets(line, 1024, plik);
            sscanf(line, "%d", &nowy_album->rok);
            fgets(line, 1024, plik);
            sscanf(line, "%d", &nowy_album->stan);
            fgets(line, 1024, plik);
            sscanf(line, "%d", &nowy_album->przesluchany);
            dodaj_album(head_album, nowy_album);

            while((ret = fgets(line, 1024, plik))!=NULL)
            {
                switch(line[0])
                {
                case 'A':
                    nowy_artysta->id_album=nowy_album->id;
                    fgets(line, 1024, plik);
                    sscanf(line, "%s", nowy_artysta->imie);
                    fgets(line, 1024, plik);
                    sscanf(line, "%s", nowy_artysta->nazwisko);
                    dodaj_artysta(head_artysta, nowy_artysta);
                    break;
                case 'G':
                    nowy_gatunek->id_albumu=nowy_album->id;
                    fgets(line, 1024, plik);
                    sscanf(line, "%s", nowy_gatunek->nazwa);
                    dodaj_gatunek(head_gatunek, nowy_gatunek);
                    break;

                }
            }

        }
        printf("Odczyt udany!\n");
    }

    fclose(plik);
}

 

Po wczytaniu, wyświetla w nieskończoność pola.  (GPOP GROCK)

komentarz 2 czerwca 2017 przez j23 Mędrzec (194,920 p.)

To, co czytasz z pliku, nie zgadza się z zawartością, którą pokazałeś w pierwszym poście. W switchu czytasz linie z pliku, a przecież każdy 'case' to jedna linia przeczytana wcześniej w warunku while.

komentarz 2 czerwca 2017 przez AndekQR Użytkownik (880 p.)
edycja 2 czerwca 2017 przez AndekQR

Lekko się pogubiłem.  Artysta w tej liście posiada imię i nazwisko które zapisują się wpliku bezpośrednio pod sobą, więc w case A: dałem też żeby przeczytało następna linię. 

Wynik programu:

ID: 1
Tytul: polska
Artysci tego albumu:
1. A: G:
Gatunki tego albumu:
1. G:
Rok: 1111
Kupiony: Nie
Przesluchany: Tak

Z pliku:

1
polska
1111
0
1
A: polak
A: polski
G: pop
G: rock

 

komentarz 2 czerwca 2017 przez j23 Mędrzec (194,920 p.)
edycja 2 czerwca 2017 przez j23
	char line[1024];
	 
	char* ret = fgets(line, 1024, plik);
	 
	while (ret != NULL)
	{
		int id;
		char tytul[100];
		int rok;
		int stan;
		int przesluchany;
		
		
		sscanf(line, "%d", &id);
		
		fgets(line, 1024, plik);
		strcpy(tytul, line);

		fgets(line, 1024, plik);
		sscanf(line, "%d", &rok);

		fgets(line, 1024, plik);
		sscanf(line, "%d", &stan);

		fgets(line, 1024, plik);
		sscanf(line, "%d", &przesluchany);
		 
		printf("%d -> %s (rok: %d stan: %d przesl: %d)\n", id, tytul, rok, stan, przesluchany);
		 
		 
		while((ret = fgets(line, 1024, plik)) != NULL)
		{
			char* p = line;
			
			while(isspace(*p)) ++p;
			
			if(p[1] != ':') break;

			switch(*p) 
			{
			case 'A': 
				printf("artysta -> %s", p + 1);
				break;
			case 'G': 
				printf("gatunek -> %s", p + 1);
				break;
			};
		}
	}

 

U mnie to czyta poprawnie.

komentarz 2 czerwca 2017 przez AndekQR Użytkownik (880 p.)
U mnie już też czyta prawidłowo, lecz gdy jest więcej niż jeden artysta bądż gatunek to się zapętla. Zupełnie jakby dodało nieskończenie dużo pól do listy.
komentarz 2 czerwca 2017 przez j23 Mędrzec (194,920 p.)
Ten kod, który podałem wyżej, się zapętla?
komentarz 2 czerwca 2017 przez AndekQR Użytkownik (880 p.)

Tak, też się zapętla. Podaje też funkcję wyświetlającą ale raczej tu nie ma błędu.

void wyswietl(struct album *head_album, struct artysta *head_artysta, struct gatunek *head_gatunek)
{
    int licznik=1;
    if(head_album == NULL)
        printf("Lista jest pusta!\n\n");
    else
    {
        while(head_album)
        {
            printf("ID: %d\n", head_album->id);
            printf("Tytul: %s\n", head_album->tytul);
            printf("Artysci tego albumu:\n");
            while(head_artysta)
            {
                if(head_artysta->id_album==head_album->id)
                {
                    printf("%d. %s %s\n", licznik, head_artysta->imie, head_artysta->nazwisko);
                    licznik++;
                }
                head_artysta=head_artysta->next;
            }
            licznik=1;
            printf("Gatunki tego albumu:\n");
            while(head_gatunek)
            {
                if(head_gatunek->id_albumu==head_album->id)
                {
                    printf("%d. %s\n", licznik, head_gatunek->nazwa);
                    licznik++;
                }
                head_gatunek=head_gatunek->next;
            }
            printf("Rok: %d\n", head_album->rok);
            printf("Kupiony: %s\n",head_album->stan == 1?"Tak":"Nie");                  //jeoli 1 pisz TAK, w przeciwnym wypadku NIE
            printf("Przesluchany: %s\n\n", head_album->przesluchany == 1?"Tak":"Nie");
            head_album = head_album->next;

        }
        printf("\n\n");
    }
}

 

komentarz 2 czerwca 2017 przez j23 Mędrzec (194,920 p.)
Ręce opadają. To w końcu co się zapętla? Mój przykład, czy Twoja funkcja wyświetlająca? Kod, który podałem, nie ma prawa się zapętlić!
komentarz 2 czerwca 2017 przez AndekQR Użytkownik (880 p.)
Według mnie funkcja wyświetlająca nie zapętla się, po prostu wyświetla co jest. Gdy dodam elementy do listy ręcznie działa poprawnie.
komentarz 2 czerwca 2017 przez j23 Mędrzec (194,920 p.)
Proste pytanie: sprawdzałeś kod, który podałem wyżej w komentarzu? Poprawnie czyta rekordy?
komentarz 2 czerwca 2017 przez AndekQR Użytkownik (880 p.)

A co gdy będzie więcej albumów?

Dajmy na to:

1
polska
1111
0
1
A:polak
A:polski
A:polak
A:polski
G:pop
G:rock
2
niemiec
33312
0
1
A:jan
A:kowalski
A:barbara
A:nowaki
G:pop

To według mnie ten kod nie zadziała ponieważ gdy wychodzi  "while((ret = fgets(line, 1024, plik))!=NULL)" to while(ret) ten pierwszy też się kończy.

komentarz 2 czerwca 2017 przez AndekQR Użytkownik (880 p.)
Gdy jest po jednym imie nazwisko i nazwa gatunku. Gdy są np dwie nazwy gatunku zapętla się.
komentarz 2 czerwca 2017 przez j23 Mędrzec (194,920 p.)

A co gdy będzie więcej albumów?

A co stoi na przeszkodzie sprawdzić? :)

 

 

komentarz 2 czerwca 2017 przez AndekQR Użytkownik (880 p.)

Gdy jest więcej to funkcja nie chce nic czytać. 

void odczyt(struct album **head_album, struct artysta **head_artysta, struct gatunek **head_gatunek)
{

    struct album *point;
    char line[1024];
    FILE *plik;
    plik = fopen("album.txt", "r");
    char* ret = fgets(line, 1024, plik);

    if(plik == NULL)
        printf("Blad podczas otwierania pliku!");
    else
    {
        int pomoc;
        while(ret)
        {
            struct album *nowy_album = (struct album*)malloc(sizeof(struct album));
            struct artysta *nowy_artysta = (struct artysta*)malloc(sizeof(struct artysta));
            struct gatunek *nowy_gatunek = (struct gatunek*)malloc(sizeof(struct gatunek));

           sscanf(line, "%d", &nowy_album->id);
           fgets(line, 1024, plik);
           sscanf(line, "%s", nowy_album->tytul);
            fgets(line, 1024, plik);
            sscanf(line, "%d", &nowy_album->rok);
            fgets(line, 1024, plik);
            sscanf(line, "%d", &nowy_album->stan);
            fgets(line, 1024, plik);
            sscanf(line, "%d", &nowy_album->przesluchany);
            if(feof(plik)==0)
                dodaj_album(head_album, nowy_album);

            while((ret = fgets(line, 1024, plik))!=NULL)
            {
                char* p = line;

                while(isspace(*p))
                    ++p;

                if(p[1] != ':')
                    break;

                switch(*p)
                {
                case 'A':
                    //nowy_artysta->id_album=1;

                    nowy_artysta->id_album=nowy_album->id;
                    sscanf(line, "%s", nowy_artysta->imie);
                    fgets(line, 1024, plik);
                    sscanf(line, "%s", nowy_artysta->nazwisko);
                    dodaj_artysta(head_artysta, nowy_artysta);
                    break;
                case 'G':
                    nowy_gatunek->id_albumu=nowy_album->id;
                    //nowy_gatunek->id_albumu=1;
                    sscanf(line, "%s", nowy_gatunek->nazwa);
                    dodaj_gatunek(head_gatunek, nowy_gatunek);
                    break;

                };
            }

        }
        printf("Odczyt udany!\n");
    }

    fclose(plik);
}

 

komentarz 2 czerwca 2017 przez j23 Mędrzec (194,920 p.)

Andek, droczysz się, czy jak? Sprawdź mój kod (dokładnie to, co podałem). Później powiedz, czy poprawnie czyta rekordy z pliku.

komentarz 2 czerwca 2017 przez AndekQR Użytkownik (880 p.)

Jeśli tak to zabrzmiało to przepraszam, nie miałem takiego zamiaru. Możesz wyjaśnić po co jest ten kod:

 while(isspace(*p))
       ++p;

 

komentarz 2 czerwca 2017 przez j23 Mędrzec (194,920 p.)

Pomija białe znaki na początku linii. Dodałem to dla zasady, bo wystarczyłoby, że w pliku miałbyś coś takiego:
 

A:polak
A:polski
  A:polak
A:polski

i całe czytanie szlag by trafił. Przydałoby się też gets zamienić na funkcję czytającą niepuste linie.

komentarz 2 czerwca 2017 przez AndekQR Użytkownik (880 p.)

Dałem zamiast switch instrukcje if i o dziwo działa. Lecz gdy jest drugi album to tak jakby nie chce drugi raz wejść w while.

void odczyt(struct album **head_album, struct artysta **head_artysta, struct gatunek **head_gatunek)
{

    struct album *point;
    char line[1024];
    FILE *plik;
    plik = fopen("album.txt", "r");
    char* ret = fgets(line, 1024, plik);

    if(plik == NULL)
        printf("Blad podczas otwierania pliku!");
    else
    {
        int pomoc;
        while(ret)
        {
            struct album *nowy_album = (struct album*)malloc(sizeof(struct album));

           sscanf(line, "%d", &nowy_album->id);
           fgets(line, 1024, plik);
           sscanf(line, "%s", nowy_album->tytul);
            fgets(line, 1024, plik);
            sscanf(line, "%d", &nowy_album->rok);
            fgets(line, 1024, plik);
            sscanf(line, "%d", &nowy_album->stan);
            fgets(line, 1024, plik);
            sscanf(line, "%d", &nowy_album->przesluchany);
            if(feof(plik)==0)
                dodaj_album(head_album, nowy_album);

            while((ret = fgets(line, 1024, plik))!=NULL)
            {
                char* p = line;

                while(isspace(*p))
                    ++p;

                if(p[1] != ':')
                    break;

                if((*p)=='A')
                {
                    struct artysta *nowy_artysta = (struct artysta*)malloc(sizeof(struct artysta));
                    nowy_artysta->id_album=nowy_album->id;
                    sscanf(line, "%s", nowy_artysta->imie);
                    fgets(line, 1024, plik);
                    sscanf(line, "%s", nowy_artysta->nazwisko);
                    dodaj_artysta(head_artysta, nowy_artysta);
                }
                else if((*p)=='G')
                {
                    struct gatunek *nowy_gatunek = (struct gatunek*)malloc(sizeof(struct gatunek));
                    nowy_gatunek->id_albumu=nowy_album->id;
                    sscanf(line, "%s", nowy_gatunek->nazwa);
                    dodaj_gatunek(head_gatunek, nowy_gatunek);
                }
            }

        }
        printf("Odczyt udany!\n");
    }

    fclose(plik);
}

 

komentarz 2 czerwca 2017 przez j23 Mędrzec (194,920 p.)

Haha, no nie mogę. Jeszcze raz zadam pytanie: Czy sprawdziłeś kod, który podałem?

komentarz 2 czerwca 2017 przez AndekQR Użytkownik (880 p.)
Tak, sprawdziłem.
komentarz 2 czerwca 2017 przez j23 Mędrzec (194,920 p.)
I co? Czyta poprawnie rekordy z pliku?
komentarz 2 czerwca 2017 przez AndekQR Użytkownik (880 p.)
Czyta poprawnie do momentu kiedy chce wczytać artystów i gatunki do następnego albumu. Dane albumu wczytuje ale ich już nie.
komentarz 2 czerwca 2017 przez j23 Mędrzec (194,920 p.)
Pokaż ten kod.
komentarz 2 czerwca 2017 przez AndekQR Użytkownik (880 p.)
Wchodzi w while dokładnie 7 razy.
void odczyt(struct album **head_album, struct artysta **head_artysta, struct gatunek **head_gatunek)
{
 
    struct album *point;
    char line[1024];
    FILE *plik;
    plik = fopen("album.txt", "r");
    char* ret = fgets(line, 1024, plik);
 
    if(plik == NULL)
        printf("Blad podczas otwierania pliku!");
    else
    {
        int pomoc;
        while(ret)
        {
            struct album *nowy_album = (struct album*)malloc(sizeof(struct album));
 
           sscanf(line, "%d", &nowy_album->id);
           fgets(line, 1024, plik);
           sscanf(line, "%s", nowy_album->tytul);
            fgets(line, 1024, plik);
            sscanf(line, "%d", &nowy_album->rok);
            fgets(line, 1024, plik);
            sscanf(line, "%d", &nowy_album->stan);
            fgets(line, 1024, plik);
            sscanf(line, "%d", &nowy_album->przesluchany);
            if(feof(plik)==0)
                dodaj_album(head_album, nowy_album);
 
            while((ret = fgets(line, 1024, plik))!=NULL)
            {
                char* p = line;
 
                while(isspace(*p))
                    ++p;
 
                if(p[1] != ':')
                    break;
 printf("wejscie while drugi\n");
                if((*p)=='A')
                {
                    struct artysta *nowy_artysta = (struct artysta*)malloc(sizeof(struct artysta));
                    nowy_artysta->id_album=nowy_album->id;
                    sscanf(line, "%s", nowy_artysta->imie);
                    fgets(line, 1024, plik);
                    sscanf(line, "%s", nowy_artysta->nazwisko);
                    dodaj_artysta(head_artysta, nowy_artysta);
                }
                else if((*p)=='G')
                {
                    struct gatunek *nowy_gatunek = (struct gatunek*)malloc(sizeof(struct gatunek));
                    nowy_gatunek->id_albumu=nowy_album->id;
                    sscanf(line, "%s", nowy_gatunek->nazwa);
                    dodaj_gatunek(head_gatunek, nowy_gatunek);
                }
            }
 
        }
        printf("Odczyt udany!\n");
    }
 
    fclose(plik);
}

 

komentarz 2 czerwca 2017 przez j23 Mędrzec (194,920 p.)
To nie jest mój kod! To jest Twoja przeróbka mojego kodu. Sprawdź kod, który podałem w komentarzu, i powiedz, czy czyta poprawnie rekordy z pliku.
komentarz 2 czerwca 2017 przez AndekQR Użytkownik (880 p.)
void odczyt(struct album **head_album, struct artysta **head_artysta, struct gatunek **head_gatunek)
{

    struct album *point;
    char line[1024];
    FILE *plik;
    plik = fopen("album.txt", "r");
    char* ret = fgets(line, 1024, plik);

    if(plik == NULL)
        printf("Blad podczas otwierania pliku!");
    else
    {
        int pomoc;
        while(ret)
        {
            struct album *nowy_album = (struct album*)malloc(sizeof(struct album));

            sscanf(line, "%d", &nowy_album->id);
            fgets(line, 1024, plik);
            sscanf(line, "%s", nowy_album->tytul);
            fgets(line, 1024, plik);
            sscanf(line, "%d", &nowy_album->rok);
            fgets(line, 1024, plik);
            sscanf(line, "%d", &nowy_album->stan);
            fgets(line, 1024, plik);
            sscanf(line, "%d", &nowy_album->przesluchany);
            if(feof(plik)==0)
                dodaj_album(head_album, nowy_album);

            while((ret = fgets(line, 1024, plik))!=NULL)
            {

                char* p = line;

                while(isspace(*p))
                    ++p;

                if(p[1] != ':')
                    break;

                struct gatunek *nowy_gatunek = (struct gatunek*)malloc(sizeof(struct gatunek));
                struct artysta *nowy_artysta = (struct artysta*)malloc(sizeof(struct artysta));
                switch(*p)
                {
                case 'A':
                    nowy_artysta->id_album=nowy_album->id;
                    sscanf(line, "%s", nowy_artysta->imie);
                    fgets(line, 1024, plik);
                    sscanf(line, "%s", nowy_artysta->nazwisko);
                    dodaj_artysta(head_artysta, nowy_artysta);
                    break;
                case 'G':
                    nowy_gatunek->id_albumu=nowy_album->id;
                    sscanf(line, "%s", nowy_gatunek->nazwa);
                    dodaj_gatunek(head_gatunek, nowy_gatunek);
                    break;

                };

            }

        }
        printf("Odczyt udany!\n");
    }

    fclose(plik);
}

Wczytuje poprawnie gdy jest jeden album. Gdy jest więcej to nie wczytuje do kolejnych artystów i gatunków. 

komentarz 2 czerwca 2017 przez j23 Mędrzec (194,920 p.)

angry

Czy ja piszę z botem? Nie wiem, może to kwestia piątku... pijesz coś teraz?

 

I nie, to nie jest mój kod! Mój jest ten:

char line[1024];
  
char* ret = fgets(line, 1024, plik);
  
while (ret != NULL)
{
    int id;
    char tytul[100];
    int rok;
    int stan;
    int przesluchany;
     
     
    sscanf(line, "%d", &id);
     
    fgets(line, 1024, plik);
    strcpy(tytul, line);
 
    fgets(line, 1024, plik);
    sscanf(line, "%d", &rok);
 
    fgets(line, 1024, plik);
    sscanf(line, "%d", &stan);
 
    fgets(line, 1024, plik);
    sscanf(line, "%d", &przesluchany);
      
    printf("%d -> %s (rok: %d stan: %d przesl: %d)\n", id, tytul, rok, stan, przesluchany);
      
      
    while((ret = fgets(line, 1024, plik)) != NULL)
    {
        char* p = line;
         
        while(isspace(*p)) ++p;
         
        if(p[1] != ':') break;
 
        switch(*p) 
        {
        case 'A': 
            printf("artysta -> %s", p + 1);
            break;
        case 'G': 
            printf("gatunek -> %s", p + 1);
            break;
        };
    }
}

Przetestuj go (nic nie zmieniaj!) i odpowiedz na pytanie, które zadałem wcześniej.

komentarz 2 czerwca 2017 przez AndekQR Użytkownik (880 p.)
1 -> polska
 (rok: 1111 stan: 0 przesl: 1)
artysta -> :polak
artysta -> :polski
artysta -> :kowal
artysta -> :polski
gatunek -> :pop
gatunek -> :rock
2 -> niemiec
 (rok: 33312 stan: 0 przesl: 1)
artysta -> :jan
artysta -> :kowalski
artysta -> :barbara
artysta -> :nowaki
gatunek -> :pop

Działa.

komentarz 2 czerwca 2017 przez j23 Mędrzec (194,920 p.)

Uff, wybornie.

To teraz przeanalizuj ten kod, linia po linii. Najlepiej z użyciem debuggera. Jak przeanalizujesz i zrozumiesz go, odpowiedz sobie na proste pytanie: jeśli ten kod czyta poprawnie wszystkie rekordy i wszystkie dane w nich zawarte, to czy są tu jeszcze potrzebne dodatkowe wywołania funkcji fgets?

 

komentarz 2 czerwca 2017 przez AndekQR Użytkownik (880 p.)
Tylko Twój kod tylko wyświetla te dane, a ja muszę jedną linie wczytać do nowy_artysta->imię, a linie po tą pierwszą do nowy_artysta->nazwisko. Według mnie może tylko przejść zapisywanie imienia z innym znakiem, a nazwisko z innym. A potem dodanie jeszcze jednego case.
komentarz 2 czerwca 2017 przez j23 Mędrzec (194,920 p.)

Mój kod pokazuje tylko, jak wczytać kolejne dane z pliku, bo z tym był, jak rozumiem, problem. Dałem tam, na potrzeby przykładu, wypisywanie danych na ekran, bo tak najprościej sprawdzić, czy wszystko się poprawnie czyta. Teraz przerób ten kod tak, żeby zamiast wypisywania na ekran dodawał dane do struktury/listy.

BTW, dlaczego imię i nazwisko masz w dwóch liniach, zamiast dać np. tak:

A:Jan;Kowalski
A:John;Doe

?

Podobne pytania

0 głosów
3 odpowiedzi 861 wizyt
0 głosów
1 odpowiedź 308 wizyt
pytanie zadane 19 stycznia 2018 w C i C++ przez foruminfa Początkujący (310 p.)
0 głosów
1 odpowiedź 924 wizyt
pytanie zadane 28 października 2017 w PHP przez smokolisz Mądrala (6,340 p.)

92,551 zapytań

141,393 odpowiedzi

319,522 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...