Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rozdział 26 zadanie 2

Ostatnio zmodyfikowano 2016-01-28 00:29
Autor Wiadomość
wirusomaniak
Temat założony przez niniejszego użytkownika
Rozdział 26 zadanie 2
» 2016-01-27 22:11:14
Mam problem z tym programem gdy wczytuje pierwszą osobę jest ok lecz przy wczytywaniu drugiej pomija imię i nazwisko i przechodzi od razu do wczytywania wieku.


C/C++
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int wczytajOsobe( string & imieNazwisko, int & wiek )
{
    cout << "Wprowadz imie i nazwisko: ";
    getline( cin, imieNazwisko );
   
    do
    {
        cin.clear();
        cin.sync();
        cout << "Wprowadz wiek: ";
        cin >> wiek;
    } while( cin.fail() );
   
}
int wypiszOsobe( string imieNazwisko, int wiek )
{
    cout << "imie i nazwisko: " << imieNazwisko << "\nwiek: " << wiek << endl;
}
int main()
{
    std::string imieNazwisko[ 2 ];
    int wiek[ 2 ];
    for( int i = 0; i < 2; i++ )
         wczytajOsobe( imieNazwisko[ i ], wiek[ i ] );
   
    for( int i = 0; i < 2; i++ )
         wypiszOsobe( imieNazwisko[ i ], wiek[ i ] );
   
    return 0;
}
P-144087
carlosmay
» 2016-01-28 00:11:54
C/C++
do
{
    cin.clear();
    cin.sync();
    cout << "Wprowadz wiek: ";
    cin >> wiek; // wczytywanie std::cin pozostawia znak nowej linii, na który reaguje std::getline()
} while( cin.fail() );
przed std::getline() też oczyszczaj strumień lub pobierz znak nowej linii std::cin.get().
Lepszym rozwiązanie jest stosowanie
std::cin.ignore()
 niż
std::cin.sync()
.
P-144091
wirusomaniak
Temat założony przez niniejszego użytkownika
» 2016-01-28 00:29:44
Dziękuję bardzo sam raczej bym na to nie wpadł. Nie wiedziałem, że wywołanie cin pozostawia znak nowej linii.
Odnosząc się do podanych przez Ciebie możliwości rozwiązania mojego problemu raczej wybiorę pierwszy sposób ponieważ do zadań domowych chcę używać tylko i wyłącznie wiedzy z kursu.
P-144092
« 1 »
  Strona 1 z 1