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

[Lekcja 33] Zadanie przykładowe

Ostatnio zmodyfikowano 2015-04-01 11:17
Autor Wiadomość
Gage
Temat założony przez niniejszego użytkownika
[Lekcja 33] Zadanie przykładowe
» 2015-04-01 10:29:13
Dziś jestem zmuszony spytać was o zadanie z lekcji o wczytywaniu danych z pliku za pomocą operatora >> . Dla wygody od razu rzucam link: http://cpp0x.pl/kursy/Kurs-C++/Poziom-4/Wczytywanie-danych-z-pliku-za-pomoca-operatora/325
W funkcji wczytajPlik, znajduje się słowo kluczowe "break", które, według mojej wiedzy, powinno kończyć wykonywanie pętli z miejsca, a co za tym idzie - zwracać true i wychodzić z funkcji. W screenie ze strumienia wejściowego, pojawiają się jednak dane już po błędzie. Jest to błąd w rozdziale, czy czegoś nie rozumiem/coś źle zrobiłem? Dodam, że sam napisałem kod, mający wykonywać takie samo zadanie - przerywa się w momencie wystąpienia błędu (nie przechodzi do czwartej linijki). Ba, z kodem skopiowanym z rozdziału dzieje się to samo!
Pozdrawiam i dzięki za odpowiedzi! :)
P-129732
C-Objective
» 2015-04-01 10:33:09
Możesz pokazać kod, bo twoje tłumaczenie nic nam nie wyjaśnia
P-129734
Gage
Temat założony przez niniejszego użytkownika
» 2015-04-01 10:34:01
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;
}
P-129735
RazzorFlame
» 2015-04-01 10:45:15
while( true )
Zmień na:
while( !plik.eof() )
Pętla ta będzie się wykonywała dopóki nie wczyta wszystkiego z pliku.
P-129739
Gage
Temat założony przez niniejszego użytkownika
» 2015-04-01 10:49:56
Metody eof() jeszcze nie poznałem, ale po zmianie działa tak samo, jak true.
W każdym razie, innymi słowy - błąd w przykładzie?
P-129740
RazzorFlame
» 2015-04-01 11:09:38
Podaj wyjście dla zawartości w pliku z danymi:
1 dodac 2
P-129743
Monika90
» 2015-04-01 11:13:05
moim zdaniem zamiast
C/C++
if( plik.good() )
powinno być
C/C++
if( !plik.fail() )
poza tym nie ma błędu, raczej Ty nie zrozumiałeś.
P-129744
Gage
Temat założony przez niniejszego użytkownika
» 2015-04-01 11:17:22
To jest to! Na !plik.fail() wszystko działa (chyba nie rozumiem jeszcze różnicy między plik.good() a !plik.fail()). Chociaż kod, który wkleiłem jest żywcem skopiowany z lekcji 33, a nie kompiluje się cały.
W każdym razie - dzięki!
P-129745
« 1 »
  Strona 1 z 1