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

rozdzial/lekcja 35, zadanie nr 1

Ostatnio zmodyfikowano 2022-04-24 20:07
Autor Wiadomość
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.

C/C++
#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 ); // zamiennie z plik.seekg( 2, std::ios::cur );
       
plik >> znak;
       
if( plik.tellg() > - 1 ) //gdy plik ma niepodzielna przez 3 ilosc znakow.
       
{
           
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?
P-179427
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'.
P-179428
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?
P-179429
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).
P-179430
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:)
P-179432
« 1 »
  Strona 1 z 1