seekg idzie o 1 w tył zamiast do przodu – jak to naprawić?

0

Witam ponownie ;(

Ponownie projekt zaliczeniowy który ogólnie ma być prostym konsolowym programem do powiększania/obracania/wycinania obrazów. Ale zanim to nastąpi muszę pobrać odpowiednie dane z pliku tekstowego pominąć komentarze i nagłówek. I sporą przy tym pomocą jest kombinacja metod .seekg() .getline() i .get(). Niestety próbując wycofać się o jedną pozycję z powrotem po użyciu > .get() za pomocą plik2.seekg(-1,ios::cur); idę o jedną pozycję do przodu ;( ktoś wie dlaczego i jak mogę to naprawić?

	do{
			while(pierwszy_znak_lini=='#'){
			getline(plik2,pusta);
			plik2.get(pierwszy_znak_lini);
			}
		if(pierwszy_znak_lini=='#')break;	
		plik2.get(pierwszy_znak_lini);
	}
	while(pierwszy_znak_lini=='#'|pierwszy_znak_lini=='\n'|pierwszy_znak_lini=='\r');
	plik2.seekp(-1,ios::cur);
//	int pozycja = plik2.tellp();
		int a;
		plik2>>a;
		cout<<endl<<a;

Poniżej cały projekt jeśli komuś ten kluczowy urywek nie wystarcza.

2

Mówisz o seekg a w kodzie masz seekp. I właściwie na tym można analizę zakończyć...

0

Z tego co wyczytałem w fstream działają identycznie i można używać zamiennie. Ale nie byłem tego pewien więc w ramach testów podmieniłem i zapomniałem zmienić przed wrzuceniem tego tematu.

0

seekp ustawia pozycję wskaźnika zapisu, a seekg wskaźnika odczytu.
W pliku pracują dwa wskaźniki.

0

Dostęp swobodny oznacza możliwość przemieszczania się w dowolne miejsce pliku bez przymusu przesuwania się po kolei po jego zawartości. Służą do tego metody:

seekg() - przesuwa wskaźnik wejściowy w miejsce podane wewnątrz pliku (możemy korzystać z obiektami klasy ifstream)
seekp() - przesuwa w podane miejsce wewnątrz pliku wskaźnik wyjściowy (możemy korzystać z obiektami klasy ofstream)
Obie używamy, gdy mamy do czynienia z obiektami klasy fstream

źródło

Nie chce mi się teraz szukać ale w innym poradniku który czytałem było coś ala że w fstream przesunięcie odczytu jest równoważne z przesunięciem wskaźnika zapisu

!!!!!!ALE NIE MA TO ZNACZENIA!!!!!!!
Bo eksperymentując używałem obu w wszelkich kombinacjach i oba działały tak samo : Dla argumentów (-1,cur) przesuwają o jeden w prawo. Podczas gdy wyczytałem że spokojnie można używać ujemnych wartościktóre cofają wskaźnik w lewo.
Jeśli by ktoś czepiał się to używałem też ios::cur jak i ios_base::cur

0

Czy ja tu widzę nabijanie postów?

ktoś wie dlaczego i jak mogę to naprawić?

Bo eksperymentując używałem obu w wszelkich kombinacjach i oba działały tak samo : Dla argumentów (-1,cur) przesuwają o jeden w prawo. Podczas gdy wyczytałem że spokojnie można używać ujemnych wartości które cofają wskaźnik w lewo.
Jeśli by ktoś czepiał się to używałem też ios::cur jak i ios_base::cur

Wniosek --> Tak używałem tego w "prawidłowej" kombinacji i problem nadal występował. --> trzeba wymyślić coś innego ;(

P.S.
Nwm nie ma dużego doświadczenia w programowaniu ale zauważyłem po niektórych błędach że w dokumentacji czasami brakuje (lub jestem za głupi na zauważenie) pewnych niuansów

0

SOA #1

$ g++ 4prognet.cpp -o 4prognet && ./4prognet 
#include 8
seek: 7
e 8

1 użytkowników online, w tym zalogowanych: 0, gości: 1