Reklama
Pokazuje wyniki od 1 do 6 z 6

Temat: [C] Wczytywanie danych z pliku do listy jednokierunkowej

  1. #1
    Avatar Manufactury
    Data rejestracji
    2007
    Położenie
    Białystok
    Wiek
    30
    Posty
    230
    Siła reputacji
    17

    Domyślny [C] Wczytywanie danych z pliku do listy jednokierunkowej

    Tak jak w temacie, bo ocipieję zaraz.

    Moja struktura:
    Kod:
    typedef struct Osoba
    {
     
           char imie[100];
           char nazwisko[100];
           int wiek;
           struct Osoba* next;
                  } osoba ;

    Moja funkcja odczytująca dane z pliku:
    Kod:
    void wczytaj_z_pliku(osoba *lista)
    {
    	char znak;
    	char tab[100];
    	char tab2[100];
    	
    	int tab3;
    	int i=0;
    	FILE *w;
    	osoba *wsk = lista;
    	w = fopen("zolnierze.txt","rt");
    	system("cls");
        while(!feof(w))
        {
        	//fgets(tab[i],100,w);
        	fscanf(w,"%s",tab[i]);
        	fscanf(w,"%s",tab2[i]);
        	fscanf(w,"%d",&tab3);
        	wsk->imie = tab[i];
        	wsk->nazwisko = tab2[i];
        	wsk->wiek = tab3;
        	wsk = wsk->next;
        }
    fclose(w);
    }
    Błąd:

    Kod:
    [Error] incompatible types in assignment of 'char' to 'char [100]'
    Nie wiem jak to naprawić, jak to poprawnie wczytać z pliku, bawię się już kilka h i nie wychodzi a muszę na jutro mieć. Pokieruje ktoś jak to naprawić?
    Z góry dziękuję i pozdrawiam

  2. #2
    Avatar zakius
    Data rejestracji
    2008
    Położenie
    The Internets
    Wiek
    33
    Posty
    11,075
    Siła reputacji
    24

    Domyślny

    Czytasz po znaku
    przypisać znaku do tablicy się nie da
    idea: przypisuj po kolei do odpowiednich pól tablicy(pamiętając o zakończeniu) or czytaj całe słowo i strcpy do listy
    ahh, nope

    wsk->imie = tab[i];

    diz
    rong
    strcpy(imie, tab); lub odwrotnie
    raz podajesz 1 chara, 2 i tak się nie da tablic przypisywać
    Ostatnio zmieniony przez zakius : 15-12-2013, 20:57
    Problem z komputerem? Instrukcja diagnostyczna
    Cytuj Vegeta napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Baby maja wymagania jak windows vista, takze nigdy nie wiesz.
    Cytuj Dzzej napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Moje posty to esencja głupoty.
    "Don't worry, I'm just a pervert"

  3. Reklama
  4. #3
    Avatar Manufactury
    Data rejestracji
    2007
    Położenie
    Białystok
    Wiek
    30
    Posty
    230
    Siła reputacji
    17

    Domyślny

    Próbowałem tak:
    Kod:
    int i=0
        while((!feof(w)) && i<10)
        {
        	//fgets(tab[i],100,w);
        	fscanf(w,"%s",tab[i]);
        	fscanf(w,"%s",tab2[i]);
        	fscanf(w,"%d",&tab3);
        	strcpy(wsk->imie,tab);
        	strcpy(wsk->nazwisko,tab);
        	wsk->wiek = tab3;
        	wsk = wsk->next;
        	i++;
        }
    Kompiluje się, ale wczytując z pliku wywala błąd (program przestał działać itd).
    Pomysły? :(

  5. #4
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    dlaczego dajesz %s? spróbuj %c.
    Tablica Twoją sklada się ze 100 elementów typu char.
    %s to String czyli cala tablica charów.

    ale chyba najlepiej będzie tak:
    Kod:
    fscanf(w,"%s",tab);
    fscanf(w,"%s",tab2);
    Ostatnio zmieniony przez Kusterek : 15-12-2013, 22:12

  6. #5
    Avatar Manufactury
    Data rejestracji
    2007
    Położenie
    Białystok
    Wiek
    30
    Posty
    230
    Siła reputacji
    17

    Domyślny

    Dziękuję za pomoc, teoretycznie naprawiłem, praktycznie jest jeden błąd, mianowicie wczyta z pliku dopiero wtedy, gdy jest już jakiś element na liście, jeśli lista jest pusta to nie wczytuje i tego również nie potrafię naprawić.
    Kod:
    // dodaje nowy wezel do listy
    void dodaj(osoba **lista,osoba *nowa)
    {
    	nowa->next = NULL;
    	if((*lista) == NULL)
    	{
    	
    	*lista = nowa;
    
    }
    else
    {
    	osoba *wsk = *lista;
    	while(wsk->next!=NULL)
    	{
    		wsk = wsk->next;
    		
    	}
    	wsk->next = nowa;
    }
    }
    
    void dodajOsobe_plik(osoba **lista,char *tab,char *tab2,int tab3)
    {
    		osoba *nowa = (osoba*)malloc(sizeof(osoba));
    		system("cls");
        	strcpy(nowa->imie,tab);
        	strcpy(nowa->nazwisko,tab2);
    		nowa->wiek = tab3;
    		dodaj(lista,nowa);
    		printf("Wczytano plik!\n");
    }
    
    
    void wczytaj_z_pliku(osoba *lista)
    {
    	
    	char tab[100];
    	char tab2[100];
    	int tab3;
    	int i=0;
    	FILE *w;
    	osoba *wsk = lista;
    	osoba *nowa = (osoba*)malloc(sizeof(osoba));
    	w = fopen("zolnierze.txt","rt");
    	system("cls");
        do
        {
    
        	fscanf(w,"%s",tab);
        	fscanf(w,"%s",tab2);
        	fscanf(w,"%d",&tab3);
        	dodajOsobe_plik(&lista,tab,tab2,tab3);
        
        } 
    while((!feof(w)));
    	fclose(w);
    }
    Pomocy po raz n-ty ;d

  7. #6
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    no bo pewnie gdzies przypisujesz liste zanim cos w niej jest.

    i chyba chodzi o to:
    Kod:
    osoba *wsk = lista;
    w ogole po co to jest? :D

    no i nie bardzo wiem po co w parametrze jest jest lista, skoro dopiero jak wczytasz to masz utworzyc liste, tak?
    Ostatnio zmieniony przez Kusterek : 16-12-2013, 01:14

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. [Excel] Przeniesienie danych z jednego pliku do drugiego
    Przez Michauu w dziale Programowanie
    Odpowiedzi: 0
    Ostatni post: 04-03-2018, 19:02
  2. C++ Wczytywanie z pliku + tworzenie pliku
    Przez Kokolik w dziale Programowanie
    Odpowiedzi: 1
    Ostatni post: 01-12-2014, 20:13
  3. [C++] Wczytywanie z pliku do tablicy
    Przez hefalump w dziale Programowanie
    Odpowiedzi: 8
    Ostatni post: 30-03-2014, 11:19
  4. Autouzupełnianie się danych na podstawie innych danych w Excelu.
    Przez Scrath~ w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 1
    Ostatni post: 30-01-2014, 18:17
  5. Skrypt PHP - przesyłanie danych z formularza php do pliku .txt
    Przez Żarówa2SR w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 1
    Ostatni post: 24-10-2012, 17:06

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •