sczytywanie z pliku
Ostatnio zmodyfikowano 2015-07-30 15:20
mlOOdy Temat założony przez niniejszego użytkownika |
» 2015-07-27 13:07:17 przed 2 pętlą do while dodałem dwie linijki: wczytaj.clear(); wczytaj.seekg(0); ale program nie do końca działa poprawnie tzn. gdy stringi przechodzą przez funkcję wypisz_nbw, i znajdzie się taki string, który jest "nbw" to wypisze tylko pierwszy taki string (do pliku wypisz_wyniki) kolejne stringi które są "nbw" pominie.
2 problem: dodałem do 2 pętli linijkę cout << n << endl; ( która znajduje się przed linijką wczytaj >> n; ) i po włączeniu programu na konsoli wypisują się wszystkie stringi prawidłowo ale ostatni jest dublowany, dlaczego tak jest ? |
|
Monika90 |
» 2015-07-27 13:39:51 O tę pętlę ci chodzi?
do { wczytaj >> n; wypisz_nbw( wypisz_wyniki, n, wynik4p3 ); } while( !wczytaj.eof() );
|
Napisz ją tak while( wczytaj >> n ) { wypisz_nbw( wypisz_wyniki, n, wynik4p3 ); }
Tak właśnie powinno się pisać pętlę, która wczytuje wszystkie elementy z pliku. Nie używaj eof() w warunku pętli, bo nie wiesz co eof() oznacza. |
|
mlOOdy Temat założony przez niniejszego użytkownika |
» 2015-07-27 19:40:04 aha, a co oznacza ten zapis w podanym warunku pętli ? ( while( wczytaj >> n ) ). Prosiłbym również jednak o wytłumaczenie dlaczego napisany przeze mnie kod jest zły. |
|
JMII89 |
» 2015-07-27 20:10:56 Wczytuj do zmiennej dopóki nie dojdzie do końca pliku. |
|
Monika90 |
» 2015-07-27 20:49:58 Wczytuj do zmiennej dopóki nie dojdzie do końca pliku. |
Raczej, wczytuj tak długo jak się da. To znaczy pętla zostanie przerwana gdy nie da się już niczego wczytać do zmiennej. Powodem może być koniec pliku lub niewłaściwy format danych. Wyrażenie plik >> n próbuje wczytać coś do zmiennej n i jeżeli się to udało, to przyjmuje wartość true, a false w przeciwnym wypadku. Pętla z !plik.eof() nie działa poprawnie bo po przeczytaniu wszystkich znaków z pliku, eof() wcale nie zwraca true. Dopiero kolejna próba odczytu ustawi eof na true, więc Twoja pętla wykona się o jeden raz więcej niż powinna. (No chyba że plik nie kończy się białym znakiem, ale typowy plik tekstowy kończy znakiem '\n'.) |
|
mlOOdy Temat założony przez niniejszego użytkownika |
» 2015-07-30 15:20:58 ok dzięki, teraz nie dubluje ostatniego stringa ale nadal pozostaje problem: dlaczego program wypisuje tylko 1 nbw ? |
|
1 « 2 » |