Witam, w moim programie używam pliku .txt którego używam zarówno do odczytu jak i zapisu, zauważyłem że jeżeli otworze go z atrybutem st::ios::ate to odczyt getlinem jest niemożliwy i z tego co wyczytałem w google to dlatego bo jest jakiś wewnętrzny wskaźnik, który wskazuje na odczytywane miejsce w pliku a ten tryb ustawia go na końcu.
Tak więc przy odczytywaniu pliku zamykam go dla trybu ate i otwieram dla zwykłego std::ios::in, tu pojawia się problem bo mam funkcję
bool sprawdz_login_haslo(std::string login,std::string haslo){
while(std::getline(uzytkownicy,tmp)){
log=tmp.substr(0,tmp.find("-"));
has=tmp.substr(tmp.find("-")+3,tmp.size()-1);
if(login==log&&haslo==has){zwracana=true;break;}
}
return zwracana;
}
uzytkownicy to fstream
i póki podaje dane wejściowe które mogę odnaleźć w tym pliku to wszystko działa, a jeżeli podam dane których nie ma to przy następnym uruchomieniu funkcja daje złe wyniki.
Łatwiej wytłumaczyć to na przykładzie, plik mamy z zawartoscia:
ohoho---ahaha
pawel---jutro
uio---uio
teraz wywolajmy funkcje dla arg("ohoho","ahaha") daje true, i dla ("uio","uio") tez daje true(czyli prawidlowo), ale jeżeli uruchomie ją dla dowolnych danych nie znajdujacych sie w pliku, np ("aaaa","bbbb") to tu da prawidlowy wynik ale przy nastepnym uruchomieniu dla danych ("ohoho","ahaha") wyniki juz sa błędne.
podejzewam ze ma to coś wsólnego z tym wskaźnikiem przoszę o pomoc, dodam że przed każdem wywołaniem funkcji zamykam i na nowo otwieram plik