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

Operator >> nie wczytuje ostatniej wartości, znaku, itp.

Ostatnio zmodyfikowano 2014-08-21 20:23
Autor Wiadomość
Sorbet
Temat założony przez niniejszego użytkownika
Operator >> nie wczytuje ostatniej wartości, znaku, itp.
» 2014-08-21 19:58:18
Mój kod z zadania domowego z Lekcji 33:
C/C++
#include <fstream>
#include <iostream>
#include <string>

bool wczytajPlik( std::string nazwaPliku )
{
    int suma = 0;
    std::ifstream plik;
    plik.open( nazwaPliku.c_str() );
    if( !plik.good() )
         return false;
   
    while( true )
    {
        int n;
        plik >> n;
        if( plik.good() )
             suma += n;
        else
             break;
       
    }
    std::cout << "Wynik: " << suma << std::endl;
    return true;
}

int main()
{
    if( !wczytajPlik( "input.txt" ) )
         std::cout << "Nie udalo sie otworzyc pliku!" << std::endl;
   
    std::cout << "Nacisnij [Enter]...";
    std::cin.get();
    return 0;
}

Wyjscie przy "1 1 1 1" w pliku input.txt:
3

przy "10 10":
10

przy "1":
0

Czy robię coś nie tak? Czy coś jest nie tak z moim kompilatorem? Proszę o pomoc, bo strasznie mnie to frustruje.
P-115884
Monika90
» 2014-08-21 20:01:54
źle sprawdzassz czy operacja odczytu się udała, zamiast if (plik.good())
powinno być if (!plik.fail()), albo po prostu if (plik)
P-115885
Sorbet
Temat założony przez niniejszego użytkownika
» 2014-08-21 20:06:35
Nie chcę wyjść na kopiujkota, ale wrzucam link do części kursu, jeśli możesz, przeczytaj przykład spod paragrafu PRZYKŁAD http://cpp0x.pl/kursy/Kurs-C++​/Poziom-4​/Wczytywanie-danych-z-pliku-za​-pomoca-operatora​/325

.fail()
 jest do sprawdzania wczytania danych ze strumienia, a
.good()
 do sprawdzania czy udało się załadować plik do zmiennej.
Dobrze zrozumiałem?
P-115888
Monika90
» 2014-08-21 20:17:48
good zwraca true jeżeli operacja się powiodła oraz nie osiągnieto końca pliku, więc jest sens czytać dalej. Jeżeli operacja się powiodła ale podczas jej wykonywania osiągnięto koniec pliku, to good zwraca false.

fail zwraca true jeżeli operacja się nie udała, false w przeciwnym wypadku.

W zasadzie good jest bezużyteczne, sprawdzać czy plik udało się otworzyć też możesz za pomocą !plik.fail()
P-115892
Sorbet
Temat założony przez niniejszego użytkownika
» 2014-08-21 20:20:10
A po porstu if(plik)?
P-115893
pekfos
» 2014-08-21 20:21:58
To to samo co if(!plik.fail()).
P-115894
Sorbet
Temat założony przez niniejszego użytkownika
» 2014-08-21 20:23:42
Dzięki wielkie.
Może dobrze by było poprawić tamten fragment kursu, żeby nie było już więcej takich pytań?
P-115897
« 1 »
  Strona 1 z 1