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

problemy z getline

VPS Starter Arubacloud
0 głosów
759 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ź 508 wizyt
0 głosów
1 odpowiedź 1,888 wizyt
pytanie zadane 20 października 2015 w C i C++ przez spvce Początkujący (260 p.)
0 głosów
1 odpowiedź 521 wizyt
pytanie zadane 11 czerwca 2015 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...