bartinio07 Temat założony przez niniejszego użytkownika |
Wczytywanie danych z pliku » 2017-08-11 00:44:08 Witam, mam problem z przykładem, który został opisany w kursie: Załóżmy, że mamy plik, w którym dane mamy zapisane następująco:
10 dodac 5 3 odjac 2 77 zonk 3 99 dodac 1
W wyniku działania powyższego programu, na standardowym wyjściu pojawią się następujące komunikaty:
10 + 5 = 15 3 - 2 = 1 Nieznana operacja "zonk" - nie mozna wykonac obliczen. 99 + 1 = 100
|
Program na wyjściu nie pokazuje mi ostatniej linii, tj. 99 + 1 = 100, tak jakby nie odczytał "99 dodac 1" z pliku. Dlaczego tak się dzieje? |
|
jankowalski25 |
» 2017-08-11 08:52:08 Być może używasz metody good() zamiast !fail() ? Bez kodu można tylko zgadywać. Chociaż w sumie bardziej prawdopodobne jest to, że nie czyścisz flag metodą clear() . |
|
bartinio07 Temat założony przez niniejszego użytkownika |
» 2017-08-11 14:17:52 Bazuję na kodzie z kursu: #include <fstream> #include <iostream> #include <string>
void wykonajOperacje( int liczba1, std::string napis, int liczba2 ) { if( napis == "dodac" ) { std::cout << liczba1 << " + " << liczba2 << " = " << liczba1 + liczba2 << std::endl; } else if( napis == "odjac" ) { std::cout << liczba1 << " - " << liczba2 << " = " << liczba1 - liczba2 << std::endl; } else { std::cout << "Nieznana operacja \"" << napis << "\" - nie mozna wykonac obliczen." << std::endl; } }
bool wczytajPlik( std::string nazwaPliku ) { std::ifstream plik; plik.open( nazwaPliku.c_str() ); if( !plik.good() ) return false; while( true ) { int a; std::string b; int c; plik >> a >> b >> c; if( plik.good() ) wykonajOperacje( a, b, c ); else break; } return true; }
int main() { if( !wczytajPlik( "dane.txt" ) ) std::cout << "Nie udalo sie otworzyc pliku!" << std::endl; return 0; }
Metody, o których wspomniałeś są omówione dopiero w następnym rozdziale, więc bez ich użycia program chyba też powinien działać dobrze? |
|
karambaHZP |
» 2017-08-11 16:26:12 |
|
bartinio07 Temat założony przez niniejszego użytkownika |
» 2017-08-11 16:36:41 No w sumie tak, tylko że nie w kontekście wczytywania zawartości pliku. Zastanawia mnie tylko, dlaczego nie wczytuje mi ostatniej linii z pliku, skoro w zamyśle autora kursu powinno zadziałać. |
|
karambaHZP |
» 2017-08-11 16:41:28 Metoda działa dla strumieni i nie ma tutaj znaczenia czy strumienia standardowego czy plikowego. Zastanawia mnie tylko, dlaczego nie wczytuje mi ostatniej linii z pliku, skoro w zamyśle autora kursu powinno zadziałać. |
Zakończ plik znakiem nowej linii i wczyta też ostatni wiersz, a teraz odczytanie całej linii powoduje wykrycie końca pliku. |
|
bartinio07 Temat założony przez niniejszego użytkownika |
» 2017-08-11 16:44:55 |
|
bartinio07 Temat założony przez niniejszego użytkownika |
» 2017-08-11 16:49:45 Dzięki, teraz działa :) Czyli bez znaku nowej linii, program wykrywał przedostatnią linię jako koniec pliku i dlatego nie wczytywał ostatniej, bo teraz trochę nie rozumiem? |
|
« 1 » 2 |