Lekcja 2.16
Ostatnio zmodyfikowano 2016-07-16 21:13
carlosmay |
» 2016-07-16 13:33:28 @Anonim47 Zrobiłem to jako nieskończoną pentle |
Teraz widać, że jest to nieskończona pętla. @CCbolt jak napisać program aby nie zliczał strzałów z poza zakresu liczb dozwolonych |
Czytaj przykład. jak zabezpieczyć program aby poprawnie wypisywał komunikat że litera to nie liczba. |
Dodać do pętli sprawdzanie zawartości bufora strumienia wejściowego (nagłówek <cctype> zawiera potrzebne funkcje) przed oczyszczeniem go. |
|
Szymon2727 |
» 2016-07-16 14:15:00 A nie lepiej to zrobić iostreamem? Tam dało się sprawdzić czy podano liczbę czy literę. |
|
CCbolt Temat założony przez niniejszego użytkownika |
» 2016-07-16 18:24:57 @Szymon2727 Na pierwszej stronie w kolejnym poście mam podany przykład problemu.
Podaj liczbe: a Litery to nie liczby Podaj liczbe: A Liczba jest niewlaciwa Liczba jest za mala Podaj liczbe: b Litery to nie liczby Podaj liczbe: b Liczba jest niewlaciwa Liczba jest za mala
Pewnie w rozwiązaniu @carlosmay ten problem nie wystąpi ale w moim jest, pewnie da się to naprawić ale teraz nie widzę rozwiązania. |
|
carlosmay |
» 2016-07-16 20:05:48 pewnie da się to naprawić ale teraz nie widzę rozwiązania. |
Rozwiązanie jest proste. Wykrywaj tylko czy prawidłowo przebiegło pobieranie danych od użytkownika. Rozpoznawanie nieprawidłowych danych nie ma większego sensu w tym przypadku. Jak będę miał chwilę to coś wyskrobię. Sugestia: std::cin.get() do pobrania znaku, który spowodował błąd. isalpha() funkcja sprawdzająca, czy dany znak to litera. Można też sprawdzić ręcznie kod pobranego znaku i porównać go z tabelą znaków ASCII. edit: Na podstawie fragmentu twojego kodu: #include <iostream> #include <limits> #include <locale> using namespace std;
int main() { int liczba; bool A; cout << "Podaj liczbe: "; cin >> liczba; A = cin.good(); if( A == false ) { do { cin.clear(); if( isalpha( cin.get() ) ) { cout << "Litery to nie liczby" << endl; } else { cout << "Podales cos jeszcze innego niz litery" << endl; } cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cout << "Podaj ponownie liczbe : "; cin >> liczba; A = cin.good(); } while( A == false ); } cout << "Liczba to " << liczba << endl; }
Tylko nie wiem czy warto tak kombinować. |
|
CCbolt Temat założony przez niniejszego użytkownika |
» 2016-07-16 21:13:16 OOO o to mi chodziło, dzięki. Wiesz im więcej kombinuję tym więcej zapamiętuję, szukam, przestawiam i widzę co i jak się zachowuje a to trochę daje przynajmniej w moim przypadku. Jakkolwiek ilekroć coś zrobię mam chęć zobaczyć jak program zachowuje się gdy nie postępuję wedłóg poleceń a gdy to zrobię ciśnie mnie aby to poprawić. |
|
1 « 2 » |