• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c++ getline kompilator error

Object Storage Arubacloud
0 głosów
274 wizyt
pytanie zadane 5 stycznia 2019 w C i C++ przez Marcin Rutkowski Nowicjusz (140 p.)

Cześć, mam problem z funkcją getline() w moim programie. Kompilator w ogóle nie chce tego kodu przepuścić. Starałem się znaleźć rozwiązanie, ale po prawie 2 godzinach mam dosyć. Pomożecie?
 

void show_all()
{
    string i, n, s, p;
    int d, m, r, nr;
    int linia;
    int nr_linii=1;

    fstream plik;
    plik.open("baza.txt", ios::in);

    if (plik.good()==false)
    {
        cout<<"NIE MOZNA ZNALEZC PLIKU"<<endl;
        exit(0);
    }

    while (getline(plik, linia))
    {
       switch (nr_linii)
       {
           case 1: nr=linia; break;
           case 2: i=linia; break;
           case 3: n=linia; break;
           case 4: s=linia; break;
           case 5: d=atoi(linia.c_str()); break;
           case 6: m=atoi(linia.c_str()); break;
           case 7: r=atoi(linia.c_str()); break;
           case 8: p=linia; break;
       }
        Pracownik nr_2;
        nr_2.import_number(nr);
        nr_2.import_worker(i, n, s, p, d, m, r);
        nr_2.show_worker();
        nr_linii++;
    }
    plik.close();
}

Funkcja z kodu ma mi po prostu wyświetlić ładnie wszystkie dane

1
komentarz 5 stycznia 2019 przez niezalogowany
Jaki error? Podaj jego pełną treść. Wrzuć cały kod.
komentarz 5 stycznia 2019 przez Marcin Rutkowski Nowicjusz (140 p.)

Mam projekt w kilku plikach i błąd występuje tylko tutaj.

Cały plik z funkcjami jest tutaj:
 

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

using namespace std;

void show_all()
{
    string i, n, s, p;
    int d, m, r, nr;
    int linia;
    int nr_linii=1;

    fstream plik;
    plik.open("baza.txt", ios::in);

    if (plik.good()==false)
    {
        cout<<"NIE MOZNA ZNALEZC PLIKU"<<endl;
        exit(0);
    }

    while (getline(plik, linia))
    {
       switch (nr_linii)
       {
           case 1: nr=linia; break;
           case 2: i=linia; break;
           case 3: n=linia; break;
           case 4: s=linia; break;
           case 5: d=atoi(linia.c_str()); break;
           case 6: m=atoi(linia.c_str()); break;
           case 7: r=atoi(linia.c_str()); break;
           case 8: p=linia; break;
       }
        Pracownik nr_2;
        nr_2.import_number(nr);
        nr_2.import_worker(i, n, s, p, d, m, r);
        nr_2.show_worker();
        nr_linii++;
    }
    plik.close();
}

Natomiast obiekt tu (wstawiam już oba pliki H i CPP)
 

#include <iostream>

using namespace std;

class Pracownik
{
    //dane pracownika
    string imie;
    string nazwisko;
    string specjalizacja;
    string pesel;
    int dzien, miesiac, rok;
    int numer_pracownika;

    public:
    //metody
    void add_worker();
    void add_number(int i);
    void show_worker();
    void save_worker();
    void import_number(int nr);
    void import_worker(string i, string n, string s, string p, int d, int m, int r);
};
#include <iostream>
#include <fstream>
#include "pracownik.h"

using namespace std;

void Pracownik::add_worker()
{
    cout<<"Dodawanie pracownika do bazy"<<endl;
    cout<<"Podaj imie: "<<endl;
    cin>>imie;
    cout<<"Podaj nazwisko: "<<endl;
    cin>>nazwisko;
    cout<<"Podaj specializacje: "<<endl;
    cin>>specjalizacja;

    cout<<"Podaj date urodzenia:  (liczbowo)"<<endl;
    cout<<"Dzien: ";
    cin>>dzien;
    cout<<"Miesiac: ";
    cin>>miesiac;
    cout<<"Rok: ";
    cin>>rok;

    cout<<"Podaj pesel: "<<endl;
    cin>>pesel;
};

void Pracownik::add_number (int i)
{
    numer_pracownika=i;
}

void Pracownik::show_worker ()
{
    cout<<"DANE PRACOWNIKA: "<<endl<<endl;
    cout<<"numer pracownika: "<<numer_pracownika<<endl;
    cout<<"imie: "<<imie<<endl;
    cout<<"nazwisko: "<<nazwisko<<endl;
    cout<<"specializacja: "<<specjalizacja<<endl;
    cout<<"data urodzenia: "<<dzien<<"."<<miesiac<<"."<<rok<<endl;
    cout<<"pesel: "<<pesel<<endl<<endl;
}

void Pracownik::save_worker ()
{
    fstream plik;
    plik.open("baza.txt",ios::out | ios::app);
    plik<<numer_pracownika<<endl;
    plik<<imie<<endl;
    plik<<nazwisko<<endl;
    plik<<specjalizacja<<endl;
    plik<<dzien<<endl;
    plik<<miesiac<<endl;
    plik<<rok<<endl;
    plik.close();
}

void Pracownik::import_number(int nr)
{
    numer_pracownika=nr;
}

void Pracownik::import_worker(string i, string n, string s, string p, int d, int m, int r)
{
    imie=i;
    nazwisko=n;
    specjalizacja=s;
    dzien=d;
    miesiac=m;
    rok=r;
    pesel=p;
}

 

1 odpowiedź

+1 głos
odpowiedź 5 stycznia 2019 przez niezalogowany

image

Funkcja getline jako drugi parametr może mieć std::string ([link1], [link2]).

komentarz 5 stycznia 2019 przez Marcin Rutkowski Nowicjusz (140 p.)
Nie rozumiem. Czy mam zmienić zmienną "string linia" na "std::string linia"?
komentarz 5 stycznia 2019 przez niezalogowany
Zamień "int linia" na "string linia" .
komentarz 5 stycznia 2019 przez Marcin Rutkowski Nowicjusz (140 p.)
O jejku, dziękuję. Ale fopa, nie zauważyłem tego

Podobne pytania

0 głosów
2 odpowiedzi 1,691 wizyt
pytanie zadane 10 kwietnia 2019 w C i C++ przez cyrus33 Użytkownik (680 p.)
0 głosów
1 odpowiedź 909 wizyt
0 głosów
0 odpowiedzi 117 wizyt
pytanie zadane 15 marca 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)

92,552 zapytań

141,399 odpowiedzi

319,534 komentarzy

61,938 pasjonatów

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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...