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

Wczytywanie z plku tekstowego po znaku

Ostatnio zmodyfikowano 2013-07-18 17:40
Autor Wiadomość
Kraver
Temat założony przez niniejszego użytkownika
Wczytywanie z plku tekstowego po znaku
» 2013-07-18 10:29:52
Natrafiłem na dość dziwny błąd podczas wczytywania

C/C++
bool WriteTextFromFile()
{
    using namespace std;
    ifstream inFile;
    inFile.open( "test.txt" );
    if( !inFile.is_open() )
         return 0;
   
    char input;
    while( inFile.good() )
    {
        inFile.get( input );
        SaveCodeToFile( input );
    }
    inFile.close();
    return 1;
}
bool SaveCodeToFile( char input )
{
    using namespace std;
   
    ofstream outFile;
    outFile.open( "binar.txt", ios_base::app );
    outFile << bitset < 8 >( input );
    outFile.close();
    return 0;
}

Z jakiś przyczyny petla while wykonuje sie zawsze n+1 razy gdzie n to liczba znaków. Potrafię rozwiązać ten problem umieszczając warunek:Cpp code
C/C++
if( inFile.good() )
{
    SaveCodeToFile( input );
    cout << bitset < 8 >( input );
}

Zastanawia mnie czy jest lepsze rozwiązanie. Może da sie jakoś ulepszyć warunek wykonywania się petli ?

Drugi błąd polega na zapisaniu do pliku dodatkowego cudzysłowu na koncu pliku. Do konsoli zostaje przesłana poprawna wartość.
C/C++
bool WriteTextFromFile()
{
    using namespace std;
    ifstream inFile;
    inFile.open( "test.txt" );
    if( !inFile.is_open() )
         return 0;
   
    char input;
    while( inFile.good() )
    {
        inFile.get( input );
        SaveCodeToFile( input );
        cout << bitset < 8 >( input );
    }
    inFile.close();
    return 1;
}

bool SaveCodeToFile( char input )
{
    using namespace std;
   
    ofstream outFile;
    outFile.open( "binar.txt", ios_base::app );
    outFile << bitset < 8 >( input );
    outFile.close();
    return 0;
}
P-88159
pekfos
» 2013-07-18 12:19:18
eofbit jest ustawiany dopiero przy próbie odczytu, gdy nie ma już niczego w buforze. good() zwraca false, gdy jakakolwiek flaga błędu jest ustawiona (w tym eofbit).
P-88166
m4tx
» 2013-07-18 12:47:46
Dlaczego używasz
using namespace std;
 w każdej funkcji zamiast wstawić go na początku pliku, po
#include
'ach?
P-88168
Monika90
» 2013-07-18 17:40:56
@m4tx
Może nie chce zaśmiecać globalnej przestrzeni nazw?
P-88204
« 1 »
  Strona 1 z 1