Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wprowadzanie danych z pliku

Ostatnio zmodyfikowano 2015-05-28 15:13
Autor Wiadomość
pytalski
Temat założony przez niniejszego użytkownika
Wprowadzanie danych z pliku
» 2015-05-28 00:48:57
Witam

Próbuje wprowadzić dane z pliku do składowych obiektów. Plik się otwiera, bo nie pisze komunikatu, teoretycznie tworzy obiekt, bo konstruktor nie zwraca komunikatu o błędzie, ale gdy próbuje pokazać składowe obiektu na ekranie to wraca do menu głównego. Nie wiem gdzie mam błąd. Bardzo proszę o pomoc.

C/C++
cout << "Podaj nazwe pliku z ktorego chcesz miec dane dla kwiatow :"; cin >> nazwa_pliku;
fstream plik;
plik.open( nazwa_pliku, ios::in );
if( plik.good() == false ) cout << "Error!!!!!!!";

for(;; ) {
    if( !( plik >> nazwa_pliku ) ) break;
   
    plik >> temp >> s1 >> s2;
    i1 = atoi( temp.c_str() );
    tab.emplace_back( i1, s1, s2 );
    plik.close();
}
for( int i = 0; i < tab.size(); i++ ) {
    tab[ i ].daj_id();
    tab[ i ].daj_nazwe();
    tab[ i ].daj_typ();
}
break;
P-132869
JMII89
» 2015-05-28 07:18:00
plik.open(nazwa_pliku.c_str(),std::ios::in);
P-132872
stevy
» 2015-05-28 08:16:56
open obsługuje stringa, nie trzeba zamieniać na const char*, a jakby nie dodał przestrzeni nazw to by mu się nawet nie kompilowało.
Zastanawia mnie dlaczego czytasz to w pętli do TYCH SAMYCH zmiennych i gdzie wypełniasz tablice, bo trochę w kodzie brakuje
P-132873
SeaMonster131
» 2015-05-28 11:59:35
C/C++
...
tab.emplace_back( i1, s1, s2 );
plik.close();
}
Zamykasz plik po pierwszym przejściu pętli.

Dodatkowo - nie wiem czy to zamierzone, czy nie - w każdym obiegu pętli najpierw z pliku wczytujesz stringa nazwa_pliku, a dopiero potem temp, s1, s2.
P-132878
pytalski
Temat założony przez niniejszego użytkownika
» 2015-05-28 13:04:30
SeaMonster131 Moim celem jest wczytywanie danych z pliku. Dopóki dane są, dopóty dane są wprowadzane/obiekty tworzone. Gdy danych nie będzie to koniec. Dlatego wprowadziłem tego if-a, bo podobno jest to znacznik końca pliku, więc wtedy pętla zostaje przerwana.
No i niestety program źle wczytuje dane - zamiast 1234 aaa bbb 5678 ccc ddd (wyrazy oddzielone enterem) jest 0 bbb 5678 (jako dwa obiekty).
P-132880
SeaMonster131
» 2015-05-28 13:30:42
Dlatego wprowadziłem tego if-a, bo podobno jest to znacznik końca pliku, więc wtedy pętla zostaje przerwana.
Co nie znaczy, że warunek w if się nie wykona (i pozycja kursora w pliku przeskoczy na następny element), dlatego teraz źle wczytuje Ci dane.
P-132883
pytalski
Temat założony przez niniejszego użytkownika
» 2015-05-28 14:43:02
OK, poradziłem sobie jakoś i działa. Mam natomiast inny problem. Czy jest jakoś możliwość przeniesienia wczytywania tych danych do funkcji? Bo tak myślę, że chyba jedyna opcja to zrobienie pustego konstruktora i przesyłanie danych przez tą funkcję bezpośrednio do składowych klasy.
P-132887
pekfos
» 2015-05-28 15:13:40
Czy jest jakoś możliwość przeniesienia wczytywania tych danych do funkcji?
Tak
P-132891
« 1 »
  Strona 1 z 1