getline przestaje działać gdy napotyka na znak
Ostatnio zmodyfikowano 2011-12-29 11:44
robaczek122 Temat założony przez niniejszego użytkownika |
getline przestaje działać gdy napotyka na znak » 2011-12-26 00:21:56 strzałeczka w prawo - - w tablicy ASCII ma nr 26 - "SUB - (Substitute) - zastąpienie" Prosty program typu: while( myfile.good() ) { getline( myfile, line ); cout << line; }
przestaje wczytywać kolejne linijki jak trafi na ten znak. Ogólnie porównuję ze sobą dwa pliki, pobierając i porównują z każdego po jednej linii, więc jeśli ten znak występuje gdzieś na początku, przed pierwszą różnicą pomiędzy plikami, w wyniku dostaję, że dwa pliki są identyczne. Ma ktoś jakiś pomysł jak to ominąć? |
|
DejaVu |
» 2011-12-26 12:11:04 Jeżeli porównujesz dwa pliki to rób to binarnie, a nie tekstowo - użyj metody read z fstream-a. |
|
robaczek122 Temat założony przez niniejszego użytkownika |
» 2011-12-26 12:36:18 ok, poczytam, dzięki za odpowiedź. Zastanawiałem się jednak dlaczego w takim kodzie: #include <iostream> #include <fstream> #include <string> using namespace std;
int main() { string line; ifstream myfile( "test.txt" ); if( myfile.is_open() ) { myfile.seekg( 1, ios_base::beg ); if( myfile.fail() ) cout << "Fail" << endl; cout << myfile.tellg(); getline( myfile, line ); cout << line << endl; cout << line.length() << endl; cout << myfile.tellg() << endl; myfile.seekg( 9, ios_base::beg ); if( myfile.fail() ) cout << "Fail" << endl; cout << myfile.tellg(); getline( myfile, line ); cout << line << endl; myfile.close(); } else cout << "Unable to open file"; getchar(); return 0; }
W pierwszym pobraniu pobiera od drugiego znaku (zgodnie z "myfile.seekg( 1, ios_base::beg );"), natomiast w drugim pobraniu, getline zwraca to samo co w pierwszym mimo zmienionego "myfile.seekg( 9, ios_base::beg );" z 1 na 9. Czegoś chyba tu nie rozumiem... EDIT: Oki udało się binarnie, ale jeżeli ktoś może zaspokoić moją ciekawość dlaczego to powyżej działa sprzecznie z moją logiką, to będę bardzo wdzięczny. |
|
pekfos |
» 2011-12-26 15:17:07 Ile bajtów ma ten plik? .fail() nie wychwytuje eofbita. |
|
robaczek122 Temat założony przez niniejszego użytkownika |
» 2011-12-29 01:17:35 Plik może być dowolnie długi, byleby była 1 linijka. Nie wyskakuje żaden fail. Plik nie musi zawierać też tego znaku, żeby program zachowywał się jak dla mnie dziwnie. |
|
pekfos |
» 2011-12-29 09:59:29 getline zwraca to samo co w pierwszym mimo zmienionego "myfile.seekg( 9, ios_base::beg );" z 1 na 9. |
Tak, nie rozumiesz. |
|
robaczek122 Temat założony przez niniejszego użytkownika |
» 2011-12-29 11:44:06 Rozumiem, że nie rozumiałem tylko, że należy dać myfile.clear() ? |
|
« 1 » |