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

[rozdział 26] zadanie 2.

Ostatnio zmodyfikowano 2015-12-23 22:24
Autor Wiadomość
Dexterowy
Temat założony przez niniejszego użytkownika
[rozdział 26] zadanie 2.
» 2015-12-23 20:23:52
C/C++
#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

void wczytajOsobe( string & tabImie, string & tabNazw, int & tabWiek )
{
    bool check = false;
    static int ilosc = 0;
    system( "cls" );
    ilosc++;
    cout << "Osoba nr. " << ilosc << endl;
    cout << "Podaj imie: ";
    getline( cin, tabImie );
    cout << endl << "Podaj nazwisko: ";
    getline( cin, tabNazw );
    do {
        cout << endl << "Podaj wiek: ";
        if( check )
             cin.clear();
       
        cin.sync();
        cin >> tabWiek;
    } while( !cin.good() );
   
}
void wypiszOsobe( string & tabImie, string & tabNazw, int & tabWiek )
{
    cout << "Imie: " << tabImie << endl;
    cout << "Nazwisko: " << tabNazw << endl;
    cout << "Wiek: " << tabWiek << endl << 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 ] );
   
    for( int i = 0; i < 2; i++ )
         wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] );
   
    return 0;
}

Siemanko.
mam następujący problem:
Po kompilacji pierwsza osoba jest wczytywana normalnie ale przy drugiej pomija wpisanie imienia. Prosze o pomoc i wyjasnienie.
P-142278
wojtu111
Hej
» 2015-12-23 20:54:14
Tutaj masz rozwiązanie swojego problemu: Lekcja 9 Obsługa strumienia wejściowego w podrozdziale Czyszczenie zawartości strumienia wejściowego. Po prostu w funkcji która wczytuje przed pierwszym wczytaniem dodaj clear i sync.
Powinno bez problemów działać :)

Pozdrawiam.
P-142279
carlosmay
» 2015-12-23 21:13:15
C/C++
cin >> tabWiek;
cin.get(); // wystarczy dodać aby pozbyć się zalegajacego znaku '\n', ktory getline pobiera i konczy wczytywanie
 
 albo rozwiązanie kolegi @wojtu111.

C/C++
bool check = false;
 
 a ta zmienna ??? Jej istnienie nie ma sensu.
Ja pozbyłbym się tej zmiennej i wczytywanie wieku rozwiązał tak
C/C++
while( !( cin >> tabWiek ) ) {
    cin.clear();
    cin.ignore( numeric_limits < streamsize >::max(), '\n' );
    cout << "Podaj ponownie: ";
}
P-142280
Dexterowy
Temat założony przez niniejszego użytkownika
Dzięki!
» 2015-12-23 22:17:44
Dzięki wielkie za pomoc. Zmiennej zapomniałem usunąć, bo próbowałem coś wykombinować. Jest gdzieś tutaj opisana funkcja
cin.ignore()
?
P-142289
carlosmay
» 2015-12-23 22:24:40
W linku kolegi @wojtu111
P-142290
« 1 »
  Strona 1 z 1