Ĺadny brzuch
unsigned double liczba;
Jak do takiej zmiennej wczytać liczbę z konsoli za pomocą strumienia cin ?
jeśli robię to w ten sposób:
cin >> liczba;
i podam liczbę ujemną to dziwne rzeczy się dzieją. Jak to zrobić poprawnie (czyli tak żeby podanie liczby ujemnej powodowało ponowną prośbę o podanie danych. I tak do skutku, aż w końcu użytkownik poda liczbę rzeczywistą dodatnią) ?
Użytkownik mariachi edytował ten post 23 marzec 2009, 11:02
unsigned double liczba;
Jak do takiej zmiennej wczytać liczbę z konsoli za pomocą strumienia cin ?
jeśli robię to w ten sposób:
cin >> liczba;
i podam liczbę ujemną to dziwne rzeczy się dzieją. Jak to zrobić poprawnie (czyli tak żeby podanie liczby ujemnej powodowało ponowną prośbę o podanie danych. I tak do skutku, aż w końcu użytkownik poda liczbę rzeczywistą dodatnią) ?
unsigned double liczba;
Oznacza, że liczba jest liczbą zmiennoprzecinkową o podwójnej precyzji bez ZNAKU, czyli nie może być ujemna.
Usuń unsigned a potem napisz kod, który sprawdzi czy liczba jest dodatnia
double liczba; do { cout << "Podaj liczbę: "; cin >> liczba; } while(liczba < 0)
Użytkownik Aprogle edytował ten post 23 marzec 2009, 18:27
nie znam takiego typu jak "unsigned double" (kolejny wymysl Borlanda?)
double liczba = -1; while( liczba < 0 ) cin >> liczba;
Usuń unsigned a potem napisz kod, który sprawdzi czy liczba jest dodatnia
Kiepskie rozwiązanie. Typ unsigned jest między innymi po to, że jeśli nie używamy znaku to możemy poszerzyć zakres wartości zmiennej. Twoje rozwiązanie z założenia ogranicza owo poszerzenie zakresu.
Sugerowałbym raczej taką procedurę działania:
1. Ignorujemy białe znaki
2. Sprawdzamy czy znak jest '-' albo cyfrą (jeśli był '-' to ustawiamy flagę błędu strumienia)
3. Wczytujemy liczbę jako tekst
4. Przeprowadzamy konwersję na typ double.
Wszystkie te kroki zawieramy w przeładowanym operatorze double operator>>(ostream strum, unsigned double liczba) i oto mamy wczytywanie liczb zmiennoprzecinkowych bez znaku. Oczywiście takie działanie ma sens jeśli masz typ unsigned double. Oficjalnie takowy nie istnieje ;]
@oggylwiatko
Gdyby taki typ istniał w C++, to operator na pewno byłby przeładowany i nie byłoby problemu ;)
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Jak do takiej zmiennej wczytać liczbę z konsoli za pomocą strumienia cin ?
jeśli robię to w ten sposób:
cin >> liczba;
i podam liczbę ujemną to dziwne rzeczy się dzieją. Jak to zrobić poprawnie (czyli tak żeby podanie liczby ujemnej powodowało ponowną prośbę o podanie danych. I tak do skutku, aż w końcu użytkownik poda liczbę rzeczywistą dodatnią) ?
Użytkownik mariachi edytował ten post 23 marzec 2009, 11:02
unsigned double liczba;
Jak do takiej zmiennej wczytać liczbę z konsoli za pomocą strumienia cin ?
jeśli robię to w ten sposób:
cin >> liczba;
i podam liczbę ujemną to dziwne rzeczy się dzieją. Jak to zrobić poprawnie (czyli tak żeby podanie liczby ujemnej powodowało ponowną prośbę o podanie danych. I tak do skutku, aż w końcu użytkownik poda liczbę rzeczywistą dodatnią) ?
unsigned double liczba;
Oznacza, że liczba jest liczbą zmiennoprzecinkową o podwójnej precyzji bez ZNAKU, czyli nie może być ujemna.
Usuń unsigned a potem napisz kod, który sprawdzi czy liczba jest dodatnia
double liczba; do { cout << "Podaj liczbę: "; cin >> liczba; } while(liczba < 0)
Użytkownik Aprogle edytował ten post 23 marzec 2009, 18:27
nie znam takiego typu jak "unsigned double" (kolejny wymysl Borlanda?)
double liczba = -1; while( liczba < 0 ) cin >> liczba;
Usuń unsigned a potem napisz kod, który sprawdzi czy liczba jest dodatnia
Kiepskie rozwiązanie. Typ unsigned jest między innymi po to, że jeśli nie używamy znaku to możemy poszerzyć zakres wartości zmiennej. Twoje rozwiązanie z założenia ogranicza owo poszerzenie zakresu.
Sugerowałbym raczej taką procedurę działania:
1. Ignorujemy białe znaki
2. Sprawdzamy czy znak jest '-' albo cyfrą (jeśli był '-' to ustawiamy flagę błędu strumienia)
3. Wczytujemy liczbę jako tekst
4. Przeprowadzamy konwersję na typ double.
Wszystkie te kroki zawieramy w przeładowanym operatorze double operator>>(ostream strum, unsigned double liczba) i oto mamy wczytywanie liczb zmiennoprzecinkowych bez znaku. Oczywiście takie działanie ma sens jeśli masz typ unsigned double. Oficjalnie takowy nie istnieje ;]
@oggylwiatko
Gdyby taki typ istniał w C++, to operator na pewno byłby przeładowany i nie byłoby problemu ;)