• 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

Object Storage Arubacloud
0 głosów
171 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,028 wizyt
pytanie zadane 26 stycznia 2017 w C i C++ przez Grzegorz Lipski Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 843 wizyt
pytanie zadane 14 maja 2016 w C i C++ przez szymi666 Bywalec (2,020 p.)
0 głosów
1 odpowiedź 116 wizyt
pytanie zadane 29 listopada 2015 w C i C++ przez andrzej_bl Bywalec (2,390 p.)

92,565 zapytań

141,417 odpowiedzi

319,602 komentarzy

61,950 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...