Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Lekcja 35 metoda tellg pomija dane z pliku

Ostatnio zmodyfikowano 2016-10-12 17:17
Autor Wiadomość
grego
Temat założony przez niniejszego użytkownika
Lekcja 35 metoda tellg pomija dane z pliku
» 2016-10-11 18:52:53
Napisałem program, który wczytuje z pliku tekstowego liczby od 1 do 8. Problem w tym, że po użyciu metody tellg program wczytuje tylko 3 liczby i podaje 3 pozycje. Pytanie brzmi jak powinienem użyć tej metody aby program zaczął poprawnie działać
C/C++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
bool Wczytaj_liczby( ifstream & plik, int & i )
{
    int z;
    plik.clear();
    plik >> z;
    int pozycja = plik.tellg();
    if( plik.bad() )
    {
        cout << "Blad sprzetowy!" << endl;
        return false;
    }
    if( plik.fail() )
    {
        return false;
    }
    else
    {
        cout << "Wczytana liczba to: " << z << endl;
        cout << "Pozycja pliku: " << pozycja << endl;
    }
    i += z;
}
bool Wczytaj_Plik( string nazwaPliku )
{
    int i = 0;
    ifstream plik;
    plik.open( nazwaPliku.c_str() );
    if( !plik.good() )
         return false;
    else
         cout << "Wczytano" << endl;
   
    plik.seekg( 0 );
    while( !plik.eof() )
    {
        if( !Wczytaj_liczby( plik, i ) && plik.fail() )
             break;
       
    }
    cout << "Suma Wszystich liczb to: " << i << endl;
    return true;
}
int main()
{
    if( !Wczytaj_Plik( "Dane.txt" ) )
         cout << "Nie wczytano pliku" << endl;
   
    return 0;
}
P-152446
mateczek
» 2016-10-11 22:06:55
masz jakiś powód by tak kombinować ??
C/C++
#include<iostream>
#include<fstream>
using namespace std;
int main() {
    ifstream plik( "plik.txt" ); //deklaracja zmiennej plik i otwarcie
    if( !plik ) {
        cout << "brak pliku" << endl; //sprawdzenie czy plik istnieje
        return 0;
    }
    int liczba, pozycja, suma = 0;
    pozycja = plik.tellg();
    while( plik >> liczba ) {
        cout << "na pozycji " << pozycja << " znajduje sie liczba " << liczba << endl;
        pozycja = plik.tellg();
        suma += liczba;
    }
    cout << "suma liczb = " << suma << endl;
    return 0;
}
P-152462
grego
Temat założony przez niniejszego użytkownika
» 2016-10-12 16:55:49
Niestety podany kod źródłowy wciąż wczytuje 3 cyfry i 3 pozycje ( w przypadku zapisania liczb w jednym wierszu, które są oddzielone białymi znakami wczytują się 4 liczby i 4 pozycje) . A względem kombinowania to eksperymentuje z kodem źródłowym i utrwalam wiadomości z poprzednich lekcji.
P-152491
mateczek
» 2016-10-12 16:56:34
podaj jaki masz plik bez tego możemy tylko gdybać ??
P-152492
grego
Temat założony przez niniejszego użytkownika
» 2016-10-12 17:04:48
Link do pliku
https://www.easypaste.org/file/manage/s7Ifc5hpK8ERzOBVMQGb?lan
P-152493
mateczek
» 2016-10-12 17:11:44
plik w porządku kod w porządku. Pewnie wrzucasz plik nie w to miejsce co trzeba. a otwierasz inny w którym masz 3 cyfry :P

na pozycji 0 znajduje sie liczba 1
na pozycji 3 znajduje sie liczba 2
na pozycji 5 znajduje sie liczba 3
na pozycji 7 znajduje sie liczba 4
na pozycji 9 znajduje sie liczba 5
na pozycji 11 znajduje sie liczba 6
na pozycji 13 znajduje sie liczba 7
na pozycji 15 znajduje sie liczba 8
suma liczb = 36
dane.txt to dość popularna nazwa :P
P-152496
grego
Temat założony przez niniejszego użytkownika
» 2016-10-12 17:17:50
Podałem ścieżkę bezwzględną w twoim kodzie jak i w moim wciąż nie działa (dane.txt były jednym plikiem o tej nazwie w katalogu roboczym), ale po stworzeniu nowego pliku tekstowego z tymi samymi danymi wszystko jest w porządku. Jakiś pomysł dlaczego ? No i przede wszystkim dziękuje za pomoc :).
P-152497
« 1 »
  Strona 1 z 1