Lekcja 26 wczytywanie danych
Ostatnio zmodyfikowano 2014-03-07 23:14
Kluczyk Temat założony przez niniejszego użytkownika |
Lekcja 26 wczytywanie danych » 2014-03-05 21:13:09 Próbuję wykonać pracę domową z lekcji 26. Treść zadania: Napisz prosty program, który wczyta imię, nazwisko i wiek dwóch osób. Funkcja główna programu ma mieć następującą postać: (poniżej umieściłem cały kod swojego programu, w którym funkcja main() nie została zmieniona). Wydawało mi się, że już wszystko działa, lecz program przy wczytywaniu danych drugiej osoby, pomija imię. Proszę o jakieś wskazówki/wyjaśnienia. Kod: #include <cstdlib> #include <iostream>
using namespace std;
void wczytajOsobe( string & imie, string & nazwisko, int & wiek, int i ) { cout << "Podaj dane " << i + 1 << " osoby." << endl; cout << "Podaj imie: "; getline( cin, imie ); cin.clear(); cin.sync(); cout << "Podaj nazwisko: "; getline( cin, nazwisko ); cin.clear(); cin.sync(); do { cin.clear(); cin.sync(); cout << "Podaj wiek: "; cin >> wiek; } while( cin.fail() == 1 ); }
void wypiszOsobe( string imie, string nazwisko, int wiek, int i ) { cout << endl << "Dane " << i + 1 << " osoby." << endl; cout << "Imie: " << imie << endl; cout << "Nazwiko: " << nazwisko << endl; cout << "Wiek: " << wiek << endl; }
int main() { string imie[ 2 ]; string nazwisko[ 2 ]; int wiek[ 2 ]; for( int i = 0; i < 2; i++ ) wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ], i ); for( int i = 0; i < 2; i++ ) wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ], i ); cout << endl; system( "PAUSE" ); return 0; }
|
|
leon_w |
» 2014-03-05 22:40:30 W buforze zostaje znak nowej lini, pozostałość po wczytywaniu funckją cin. Wyczyść bufor po cin i będzie grało. Możesz użyć do tego get. |
|
Kluczyk Temat założony przez niniejszego użytkownika |
» 2014-03-05 23:50:58 Albo robię coś źle, albo nie dokładnie zrozumiałem. Możesz proszę napisać linijkę i wskazać gdzie dokładnie ją wstawić?
|
|
leon_w |
» 2014-03-06 15:00:14 Wywołujesz funkcję wczytajosobe(), wszędzie ładnie czyścisz bufor i flagi błędów, ale nie po ostatnim wprowadzaniu ( wiek ). Wyczyść bufor (cin.sync()) albo po wprowadzeniu wieku, albo na początku, przed wprowadzeniem imienia. |
|
Kluczyk Temat założony przez niniejszego użytkownika |
» 2014-03-07 23:14:54 Faktycznie - działa, dziękuję za pomoc. Nie wiem czemu to przeoczyłem. |
|
« 1 » |