String, wczytywanie tekstu za pomocą funkcji getline
Ostatnio zmodyfikowano 2015-11-08 14:10
Zdziszek Temat założony przez niniejszego użytkownika |
String, wczytywanie tekstu za pomocą funkcji getline » 2015-11-07 22:51:08 Witam, mam problem z następującym kodem. #include<stdio.h> #include<iostream> #include<cstdio> #include<string> using namespace std;
int main() { string imie, nazwisko; int wiek; for( int i = 0; i < 2; i++ ) { cout << "Podaj imie: "; getline( cin, imie ); cout << "Podaj nazwisko: "; getline( cin, nazwisko ); cout << "Podaj wiek: "; cin >> wiek; cout << "Imie to: " << imie.c_str() << endl; cout << "Nazwisko to: " << nazwisko.c_str() << endl; cout << "Wiek to: " << wiek << endl; } system( "pause" ); return 0; }
Przy funkcji getline program omija wczytywanie imienia w drugim powtórzeniu pętli. Podaj imie: xxx Podaj nazwisko: xxx Podaj wiek: 20 Imie to: xxx Nazwisko to: xxx Wiek to: 20 Podaj imie: Podaj nazwisko:
Tak wygląda log przy drugim powtórzeniu, gdzie tu jest błąd albo co pominąłem? |
|
michal11 |
» 2015-11-08 01:28:25 Mieszasz getline z operatorem>> dla cin. Generalnie te dwie funkcje działają trochę inaczej, po wczytaniu czegokolwiek operatorem w buforze zostaje jeszcze znak entera (getline go nie pozostawia) którym potwierdzasz zakończenie wpisywania dlatego wywołanie getline wczytuje ten pozostawiony znak entera. Rozwiązanie to albo używanie tylko getline albo flushowanie strumienia (czyszczenie bufora) przez getlinem. |
|
j23 |
» 2015-11-08 10:22:02 ... cout << "Podaj wiek: "; cin >> wiek;
cin.ignore( numeric_limits < streamsize >::max(), '\n' ); |
|
Zdziszek Temat założony przez niniejszego użytkownika |
» 2015-11-08 12:51:35 Dzięki za pomoc, kod cin.ignore( numeric_limits < streamsize >::max(), '\n' ); rozwiązał problem, a powiedz mi Michał flushowanie bufora, czyli cout << flush; tak?Bo próbowałem na kilka sposobów, ale nic to nie zmieniło, zauważyłem właśnie, że problem pojawił się przy zmieszaniu getline i cin, ale, gdy miałem typ string i int to nie wiedziałem jak zrobić to inaczej. |
|
michal11 |
» 2015-11-08 12:59:54 std::cin.clear(); std::cin.sync();
Wystarczyło poszukać w kursie. |
|
Zdziszek Temat założony przez niniejszego użytkownika |
» 2015-11-08 13:08:35 To nie działa, tego już próbowałem zanim założyłem tutaj temat;p |
|
carlosmay |
» 2015-11-08 13:28:21 Musisz mieć świadomość co zostaje w strumieniu po wczytywaniu. Najprościej po użyciu std::cin użyć std::cin.get(); Pobiera zalegający znak nowego wiersza po wprowadzeniu liczby ( w tym przypadku ). |
|
Zdziszek Temat założony przez niniejszego użytkownika |
» 2015-11-08 13:34:30 Działa, dzięki=] |
|
« 1 » 2 |