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

c++ pobieranie lini z pliku tekstowego

Object Storage Arubacloud
+1 głos
426 wizyt
pytanie zadane 3 kwietnia 2016 w C i C++ przez Ditrix Mądrala (5,650 p.)

Witam !

Wiem powtarzał się ten temat, ale nie rozumiem tego mechanizmu. Piszę tutaj, by ktoś mi to dobrze wytłumaczył.

Więc stworzyłem sobie programik z tablicą obiektów. Zapisałem już wartości wszystkich obiektów w pliku .txt, ale teraz nie za bardzo wiem jak je wczytać.

Próbowałem tak

void load_folder(item * weapon)
{
    fstream folder;
    folder.open("dane.txt", ios::in);
    string line;
    int n=0;
    if(folder.good())
    {
        while(getline(folder,line))
    {
        weapon[n].name=line;
        weapon[n].improve=atoi(line.c_str());
        weapon[n].number_delete=atoi(line.c_str());
        n++;
    }
    }
    else cout << "Folder nie wczytany" << endl;
}

I wywala mi błąd. Proszę o wytknięcie błędu i możliwą poprawę z wytłumaczeniem.

Z góry dzięki !

3 odpowiedzi

0 głosów
odpowiedź 3 kwietnia 2016 przez Frendom Pasjonat (18,900 p.)

Daj moze cos takiego:

while(!folder.eof())
{
getline(folder,line);
}

 

komentarz 3 kwietnia 2016 przez Ditrix Mądrala (5,650 p.)
Dalej nic. "Program przestał działać".
komentarz 3 kwietnia 2016 przez Frendom Pasjonat (18,900 p.)

Swoja droga, nie masz zlej konstrukcji przy sprawdzaniu, czy plik sie otworzyl?

Daj najprostsze 

 if (folder.good()==false){cout<<"Nie mozna otworzyc pliku"; exit (0);}

Dopiero poza warunkiem daj te petle

komentarz 3 kwietnia 2016 przez Ditrix Mądrala (5,650 p.)
Są funkcje sprawdzające. Przypatrz się uważnie ;)
komentarz 3 kwietnia 2016 przez Frendom Pasjonat (18,900 p.)
chodzi mi o to, abys te petle wywalil poza ifa
komentarz 3 kwietnia 2016 przez Ditrix Mądrala (5,650 p.)
Bardziej rozchodzi się o to, jak zrobić by dana linijka była przypisywana do właściwej zmiennej obiektu.

Tamten błąd jakoś rozwiąże.
0 głosów
odpowiedź 3 kwietnia 2016 przez Aisekai Nałogowiec (42,190 p.)
Jeżeli wyskakuje błąd, że program przestał działać to może za zakres tablicy wyszedles? Użyj vectora i sprawdź, czy pomoże
komentarz 3 kwietnia 2016 przez Ditrix Mądrala (5,650 p.)
Bardziej rozchodzi się o to, jak zrobić by dana linijka była przypisywana do właściwej zmiennej obiektu.

Tamten błąd jakoś rozwiąże.
komentarz 4 kwietnia 2016 przez Aisekai Nałogowiec (42,190 p.)
Jeśli masz to jakoś uporządkowane, tzn najpierw nazwa broni, w nastepnym wierszu improve, itd, to możesz zmienną dodać i inkrementowac ją za każdym pobraniem linii. I jeśli np ta zmienna % 2 == 1 to przypisujesz do nazwy broni. Jeśli ta zmienna % 2 == 0 to do improve. Tylko potrzebował byś pętli w pętli. Pętla zewnętrzna będzie ilością obiektów, a wewnętrzna - ilością składowych obiektu. Ew możesz zrobić tyle plików tekstowych ile masz składowych i pobierać z każdej po linii.
0 głosów
odpowiedź 3 kwietnia 2016 przez Dubgron Mądrala (5,620 p.)
void load_folder(item * weapon)
{
    fstream folder;
    folder.open("dane.txt", ios::in);
    string line;
​    int n=0;
    if(folder.good())
    {
        while(getline(folder,line))
    {
        weapon[n]->name=line;
        weapon[n]->improve=atoi(line.c_str());
        weapon[n]->number_delete=atoi(line.c_str());
        n++;
    }
    }
    else cout << "Folder nie wczytany" << endl;
}

To powinno zadziałać. Pozdrawiam.

komentarz 3 kwietnia 2016 przez Ditrix Mądrala (5,650 p.)

Dałem w for'a z kropkami i też działa :) Jak wklejam Twój sposób wyskakuje mi dziwny błąd przy zmiennej int n=0;

Pokaże mój sposób;

void load_folder(item * weapon)
{
    fstream folder;
    folder.open("dane.txt", ios::in);
    string line;
    int n=0;

    if(folder.good())
    {
      for(int i=0;i<100;i++)
      {
        getline(folder,line); weapon[n].name=line;
        getline(folder,line); weapon[n].improve=atoi(line.c_str());
        getline(folder,line); weapon[n].number_delete=atoi(line.c_str());
        n++;
      }
    }
    else cout << "Folder nie wczytany" << endl;
}

 

komentarz 3 kwietnia 2016 przez Dubgron Mądrala (5,620 p.)
W takim wypadku nie musisz używać zmiennej n, wystarczy użyć i :)

Podobne pytania

0 głosów
1 odpowiedź 464 wizyt
pytanie zadane 25 listopada 2018 w C i C++ przez kropodyl Nowicjusz (170 p.)
0 głosów
0 odpowiedzi 265 wizyt
pytanie zadane 9 sierpnia 2018 w Rozwój zawodowy, nauka, praca przez krawiecki Początkujący (490 p.)
0 głosów
2 odpowiedzi 215 wizyt
pytanie zadane 22 maja 2018 w C i C++ przez kamila131 Nowicjusz (140 p.)

92,555 zapytań

141,403 odpowiedzi

319,560 komentarzy

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

...