Lucas535 Temat założony przez niniejszego użytkownika |
Czy metoda eof() musi wczytać endl, żeby zwrócić wartość false? » 2016-04-23 18:25:08 Jeżeli wczytuję dane z pliku wierszami, a w końcu ostatniego nie ma endl, eof() zwraca true. Da się jakoś temu zapobiec? |
|
Monika90 |
» 2016-04-23 18:40:20 A dlaczego chcesz temu zapobiec? Poza tym znak końca linii nie nazywa się endl tylko \n |
|
Lucas535 Temat założony przez niniejszego użytkownika |
» 2016-04-23 19:56:59 Chcę się dowiedzieć, czy można odczytać dane z pliku, który nie miałby na końcu tego przeniesienia. Poza tym znak '\n' również jest interpretowany jako koniec pliku i nie można wczytać tak zakończonego wiersza, trzeba użyć endl. |
|
Monika90 |
» 2016-04-23 20:47:11 Można odczytać dane do końca, dlaczego nie? Jedynym problemem może być znak o kodzie 26, ponieważ w Windows biblioteki standardowe niektórych języków programowania uznają ten znak za znacznik końca pliku. Otworzenie pliku w trybie binarnym zapobiega takiemu zachowaniu. Poza tym znak '\n' również jest interpretowany jako koniec pliku
|
Na pewno nie w Windows, pod Linuksem też nie. |
|
Lucas535 Temat założony przez niniejszego użytkownika |
» 2016-04-23 21:25:08 Jest tak jak pisałem. Może to zależy od kompilatora? Sprawdzę jeszcze później na innym. |
|
mateczek |
» 2016-04-24 06:20:19 wklej kod którym czytasz to się przeanalizuje. I wtedy jest szansa wyłapać gdzie masz błąd znak '\n' również jest interpretowany jako koniec pliku i nie można wczytać tak zakończonego wiersza, trzeba użyć endl. |
coś Ci się pomieszało!!! 1. koniec wiersza czasami jest to '/n'(linux) a czasem '/r'+'/n' dwa znaki o kodach 13 10 hex(0D,0A)(windows). https://pl.wikipedia.org/wiki/Koniec_linii2. znak '/n' nie ma nic wspólnego z końcem pliku 3. pliki czytaj pętlą string linia; while( geline( plik, linia ) ) { }
|
|
Lucas535 Temat założony przez niniejszego użytkownika |
» 2016-04-24 10:55:26 Nic mi się nie pomieszało, przecież nie piszę tego z głowy tylko to co robi program. Po pierwsze, bez endl na końcu program nie wypisze ostatniego wersu: #include <iostream> #include <fstream> using namespace std;
int main() { char napis[ 50 ]; fstream fout; fout.open( "abc.txt", ios::out ); fout << "wiersz 1" << endl; fout << "wiersz 2" << endl; fout << "wiersz 3"; ifstream fin; fin.open( "abc.txt" ); while( !fin.eof() ) { fin.getline( napis, 50 ); cout << napis << endl; } fin.close(); fout.close(); return 0; }
Po drugie, gdy napotka '\n', interpretuje jako koniec pliku (jest to już w pierwszym wierszu, więc go nie wypisuje): #include <iostream> #include <fstream> using namespace std;
int main() { char napis[ 50 ]; fstream fout; fout.open( "abc.txt", ios::out ); fout << "wiersz 1\n"; fout << "wiersz 2\n"; fout << "wiersz 3"; ifstream fin; fin.open( "abc.txt" ); while( !fin.eof() ) { fin.getline( napis, 50 ); cout << napis << endl; } fin.close(); fout.close(); return 0; }
Po trzecie, wypisze wszystkie dane jeśli w ostatnim wierszu dodałem endl: #include <iostream> #include <fstream> using namespace std;
int main() { char napis[ 50 ]; fstream fout; fout.open( "abc.txt", ios::out ); fout << "wiersz 1" << endl; fout << "wiersz 2" << endl; fout << "wiersz 3" << endl; ifstream fin; fin.open( "abc.txt" ); while( !fin.eof() ) { fin.getline( napis, 50 ); cout << napis << endl; } fin.close(); fout.close(); return 0; }
Oczywiście do pliku są zapisywane wszystkie dane, można sprawdzić. Może robię coś źle, nie wiem, więc pytam. Na koniec dodam, że gdy ręcznie wpisuję dane do pliku, bez przeniesienia po ostatnim wierszu to program czyta wszystko. |
|
mateczek |
» 2016-04-24 11:17:47 // a teraz ?? #include <iostream> #include <fstream> using namespace std;
int main() { char napis[ 50 ]; fstream fout; fout.open( "abc.txt", ios::out ); fout << "wiersz 1" << endl; fout << "wiersz 2" << endl; fout << "wiersz 3"; fout.close(); ifstream fin; fin.open( "abc.txt" ); while( !fin.eof() ) { fin.getline( napis, 50 ); cout << napis << endl; } fin.close(); return 0; }
|
|
« 1 » 2 3 |