• 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

HackNation - ogólnopolski hackathon
0 głosów
282 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,211 wizyt
pytanie zadane 26 stycznia 2017 w C i C++ przez Grzegorz Lipski Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 1,150 wizyt
pytanie zadane 14 maja 2016 w C i C++ przez szymi666 Bywalec (2,020 p.)
0 głosów
1 odpowiedź 173 wizyt
pytanie zadane 29 listopada 2015 w C i C++ przez andrzej_bl Bywalec (2,390 p.)

93,627 zapytań

142,551 odpowiedzi

323,050 komentarzy

63,133 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 1694p. - dia-Chann
  2. 1676p. - DziarnowskiJ
  3. 1650p. - Łukasz Piwowar
  4. 1640p. - CC PL
  5. 1616p. - Maurycy W
  6. 1607p. - raydeal
  7. 1602p. - Adrian Wieprzkowicz
  8. 1588p. - Tomasz Bielak
  9. 1521p. - Michal Drewniak
  10. 1491p. - Rafał Trójniak
  11. 1471p. - rafalszastok
  12. 1444p. - robwarsz
  13. 1257p. - ssynowiec
  14. 1208p. - Mariusz Fornal
  15. 1116p. - rucin93
Szczegóły i pełne wyniki

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
...