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

sczytywanie z pliku

Ostatnio zmodyfikowano 2015-07-30 15:20
Autor Wiadomość
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 ?
P-135284
Monika90
» 2015-07-27 13:39:51
O tę pętlę ci chodzi?

C/C++
do { //po raz 2 otwieram pętlę sczytującą stringi z pliku
    wczytaj >> n;
    wypisz_nbw( wypisz_wyniki, n, wynik4p3 );
   
   
   
   
} while( !wczytaj.eof() );


Napisz ją tak
C/C++
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.
P-135289
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. 
P-135304
JMII89
» 2015-07-27 20:10:56
Wczytuj do zmiennej dopóki nie dojdzie do końca pliku.
P-135307
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'.)
P-135309
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 ?
P-135465
1 « 2 »
Poprzednia strona Strona 2 z 2