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

Wczytywanie danych z pliku

Ostatnio zmodyfikowano 2017-08-13 13:54
Autor Wiadomość
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?
P-163900
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()
.
P-163902
bartinio07
Temat założony przez niniejszego użytkownika
» 2017-08-11 14:17:52
Bazuję na kodzie z kursu:
C/C++
#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 ) //pętla nieskończona
    {
        int a;
        std::string b;
        int c;
        plik >> a >> b >> c;
        if( plik.good() )
             wykonajOperacje( a, b, c );
        else
             break; //zakończ wczytywanie danych - wystąpił jakiś błąd (np. nie ma więcej danych w pliku)
       
    } //while
    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?
P-163906
karambaHZP
» 2017-08-11 16:26:12
Metody, o których wspomniałeś są omówione dopiero w następnym rozdziale
Metoda
fail()
, » Kurs C++ » Poziom 1Obsługa strumienia wejściowego lekcja.
P-163910
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ć.
P-163911
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.
P-163912
bartinio07
Temat założony przez niniejszego użytkownika
» 2017-08-11 16:44:55
P-163914
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?
P-163915
« 1 » 2
  Strona 1 z 2 Następna strona