• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

seekg() - problem z użyciem

Cloud VPS
0 głosów
634 wizyt
pytanie zadane 26 stycznia 2020 w C i C++ przez Agnes Użytkownik (990 p.)
Funkcja nie działa mimo załączenia biblioteki <fstream> w Visual Studio 2019. Da się to jakoś naprawić? Był komunikat o tym, że nie ma szablony klasy std::basic_istream, ale po dodaniu biblioteki <istream>, w której ta klasa jest zdefiniowana problem wciąż jest.

A może jest jakaś alternatywa dla tej funkcji?
komentarz 26 stycznia 2020 przez Agnes Użytkownik (990 p.)
W ten pierwszy sposób. No tak...Dzięki za pomoc
komentarz 26 stycznia 2020 przez tangarr Mędrzec (155,180 p.)
Pierwszy sposób nie ma sensu. Nawet gdyby taka funkcja istniała to skąd by miała wiedzieć, że ma użyć twojego strumienia?
komentarz 26 stycznia 2020 przez Agnes Użytkownik (990 p.)
Rzeczywiście nie ma. Przy okazji, ta funkcja przesuwa kursor w pliku o jeden bajt, czyli w praktyce o jeden znak, więcej jeśli chcę, żeby kursor znalazł się tuż przed następnym słowem to muszę to ustawić "ręcznie", czy jest też na to gotowa funkcja?
komentarz 26 stycznia 2020 przez tangarr Mędrzec (155,180 p.)
Nic takiego nie przychodzi mi na myśl. Jeżeli nie znasz struktury pliku to takie skakanie bez szklanej kuli wydaje mi się niemożliwe. Najlepiej czytać plik znak po znaku, aż znajdziesz ciekawy fragment. Jeżeli potrzebujesz pobrać aktualną pozycję w pliku użyj funkcji tellg http://www.cplusplus.com/reference/istream/istream/tellg/
komentarz 26 stycznia 2020 przez niezalogowany

@Agnes,
 a może jednak lepiej użyć getline (strumien, string, '$');

struct slowo{
string word;
}

istream & operator >> (istream & in, slowo & s){
getline(in,s.word,'$');
return in;
}

z pliku o treści:"wouwoio oiw  $biuhiuHIU  $AIOHHIAOHO A$ "

do word powinno wczytać 
obj slowo slowo1 // wouwoio oiw  
obj slowo slowo2 // biuhiuHIU  
obj slowo slowo3 // AIOHHIAOHO A

 

1 odpowiedź

+1 głos
odpowiedź 26 stycznia 2020 przez tangarr Mędrzec (155,180 p.)

Udało się nam znaleźć rozwiązanie w komentarzach pod pytaniem dlatego dla czystej formalności dodaję odpowiedź.
Żeby użyć funkcji seekg trzeba ją wywołać na obiekcie. Przykład:
 

#include <iostream>
#include <fstream>
  
int main() {
    std::fstream in;
    in.open("in1.txt");
    in.seekg(3, std::ios::cur);
    return 0;    
}

 

Podobne pytania

0 głosów
1 odpowiedź 433 wizyt
0 głosów
0 odpowiedzi 527 wizyt
0 głosów
1 odpowiedź 454 wizyt

93,468 zapytań

142,404 odpowiedzi

322,706 komentarzy

62,849 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...