Yaoo Temat założony przez niniejszego użytkownika |
Problem z zadaniem domowym z rozdziału o zmiennych tekstowych. » 2015-06-11 21:50:50 #include <iostream> #include <string> using namespace std;
void wczytajOsobe( string imie, string nazwisko, int wiek ) { cout << "Podaj imie: "; do { cin.sync(); cin.clear(); cin >> imie; cin.fail(); } while( cin.fail() ); cout << "Podaj nazwisko: "; do { cin.sync(); cin.clear(); cin >> nazwisko; cin.fail(); } while( cin.fail() ); cout << "Podaj wiek: "; do { cin.sync(); cin.clear(); cin >> wiek; cin.fail(); } while( cin.fail() ); }
void wypiszOsobe( string imie, string nazwisko, int wiek ) { cout << "Twoje imie to: " << imie << "." << endl; cout << "Twoje nazwisko to: " << nazwisko << "." << endl; cout << "Twoj wiek to: " << 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 ] ); for( int i = 0; i < 2; i++ ) wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); return 0; } Problem się pojawia, gdy próbuję wpisać złe dane (np. jako imię podaję liczbę). Pętla wówczas nie działa i złe dane zostają przyjęte. Potem jednak, gdy przychodzi do wypisania zmiennych na ekran, pojawia się puste miejsce, taka spacja. Proszę o pomoc :/ |
|
Monika90 |
» 2015-06-11 22:29:55 | Problem się pojawia, gdy próbuję wpisać złe dane (np. jako imię podaję liczbę). Pętla wówczas nie działa i złe dane zostają przyjęte |
Bo imie to string, do stringa można wczytać dowolny ciąg znaków, więc liczbę, czyli ciąg cyfr, też. | Potem jednak, gdy przychodzi do wypisania zmiennych na ekran, pojawia się puste miejsce, taka spacja. |
Parametry funkcji wczytajOsobe powinny być referencjami. |
|
Yaoo Temat założony przez niniejszego użytkownika |
» 2015-06-11 23:11:32 Podaj imie: Jan Podaj nazwisko: Kowalski Podaj wiek: 30 Podaj imie: Jan2 Podaj nazwisko: Kowalski2 Podaj wiek: 31 Twoje imie to: Kowalski. Twoje nazwisko to: . Twoj wiek to: 30. Twoje imie to: Kowalski2. Twoje nazwisko to: . Twoj wiek to: 31.
Process returned 0 (0x0) execution time : 19.484 s Press any key to continue. Nie rozumiem tego, co tu jest źle, że mi się pojawia taki log jak powyżej? Kod źródłowy to: #include <iostream> #include <string> using namespace std;
void wczytajOsobe( string & imie, string & nazwisko, int & wiek ) { cout << "Podaj imie: "; cin >> imie; cout << "Podaj nazwisko: "; cin >> imie; cout << "Podaj wiek: "; do { cin.clear(); cin >> wiek; } while( cin.fail() ); }
void wypiszOsobe( string & imie, string & nazwisko, int & wiek ) { cout << "Twoje imie to: " << imie << "." << endl; cout << "Twoje nazwisko to: " << nazwisko << "." << endl; cout << "Twoj wiek to: " << 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 ] ); for( int i = 0; i < 2; i++ ) wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); return 0; } |
|
BadBullPL |
» 2015-06-12 05:36:31 Dwa razy wczytujesz do struminia zminną imie |
|
Szymon2727 |
» 2015-06-13 20:59:42 bool czyDobrze; do { std::cout << "Podaj wiek"; std::cin >> wiek; czyDobrze = std::cin.good(); std::cin.clear(); std::cin.sync(); } while( czyDobrze == false );
Pętla powinna działać i na wyrazach. Sam miałem taki problem, a tutaj wystarczy odpowiednio dać metody clear i sync, a jako warunek nie używać bezpośrednio std::cin.fail/good tylko przypisać jakiejś zmiennej tą wartość i wykonać porównanie na niej. |
|
JMII89 |
» 2015-06-14 22:55:04 Poco przypisywać ? Przecież to działa normalnie : do { std::cout << "Podaj wiek : "; std::cin.clear(); std::cin.sync(); std::cin >> wiek; } while( !std::cin.good() );
|
|
Yaoo Temat założony przez niniejszego użytkownika |
» 2015-06-17 17:59:24 Dzięki za pomoc, problem rozwiązany! :) |
|
| « 1 » |