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

Wczytywanie tekstu

Ostatnio zmodyfikowano 2014-12-22 23:31
Autor Wiadomość
legionista
Temat założony przez niniejszego użytkownika
Wczytywanie tekstu
» 2014-12-22 21:37:34
Witam próbuje zrobić zadanie z lekcji 26, jednak pętla w przypadku źle podanego wieku nie działa
C/C++
#include<iostream>
#include<string>
void wczytajOsobe( std::string & imie, std::string & nazwisko, int & wiek )
{
    std::cout << "Podaj imie  osoby" << std::endl;
    std::cin >> imie;
   
    std::cout << "Podaj nazwisko  osoby" << std::endl;
    std::cin >> nazwisko;
   
    do {
        std::cout << "Podaj wiek   osoby" << std::endl;
        std::cin.sync();
        std::cin.clear();
        std::cin >> wiek;
       
       
    } while( std::cin.good() );
   
}
int main()
{
    std::string imie[ 2 ];
    std::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;
}
P-123248
wilkoo13
» 2014-12-22 21:44:20
Pętla się wykonuje gdy jest true, czyli w tedy gdy dobrze wprowadzisz. good zamień na fail lub przed warunkiem wstaw ! aby zanegować.
P-123249
Rashmistrz
» 2014-12-22 21:57:08
} while( std::cin.good() );

Pętla powinna się powtarzać gdy ktoś wpisze poprawną liczbę?
ymmm... chyba nie.
P-123252
legionista
Temat założony przez niniejszego użytkownika
» 2014-12-22 22:18:11
Po zmianie

} while( std::cin.fail() );

pętla wykonuje się bez przerwy przy podaniu błędnej wartosci wieku
P-123253
wilkoo13
» 2014-12-22 22:21:06
Zamień kolejnością sync oraz clear.
Zamieniłem i działa.
Ale jakby mi mógł wyjaśnić ktoś dlaczego kolejność ma znaczenie???
P-123254
legionista
Temat założony przez niniejszego użytkownika
» 2014-12-22 22:55:15
Dzięki wielkie, też chciałbym wiedzieć czemu miało to znaczenie.
P-123257
Monika90
» 2014-12-22 23:31:22
Jeżeli strumień jest w stanie fail to operacje wejścia/wyjścia nie są wykonywane. To znaczy wywołanie funkcji sync() zostanie przez strumień zignorowane. clear() przywraca stan good w którym operacje wykonywane są normalnie.
P-123258
« 1 »
  Strona 1 z 1