Wyświetlenie danych z pliku CSV – program nie działa prawidłowo

0

Witam, mam program który ma wyświetlać z pliku csv dane(id, imie, nazwisko). Program kompiluje się, ale nie działa jak powinien, pokazuje to co na screenie, i nie zatrzymuje się. Id ma być uporządkowane. Może ktoś z tym pomóc

zrzut.png

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <iterator>
#include <map>

using namespace std;

int main()
{
    string id;
    string imie;
    string nazwisko;

    map<int,string>::iterator it;
    map<int,string>mapa;

    fstream plik;

    plik.open("plik.csv",ios::in);
    if(plik.good()==true)
    {
        while(!plik.eof())
        {
            getline(plik,id,';');
            getline(plik,imie,';');
            getline(plik,nazwisko,';');
            plik.seekg(1, ios_base::cur);

            int numer=atoi(id.c_str());
            mapa.insert(pair<int,string>(numer,imie+ ' ' +nazwisko));

            for(it=mapa.begin(); it != mapa.end(); ++it)
            {
                cout<<'\t'<<it->first<<'\t'<<it->second<<endl;
            }
        }
        plik.close();
    }

    system("PAUSE");
    return 0;
}

0
getline(plik,nazwisko,';');

Pewnie powinno być

getline(plik,nazwisko);

Patrząc po objawach nazwisko to po prostu nazwisko\n{id}, bo \n każesz nie traktować jako separatora.

Swoją drogą:

  1. CSV tradycyjnie rozumiane jest jako comma separated values
  2. Pętlę koniecznie zmodernizuj, ranged for jest w C++ od ± dekady
  3. Wczytywanie też można by zalgorytmizować (<algorithm>)
  4. To C++, co jest złego w std::stoi? atoi nie potrafi nawet poprawnie zasygnalizować błędu.

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