Wczytywanie danych z pliku getline'm a potem operatorem >>

0

Witam.
Tutaj przedstawiam fragment kodu, w którym występuje problem.

Chodzi o to, że jak wczytuje dane z pliku operatorem >> po użyciu getline to nie wczytuje tych danych poprawnie. ( znaczy pierwsze 3 linijki tak. )
Kiedy używałem cin.getline() a zaraz potem 'cin >>' wystarczyło użyć : cin.sync(); Czy istnieje jakiś odpowiednik tego dla tego sytuacji ?

  while(i--){
            plik.getline(o[i].nazw_im, 30, '\n');
            plik.getline(o[i].dzial, 20, '\n');
           plik >> o[i].pesel;
           plik.clear();
            cout << o[i].nazw_im << '\n';
            cout << o[i].dzial << '\n';
            cout << o[i].pesel << '\n';
        }

Pozdrawiam.

0

Z tego co tutaj widać korzystasz z gołej tablicy char[].
Zamień to na dobrodziejstwa C++ tj: std::string oraz std::getline.
http://www.cplusplus.com/reference/ostream/ostream/flush/

0
 #include <iostream>
#include <fstream>
using namespace std;

struct dane{
    char nazw_im[30];
    char dzial[20];
    int pesel;
};
int main()
{
    fstream plik;
    plik.open("test.txt");
    dane o[10];
    int i = 2;
    if (plik.is_open()){
        while(i--){
                cout << "tu" << '\n';
            plik.getline(o[i].nazw_im, 30, '\n');
            plik.getline(o[i].dzial, 20, '\n');
           plik >> o[i].pesel;
           plik.sync();
            cout << o[i].nazw_im << '\n';
            cout << o[i].dzial << '\n';
            cout << o[i].pesel << '\n';
        }


        plik.close();
    }
    return 0;
}

0
carlosmay napisał(a):

Z tego co tutaj widać korzystasz z gołej tablicy char[].
Zamień to na dobrodziejstwa C++ tj: std::string oraz std::getline.
http://www.cplusplus.com/reference/ostream/ostream/flush/

Chciałbym ,ale na zaliczeniu string jest zakazany. Dlaczego, to nie pytaj, bo sam nie wiem. Nie możemy ich używać i tyle, dlatego meczę się z char'ami, bo na stringach umiem to zrobić.

Pozdrawiam.

0

Jeśli nie możesz to korzystaj z tego, że struktura jest PODem i wczytuj ją całą do pliku binarnego,
i całą odczytuj z pliku.

0

PODem ?

Ale nadal nie wiem, jak to zaimplementować :/ Mógłby ktoś podlinkować jakiś przykład lu bew. napisać tutaj ?

1

getline() i czytanie ze strumienia nie działają jednakowo. getline() pozostawia znaki '\n'.

#include <iostream>
#include <fstream>
#include <limits>

using namespace std;

struct dane {
    char nazw_im[30];
    char dzial[20];
    int pesel;
};

int main() {
    ifstream plik;
    plik.open("test.txt");
    dane o[10];
    int i = 2;
    if (plik.is_open()) {
        while(i--) {
            cout << "--------------" << endl;
            plik.getline(o[i].nazw_im, 30, '\n');
            plik.getline(o[i].dzial, 20, '\n');
            plik >> o[i].pesel;
            plik.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            cout << o[i].nazw_im << '\n';
            cout << o[i].dzial << '\n';
            cout << o[i].pesel << '\n';
        }

        plik.close();
    }
} 

1 użytkowników online, w tym zalogowanych: 0, gości: 1