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

[C++] Wczytywanie danych z pliku i zapis w strukturze

Ostatnio zmodyfikowano 2018-03-05 01:00
Autor Wiadomość
beredentod
Temat założony przez niniejszego użytkownika
[C++] Wczytywanie danych z pliku i zapis w strukturze
» 2018-03-04 21:17:47
Mam problem z zapisaniem danych z mojego pliku do struktury. Wczytuje się wyłącznie pierwsza "grupa", przy następnych program się wysypuje.
*Proszę nie pisać o tym, że mogę zapisać te dane w postaci tabeli itp.*

C/C++
#include<iostream>
#include<fstream>
using namespace std;
struct pytanie
{
    string pyt;
    string odp1;
    int pkt1;
    string odp2;
    int pkt2;
    string odp3;
    int pkt3;
    string odp4;
    int pkt4;
    string odp5;
    int pkt5;
};
int main()
{
    fstream plik;
    plik.open( "pytania.txt", ios::in | ios::out );
    pytanie lista[ 10 ];
    for( int i = 0; i < 7; i++ )
    {
        getline( plik, lista[ i ].pyt );
        plik >> lista[ i ].odp1;
        plik >> lista[ i ].pkt1;
        plik >> lista[ i ].odp2;
        plik >> lista[ i ].pkt2;
        plik >> lista[ i ].odp3;
        plik >> lista[ i ].pkt3;
        plik >> lista[ i ].odp4;
        plik >> lista[ i ].pkt4;
        plik >> lista[ i ].odp5;
        plik >> lista[ i ].pkt5;
    }
    void close( void );
    for( int i = 0; i < 7; i++ )
    {
        cout << lista[ i ].pyt << "\n";
        cout << lista[ i ].odp1 << " " << lista[ i ].pkt1 << "\n";
        cout << lista[ i ].odp2 << " " << lista[ i ].pkt2 << "\n";
        cout << lista[ i ].odp3 << " " << lista[ i ].pkt3 << "\n";
        cout << lista[ i ].odp4 << " " << lista[ i ].pkt4 << "\n";
        cout << lista[ i ].odp5 << " " << lista[ i ].pkt5 << "\n";
    }
}

plik:

Pytanie 1
odp1 13
odp2 14
odp3 15
odp4 16
odp5 17
Pytanie 2
odp1 13
odp2 14
odp3 15
odp4 16
odp5 17
Pytanie 3
odp1 13
odp2 14
odp3 15
odp4 16
odp5 17
Pytanie 4
odp1 13
odp2 14
odp3 15
odp4 16
odp5 17
Pytanie 5
odp1 13
odp2 14
odp3 15
odp4 16
odp5 17
Pytanie 6
odp1 13
odp2 14
odp3 15
odp4 16
odp5 17
Pytanie 7
odp1 13
odp2 14
odp3 15
odp4 16
odp5 17

P-169763
mateczek
» 2018-03-04 21:56:06
Co masz w pliku?? wklej swój plik
P-169764
mateczek
» 2018-03-04 22:19:28
Po wczytaniu liczby pozbądź się znaków końca linii ze strumienia (jedna z metod jak niżej)
C/C++
char endline; //  
for( int i = 0; i < 7; i++ )
{
    getline( plik, lista[ i ].pyt );
    plik >> lista[ i ].odp1;
    plik >> lista[ i ].pkt1 >> endline; // po wczytaniu liczby pozbądź się znaku końca lini !!!
    plik >> lista[ i ].odp2;
    plik >> lista[ i ].pkt2 >> endline;
    plik >> lista[ i ].odp3;
    plik >> lista[ i ].pkt3 >> endline;
    plik >> lista[ i ].odp4;
    plik >> lista[ i ].pkt4 >> endline;
    plik >> lista[ i ].odp5;
    plik >> lista[ i ].pkt5 >> endline;
}
P-169765
pekfos
» 2018-03-05 01:00:57
Po wczytaniu liczby pozbądź się znaków końca linii ze strumienia (jedna z metod jak niżej)
To ma znaczenie przy mieszaniu >> z getline, a twoja implementacja jest do tego też błędna. Twoja metoda nie ma racji bytu, a na pewno nie dla tak zdefiniowanego endline.

C/C++
void close( void );
A to skąd się wzięło? Bezmyślnie skopiowana linijka z dokumentacji?
P-169767
« 1 »
  Strona 1 z 1