Rozdział 17 - Zadanie domowe cz.1
Ostatnio zmodyfikowano 2017-05-14 23:02
Dw00L Temat założony przez niniejszego użytkownika |
Rozdział 17 - Zadanie domowe cz.1 » 2017-05-14 19:20:08 Witam, Mam pytanie odnosnie zadania domowego z 17 rozdzialu "Funkcje- pierwsze starcie". Zadanie brzmi nastepujaco: "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. " ------ Gdy uruchamiam kod (poniżej) komunikat "Podaj prawidlowa liczbe" powtarza sie w nieskonczonosc. Probuje ograniczyc loop do okreslonej liczby to nie dziala. Prosze o pomoc i objasnienie skad ten blad. #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int wczytajLiczbe() { int a, ile = 1; cin >> a; if( !cin >> a ) { do { cout << "Podaj prawidlowa liczbe!" << endl; cin >> a; ile--; } while( !cin >> a ); } return a; }
int main() { cout << "Podaj liczbe: " << endl; int liczba = wczytajLiczbe(); cout << "Podales liczbe: " << liczba << endl; return 0; }
Z gory dziekuje za pomoc i przepraszam za brak Polskich znakow. |
|
karambaHZP |
» 2017-05-14 19:43:20 |
|
Dw00L Temat założony przez niniejszego użytkownika |
» 2017-05-14 20:03:25 Dodalem dwie zmienne typu bool, jedna to stan a druga stan_0. Nie mniej jednak blad sie powtarza i nie wiem co z tym zrobic. #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int wczytajLiczbe() { bool stan, stan_0; int a, ile = 1; cin >> a; stan = cin.good(); stan_0 = cin.fail(); if( !( cin >> a ) ) { do { cout << "Podaj prawidlowa liczbe!" << endl; cin >> a; ile--; } while( !( cin >> a ) ); } return 0; }
int main() { cout << "Podaj liczbe: " << endl; int liczba = wczytajLiczbe(); cout << "Podales liczbe: " << liczba << endl; return 0; }
|
|
karambaHZP |
» 2017-05-14 20:08:23 Czyszczenie strumienia wejściowego std::cin.ignore edit: int wczytajLiczbe() { bool stan, stan_0; int a, ile = 1; cin >> a; stan = cin.good(); stan_0 = cin.fail(); if( !( cin >> a ) ) { do { cout << "Podaj prawidlowa liczbe!" << endl; cin >> a; ile--; } while( !( cin >> a ) ); } return 0; } | https://4programmers.net/C/FAQ/Zabezpieczenie_przed_wpisywaniem_liter |
|
Dw00L Temat założony przez niniejszego użytkownika |
» 2017-05-14 21:33:55 Dobra, niby smiga ale jak wpisze jakis nieprawidlowy typ wartosci (litera) to konsola pokazuje komunikat "Podaj prawidlowa liczbe". Niestety, po pojawieniu sie tej wartosci gdy wpisze wartosc prawidlowa (liczbe) i klikam enter konsola wyswietla puste pole. #include <iostream> #include <cstdlib> #include <ctime> #include <limits>
using namespace std;
int wczytajLiczbe() { int a; if( !( cin >> a ) ) do { cin.clear(); cin.sync(); cout << "podaj prawidlowy typ" << endl; cin.clear(); cin.sync(); cin >> a; } while( !( cin >> a ) ); return a; }
int main() { cout << "Podaj liczbe: " << endl; int liczba = wczytajLiczbe(); cout << "Podales liczbe: " << liczba << endl; return 0; }
|
|
karambaHZP |
» 2017-05-14 23:02:51 Wyświetla puste pole bo nadal oczekuje podania danych z klawiatury. Innymi słowy, w pętli podwójnie chcesz pobrać dane od użytkownika. |
|
« 1 » |