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

Sprawdzenie znaku na początku linii w pliku txt

Object Storage Arubacloud
0 głosów
438 wizyt
pytanie zadane 14 lutego 2019 w C i C++ przez Alan Kruszyński Obywatel (1,410 p.)

Chcę wczytywać z pliku txt dane do zmiennych. Koniec pliku jest oznaczony jakimś znakiem, więc plik wygląda tak:

dane dane dane dane
dane dane dane dane
dane dane dane dane
#

W linii zawsze są 4 zmienne do wczytania. Mają one posłużyć jako wartości parametrów obiektu i mam do tego użyć przeładowanego operatora ">>".

istream & operator >> (ifstream & in, Magazyn & obiekt){
    int i = 0;
    string zmienna;
    while(true){
           in >> zmienna;
            if(zmienna == "#") break;
            else{
            in >> obiekt.magazyn[i]->nazwa_tow ;
            in >> obiekt.magazyn[i]->ilosc ;
            in >> obiekt.magazyn[i]->cena_tow ;
            in >> obiekt.magazyn[i]->indeks_tow ;
            i++;
        }
    }
}

Próbuję już drugi dzień posiłkując się mniej lub bardziej skomplikowanymi przykładami w różnych kombinacjach z internetu ale nic z tego. Stanąłem na powyższym otrzymując błąd SIGSEV Segmentation fault w pierwszej linijce po else. Nie mam już pomysłów proszę o pomoc

1 odpowiedź

0 głosów
odpowiedź 14 lutego 2019 przez criss Mędrzec (172,590 p.)

W linii zawsze są 4 zmienne do wczytania.

 Więc nie powinno to wyglądać tak?


istream & operator >> (ifstream & in, Magazyn & obiekt){
    int i = 0;
    string zmienna;
    while(true){
            in >> zmienna;
            if(zmienna == "#") break;
            else{
            obiekt.magazyn[i]->nazwa_tow = zmienna;
            in >> obiekt.magazyn[i]->ilosc ;
            in >> obiekt.magazyn[i]->cena_tow ;
            in >> obiekt.magazyn[i]->indeks_tow ;
            i++;
        }
    }
}

No i nie wiemy czym jest Magazyn::magazyn, a to dość kluczowe jeśli chodzi o segmentation fault.

komentarz 14 lutego 2019 przez Alan Kruszyński Obywatel (1,410 p.)
Magazyn to klasa której w programie działą zawsze tylko jedna instancja, Magazyn & obiekt to instancja klasy którą przekazuję w argumencie, a magazyn to pole klasy Magazyn które jest wektorem wskazników.
komentarz 15 lutego 2019 przez criss Mędrzec (172,590 p.)
I jesteś pewien, że w chwili pisania do i-tego elemetu wektora, i-ty element w ogóle istnieje? Bo ten segfault podpowiada, że nie bardzo
komentarz 15 lutego 2019 przez Alan Kruszyński Obywatel (1,410 p.)
W sumie nie pomyślałem że wektor jest przecież pusty w chwili wczytywania. Czyli najpierw powinienem tworzyć i-ty element z zerowymi wartościami parametrów a potem wczytywać z pliku do jego parametrów. Dobrze myślę?
komentarz 15 lutego 2019 przez criss Mędrzec (172,590 p.)
Zgadza się. operator [] daje ci jedynie dostęp do pamięci, ale w żaden sposób nie kontroluje czy vector ma wymaganą wielkość

Podobne pytania

–1 głos
3 odpowiedzi 517 wizyt
pytanie zadane 20 sierpnia 2020 w C i C++ przez Drożdżówka Obywatel (1,870 p.)
0 głosów
1 odpowiedź 909 wizyt
pytanie zadane 8 stycznia 2018 w C i C++ przez Perseusz Bywalec (2,190 p.)
0 głosów
3 odpowiedzi 1,179 wizyt
pytanie zadane 11 października 2017 w C i C++ przez wikiFord Początkujący (330 p.)

92,568 zapytań

141,424 odpowiedzi

319,630 komentarzy

61,956 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!

...