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

problemy z getline

Object Storage Arubacloud
0 głosów
776 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,650 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ź 513 wizyt
0 głosów
1 odpowiedź 1,895 wizyt
pytanie zadane 20 października 2015 w C i C++ przez spvce Początkujący (260 p.)
0 głosów
1 odpowiedź 523 wizyt
pytanie zadane 11 czerwca 2015 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)

92,537 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 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!

...