Funkcje - pierwsze starcie - zadanie 1
Ostatnio zmodyfikowano 2016-04-03 21:58
johnywoo Temat założony przez niniejszego użytkownika |
Funkcje - pierwsze starcie - zadanie 1 » 2016-04-03 20:03:26 Witajcie, program ma zrobić dokładnie to co jest w opisie Napisz funkcję, która będzie wczytywała liczby ze standardowego wejścia i zwracała wczytaną wartość. Funkcja ma zagwarantować, że zwracana liczba zawsze jest poprawna. Oznacza to, że funkcja będzie musiała pytać użytkownika o wprowadzenie liczby dopóki nie poda poprawnej. Więc udało mi się ograniczyć działanie do liczb całkowitych (bez liter jak i zmiennoprzecinkowych), niestety nie do końca program działa jak chcę, prawodopodobnie pętle są źle napisane. Proszę o pomoc, niedawno zacząłem ten kurs. Dziękuje. #include <iostream> using namespace std;
int wczytajLiczbe() { float sprawdzenie; int calkowita; do { cin >> sprawdzenie; calkowita = int( sprawdzenie ); do { cin.clear(); cin.sync(); cout << "to nie liczba! : "; } while( !( cin >> sprawdzenie ) ); } while( sprawdzenie - calkowita != 0 ); return sprawdzenie; }
int main() { cout << "Podaj liczbe: "; int liczba = wczytajLiczbe(); cout << "Podales liczbe: " << liczba << endl; return 0; }
|
|
carlosmay |
» 2016-04-03 20:18:35 Do tego zadania wystarczy skorzystać ze stanu strumienia po pobraniu wartości od użytkownika (bez rzutowania na całkowity). int zmienna; while( !( std::cin >> zmienna ) ) { std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); } std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
std::cout << zmienna << std::endl;
|
|
johnywoo Temat założony przez niniejszego użytkownika |
» 2016-04-03 20:42:34 pierwszy raz się spotykam z numeric_limits i streamsize. czyli po kolei: 1.deklaruje zmienna int 2. sprawdzamy w petli while czy strumien jest wiekszy od zmiennej juz wczytanej. 3. oczyszczamy go 4. ignorujemy wszystkie kody ascii
pytanie teraz jakiej biblioteki mam użyć ? #include <limits> ??
PS. po wprowadzeniu liczby rzeczywistej wyskakuje mi wartosc 4757824 (wartosc maksymalna dla int ?). Ps.2 trzeba dodać return zmienna przed końcem programu by wartość została zczytana, jednak nadal jest zaokrąglana do całkowitych ze zmiennoprzecinkowych - czy takie było założenie tego zadania?
|
|
carlosmay |
» 2016-04-03 21:43:46 PS. po wprowadzeniu liczby rzeczywistej wyskakuje mi wartosc 4757824 |
Jaką liczbę wprowadzasz? (jeśli używasz zmiennej całkowitej to taką przechowuje). trzeba dodać return zmienna przed końcem programu by wartość została zczytana, |
return na końcu programu to info dla systemu o stanie zakończonego programu. jednak nadal jest zaokrąglana do całkowitych ze zmiennoprzecinkowych |
Wczytując liczbę rzeczywistą, do zmiennej całkowitoliczbowej, wczytuje się część całkowita. Część ułamkowa już nie (tego się pozbywamy). - czy takie było założenie tego zadania? |
Taka jest treść. Funkcja zwraca int sprawdzamy w petli while czy strumien jest wiekszy od zmiennej juz wczytanej. |
Nie rozumiem pytania. W komentarzu jest opis działania. pierwszy raz się spotykam z numeric_limits i streamsize. |
Jest w tym temacie. Obsługa strumienia wejściowego |
|
johnywoo Temat założony przez niniejszego użytkownika |
» 2016-04-03 21:58:09 Po restarcie code::blocks program skompilowal sie prawidlowo. Dziekuje za pomoc. |
|
« 1 » |