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

Poziom 4 nr 32, obsluga "if(plik.good())"

Ostatnio zmodyfikowano 2016-04-23 17:04
Autor Wiadomość
ein_har_jar
Temat założony przez niniejszego użytkownika
Poziom 4 nr 32, obsluga "if(plik.good())"
» 2016-04-23 16:08:32
Linia 34.
Operacja zawarta w instrukcji warunkowej nie zostaje wykonana(nie opdala funkcji wykonajOperacje()), jeśli ostatni odczytany przez program znak jest ostatnim znakiem zawartym z pliku. "plik.good()" wywala fałsz, bo odczytał wszystkie znaki.
Czy jest jest jakaś sprawna droga obejścia tego, poza:
a)dodaniem szeregu warunków prowadzących do wykonania tego if'a +1 raz,
b)dostawieniem jeszcze znaku na końcu pliki tekstowego
C/C++
#include <fstream>
#include <iostream>
#include <string>

void wykonajOperacje( int liczba1, std::string napis, int liczba2 )
{
    std::cout << "\tWykonuje operacje: " << liczba1 << napis << liczba2 << std::endl;
    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;
        std::cout << "\tOdczytalem plik: " << a << b << c << std::endl;
        if( plik.good() ) //                                   <<tutaj
             wykonajOperacje( a, b, c );
        else
             break;
       
    } //while
    return true;
}

int main()
{
    if( !wczytajPlik( "obliczenia.txt" ) )
         std::cout << "Nie udalo sie otworzyc pliku!" << std::endl;
   
    return 0;
}
Z góry wielkie dzięki!
P-147562
Monika90
» 2016-04-23 17:04:49
C/C++
if( plik.good() ) //                                   <<tutaj
     wykonajOperacje( a, b, c );


Zamiast plik.good() powinno być !plik.fail(), zapomnij o plik.good(), plik.good() ma pewnie jakieś zastosowania, ale na ogół nie jest potrzebne, a już na pewno nie jest do tego by sprawdzać poprawność ostatnio wykonanej operacji odczytu.
P-147563
« 1 »
  Strona 1 z 1