[Rozdział 17] Zadanie 1
Ostatnio zmodyfikowano 2015-11-21 19:14
Matis28 Temat założony przez niniejszego użytkownika |
[Rozdział 17] Zadanie 1 » 2015-11-21 13:51:38 Cześć, właśnie próbuję rozwiązać zadanie 1 z rozdziału 17 jednak mam duży problem.Oto mój kod: #include "stdio.h" #include <iostream> using namespace std; int wczytajLiczbe() { int a; bool x; do { cin >> a; x = cin.good(); } while( x != 1 ); return a; }
int main() { cout << "Podaj liczbe: "; int liczba = wczytajLiczbe(); cout << "Podales liczbe: " << liczba << endl; system( "pause" ); return 0; }
chciałem aby w funkcji wczytajLiczbe() program pytał użytkownika tak długo aż poda właściwą wartość a on zamiast ponownie pytać użytkownika zacina się. |
|
Rashmistrz |
» 2015-11-21 14:48:22 } while( x != 1 ); U ciebie tą właściwą liczbą jest 1, a powinna być każda liczba całkowita. Obsługa strumienia wejściowegoW razie wpisania tekstu program się zacina, bo nie czyścisz bufora, a tekst tam zostaje i próbowany jest wczytanie go do zmiennej. Nie zapomnij o czyszczeniu flag. |
|
Matis28 Temat założony przez niniejszego użytkownika |
» 2015-11-21 18:14:43 ok zmodyfikowałem kod ale dalej nie działa teraz wyrzuca w kółko "podano nieprawidlowa wartosc!" #include "stdio.h" #include <iostream> using namespace std; int wczytajLiczbe() { int a; do { cin.clear(); cin.sync(); cin >> a; if( cin.good() != true ) { cout << "podano nieprawidlowa wartosc!" << endl; } } while( cin.good() != true ); return a; }
int main() { cout << "Podaj liczbe: "; int liczba = wczytajLiczbe(); cout << "Podales liczbe: " << liczba << endl; system( "pause" ); return 0; }
|
|
Monika90 |
» 2015-11-21 18:28:31 #include <iostream> #include <limits>
int main() { using namespace std; int liczba; cout << "Podaj liczbe: "; while( !( cin >> liczba ) ) { cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cout << "To nie liczba, podaj liczbe: "; } cout << "Podano " << liczba << endl; }
Czy to działa? |
|
Matis28 Temat założony przez niniejszego użytkownika |
» 2015-11-21 18:42:04 Twój kod działa :) Byłabyś w stanie wyjaśnić mi dlaczego mój nie? |
|
carlosmay |
» 2015-11-21 18:45:47 już nie czyści strumienia, do tego służy |
|
Matis28 Temat założony przez niniejszego użytkownika |
» 2015-11-21 18:58:37 Mam jeszcze jedno nurtujące mnie pytanie. Czy da się jakoś wyczyścić cały bufor od razu? Bo teraz program po wpisaniu ciągu liter zamiast liczby działa ale za każdy znak wyświetla się jedna linia "podano nieprawidlowa wartosc!" |
|
carlosmay |
» 2015-11-21 19:09:35 cin.ignore( numeric_limits < streamsize >::max(), '\n' ); Monika90 napisała kod czyszczący cały bufor, do znaku nowej linii. |
|
« 1 » 2 |