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

problemy z getline

0 głosów
574 wizyt
pytanie zadane 8 czerwca 2015 w C i C++ przez Kazuhiro Użytkownik (910 p.)

Witajcie. Właśnie uczę się C++ i postanowiłem trochę rozbudować przykład z książki, dotyczący struktur. Wszystko byłoby dobrze, ale po wykonaniu jednej pętli program zaczyna sę sypać. Getline "wstawia enter" i przez to nie mogę podać nazwiska. Przy pierwszym wykonaniu pętli wszystko jest ok.

#include <iostream>
#include<string>

using namespace std;

struct Klienci{
    string nazwisko;
    int wiek;
    float wzrost;
};

int main()
{
    string nazwisko;
    Klienci tablica[2];
    for (int i = 0; i<2; i++){
        cout << "Dane goscia nr " << i+1<<endl;
        cout<<" Nazwisko: ";
        getline(cin, tablica[i].nazwisko);
        cout << "Wiek: ";
        cin >> tablica[i].wiek;
        cout<<"Wzorst: ";
        cin >> tablica[i].wzrost;
    }
    cout << "LISTA GOSCI"<< endl << "------------------"<<endl;
    for (int i = 0; i<2; i++){
        cout<< tablica[i].nazwisko << endl;
        cout << "wiek: " << tablica[i].wiek << " | " << "wzrost: " << tablica[i].wzrost << endl << "-----" << endl;
    }
    return 0;
}

 

2 odpowiedzi

+2 głosów
odpowiedź 8 czerwca 2015 przez Dash Nałogowiec (29,680 p.)
wybrane 9 czerwca 2015 przez Kazuhiro
 
Najlepsza
Z tego co pamiętam(ale mogę się mylić), to getline zostawia w kolejce wejścia właśnie enter. Spróbuj po getline dać cin.get(), to powinno wyżej wymieniony enter usuwać.
komentarz 8 czerwca 2015 przez tarnasm Gaduła (3,030 p.)
cin.ignore z tego co pamiętam rozwiązywało problem enterów używanych do zatwierdzania getline i cin.

EDIT. cin.ignore potrzebuje odrebnej biblioteki.
komentarz 8 czerwca 2015 przez Kazuhiro Użytkownik (910 p.)
Nie pomogło. Poza tym przy pierwszej pętli wszystko jest ok. Przy drugiej od razu wyświetla mi dwa cout'y bez możliwości podania wartości zmiennej nazwisko.
komentarz 8 czerwca 2015 przez Kazuhiro Użytkownik (910 p.)
Nie wiem, czy zrozumieliście o co mi chodzi, więc zrobiłem screena

http://i69.fastpic.ru/big/2015/0608/a5/92671f425d9715626a6bbfd97440f3a5.png

PS. cin.ignore też nie załatwiło probemu.
komentarz 8 czerwca 2015 przez wrzaskun Początkujący (280 p.)
Bo to jakoś jest tak że enter czy też któryś ze znaków /r lub /n zostaje z przejścia do następnej lini a getline bierze całość linii z tekstu terminala - tak myśle.

Zatem wywal getline i daj cin jak w innych przykładach albo poszukaj czegoś do wyczyszczenia danych wejściowych po wczytaniu pierwszego wzrostu.

możesz dać cin.get(); na końcu pętli
komentarz 8 czerwca 2015 przez Kazuhiro Użytkownik (910 p.)
Pomogło dodanie cin.get() na końcu pętli
0 głosów
odpowiedź 8 czerwca 2015 przez Radfler VIP (101,030 p.)

Spróbuj użyć funkcji cin.sync(); po getline :) Synchronizuje ona bufor: http://en.cppreference.com/w/cpp/io/basic_istream/sync

Podobne pytania

0 głosów
1 odpowiedź 336 wizyt
0 głosów
1 odpowiedź 1,552 wizyt
pytanie zadane 20 października 2015 w C i C++ przez spvce Początkujący (260 p.)
0 głosów
1 odpowiedź 434 wizyt
pytanie zadane 11 czerwca 2015 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)

89,693 zapytań

138,297 odpowiedzi

309,243 komentarzy

59,623 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...