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

Wczytywanie liczb z pliku

Ostatnio zmodyfikowano 2012-06-27 09:47
Autor Wiadomość
Unlimited
Temat założony przez niniejszego użytkownika
Wczytywanie liczb z pliku
» 2012-06-26 22:41:19
Witam. Mam problem z wczytaniem liczb z pliku. Mój fragment kodu:
C/C++
while( !plik.eof() )
{
    getline( plik, tablica[ n ].tytul ); //zmienna string
    getline( plik, tablica[ n ].autor ); //zmienna string
    getline( plik, tablica[ n ].wydawnictwo ); //zmienna string
    plik >> tablica[ n ].rok; //zmienna int
    plik >> tablica[ n ].strony; //zmienna int
}

Przykładowe dane w pliku na np 2 tablice:
a
b
c
1
2
d
e
f
3
4

I teraz co działa a co nie. Gdy wezmę plik >> tablica[n].rok; i plik >> tablica[n].strony; w komentarz to wtedy ładnie sobie działa ale jak te linijki dołączę do programu to przy wczytywaniu program kończy działanie. Podejrzewam że te linijki nie wiedzą gdzie jest aktualnie wskaźnik w pliku i jadą na początek i napotykają literę zamiast cyfry. Jak to naprawić?
P-59205
DejaVu
» 2012-06-26 23:38:36
Sprawdź czy to zadziała:
C/C++
plik >> tablica[ n ].rok >> std::endl;
plik >> tablica[ n ].strony >> std::endl;
P-59234
Unlimited
Temat założony przez niniejszego użytkownika
» 2012-06-26 23:52:29
Nie kompiluje się wtedy:
C:\Users\AcerAS-7552G\Desktop\program_for_windows.cpp|421|error: no match for 'operator>>' in '((std::fstream*)plik)->std::basic_fstream<char, std::char_traits<char> >::<anonymous>.std::basic_iostream<char, std::char_traits<char> >::<anonymous>.std::basic_istream<_CharT, _Traits>::operator>> [with _CharT = char, _Traits = std::char_traits<char>](((int&)(&(tablica + ((unsigned int)(((unsigned int)n) * 20u)))->ksiazki::strony))) >> std::endl'|
P-59237
DejaVu
» 2012-06-27 00:14:40
Rozumiem. W każdym razie chodzi o to, że za liczbami znajduje się znak nowej linii. W przypadku gdy wczytujesz liczbę to znak nowej linii pozostanie niewczytany. Wówczas przy kolejnym obiegu pętli wczytujesz pustą linię, a w konsekwencji wszystko się sypie. Po wczytaniu ostatniej liczby (w pętli) dopisz:
C/C++
std::string smietniczka;
getline( plik, smietniczka );
Powinno zadziałać.
P-59240
Unlimited
Temat założony przez niniejszego użytkownika
» 2012-06-27 09:47:30
Działa cudownie teraz. O to chodziło. Dzięki wielkie
P-59252
« 1 »
  Strona 1 z 1