rozdzial/lekcja 35, zadanie nr 1
Ostatnio zmodyfikowano 2022-04-24 20:07
jebackoze Temat założony przez niniejszego użytkownika |
rozdzial/lekcja 35, zadanie nr 1 » 2022-04-24 08:41:24 napisalem taki kod, ktory dziala, ale nie wiem jak inaczej rozwiazac problem, gdy plik zawiera niepodzielna przez 3 ilosc znakow, np.: 12a12b12c12d12e12f1. jesli ilosc znakow jest podzielna przez 3, nie trzeba robic if ktory umiescilem w kodzie ponizej. #include <iostream> #include <fstream>
int main() { std::ifstream plik( "ddd.txt" ); if( !plik.good() ) return 0; plik.seekg( 0 ); char znak; while( true ) { plik.seekg( plik.tellg() + 2 ); plik >> znak; if( plik.tellg() > - 1 ) { std::cout << "co trzeci znak to: " << znak << std::endl; std::cout << "obecna pozycja: " << plik.tellg() << "\n" << std::endl; } if( plik.eof() ) break; } return 0; }
jesli nie ma warunku if( plik.tellg() > - 1 ) to zwraca mi ostatni znak dwa razy oraz ostatnia pozycja pojawia sie -1. dlaczego tak? czy jest jakis latwiejszy sposob, aby nie zwracal mi ost. znaku 2x z dziwna pozycja? |
|
DejaVu |
» 2022-04-24 12:39:04 Zanim wypiszesz komunikat powinieneś sprawdzić czy udało się znak odczytać. Ty wypisujesz znak niezależnie od tego czy udało się go odczytać czy nie. W konsekwencji wypisujesz ostatni znany stan zmiennej 'znak'. |
|
jebackoze Temat założony przez niniejszego użytkownika |
» 2022-04-24 12:42:03 if( plik.tellg() > - 1 ) zmienilem na if( !plik.fail() ) powinno chyba byc juz ok? |
|
DejaVu |
» 2022-04-24 12:43:17 Po prostu sprawdź :) Na pierwszy rzut oka wygląda okej, ale tych metod do obsługi dysku ostatni raz używałem X-lat temu, więc patrząc na sam kod nie jestem pewien czy zadziała. W każdym razie kod logicznie wyglądać będzie po tej zmianie (innymi słowy: poprawnie rozumujesz co jest najważniejsze). |
|
jebackoze Temat założony przez niniejszego użytkownika |
» 2022-04-24 20:07:36 kod mi dziala i tu i tu, ale fakt faktem, ze po zmianie wyglada znacznie lepiej i o to chodzilo:)
|
|
« 1 » |