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

Wartość zwracana przez metodę tellg po odczytaniu pierwszego znaku

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
232 wizyt
pytanie zadane 2 kwietnia 2016 w C i C++ przez enigmatycznyclay Bywalec (2,450 p.)
edycja 2 kwietnia 2016 przez enigmatycznyclay
#include <iostream>
#include <fstream>


int main()
{
    std::ifstream plik;
    char znak;
    plik.open("file.txt");
    while(!plik.eof())
    {
        std::cout<<plik.tellg();
        plik>>znak;
        std::cout<<znak;
        std::cout<<plik.tellg();
    }
    plik.close();
    return 0;
}

Używając tego programu zauważyłem jedną bardzo dziwną rzecz. Chodzi o to, że przed odczytaniem pierwszego znaku metoda tellg zwraca wartość 0. Po jego odczytaniu zamiast zwrócić wartość 1 zwraca wartość 3(ale wszystko podczas wczytywania działa dobrze), a już wszystkie kolejne użycia metody tellg zwracają wartości po kolei(poczynając od 4 w górę). Może mi to ktoś wytłumaczyć. Dlaczego po odczytaniu pierwszego znaku wartość zwracana przez tą metodę tak się zmienia?(sorry za spam pytaniami o tą metodę, ale sprawia mi ona jakies wyjątkowe problemy) ;) 

zawartość plik:

qweqweqweqwe

qweqweqweqwe

qweqwe

1 odpowiedź

0 głosów
odpowiedź 2 kwietnia 2016 przez niezalogowany

Zamień to:

plik>>znak;

na:

plik>>std::noskipws>>znak;

Standardowo są pomijane białe znaki. Dzięki noskipws nie będzie to robione.

komentarz 2 kwietnia 2016 przez enigmatycznyclay Bywalec (2,450 p.)
edycja 2 kwietnia 2016 przez enigmatycznyclay
Sęk w tym, że oprócz enterów nie ma tam białych znaków. Zauważyłem jeszcze jedną ciekawą rzecz. Jeżeli plik zawiera tylko jeden wiersz znaków(bez enterów) to indexy znaków zaczynają się od 0. Jeżeli dodam jakieś entery w pliku to indexy znaków zaczynają się od numeru, który jest liczbą umieszczonych w pliku enterów(a raczej liczbą wierszy w plik, a nawet tych pustych). Ciekawe.
komentarz 2 kwietnia 2016 przez niezalogowany
A sprawdzałeś czy działa ci zapis powyżej?
komentarz 2 kwietnia 2016 przez enigmatycznyclay Bywalec (2,450 p.)
Sprawdziłem, ale nic nie zmienia bo problem tkwi w tym, dlaczego po odczytaniu pierwszego znaku metoda tellg zwraca wartość zależną od ilości enterów umieszczonych na końcu wiersza. Z tą numeracją wiąże się jeszcze jeden problem(w korzystaniu z metody seekg).

Podobne pytania

0 głosów
1 odpowiedź 1,151 wizyt
pytanie zadane 26 stycznia 2017 w C i C++ przez Grzegorz Lipski Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 1,094 wizyt
pytanie zadane 14 maja 2016 w C i C++ przez szymi666 Bywalec (2,020 p.)
0 głosów
1 odpowiedź 142 wizyt
pytanie zadane 29 listopada 2015 w C i C++ przez andrzej_bl Bywalec (2,390 p.)

93,444 zapytań

142,436 odpowiedzi

322,698 komentarzy

62,806 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

...