Wczytanie znaku, wymuszając by był cyfrą.
Ostatnio zmodyfikowano 2016-12-15 15:15
qloda Temat założony przez niniejszego użytkownika |
Wczytanie znaku, wymuszając by był cyfrą. » 2016-12-15 13:15:29 Cześć, Próbuje napisać program, który wczytuje znak będący symbolem końca ciągu, wymuszając, by był on cyfrą. Oto kod mojego programu: #include <iostream> #include <cstdlib>
using namespace std;
int main() { int znak; do { cout << "Podaj znak: "; cin >> znak; if( znak <= 0 && znak > 10 ) cout << znak; else cout << "Wprowadz cyfre."; } while( znak != 10 && znak <= 0 ); cout << "Wprowadziles: " << znak << endl; return 0; }
Jak wpiszę "1" to program uwzględnia również instrukcję zawartą w "else". Co źle zrobiłem? Z góry dzięki za pomoc. |
|
mateczek |
» 2016-12-15 13:21:05 if( znak <= 0 && znak > 10 )
|
|
qloda Temat założony przez niniejszego użytkownika |
» 2016-12-15 13:27:48 Rzeczywiście. Już poprawiłem, lecz po zmianie nadal program uwzględnia instrukcję zapisaną w "else". I pojawił się drugi błąd, a mianowicie po wpisaniu np. litery "a" program nie pozwala mi wpisać ponownie znaku. |
|
mateczek |
» 2016-12-15 13:43:31 //o coś takiego chodziło ?? #include <iostream> #include<limits>
using namespace std;
int main() { int znak; while( !( cin >> znak ) ||( znak < 0 ) ||( znak > 10 ) ) { cout << "bledny znak powtorz"; cin.clear(); cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); } cout << "Wprowadziles: " << znak << endl; return 0; }
|
|
qloda Temat założony przez niniejszego użytkownika |
» 2016-12-15 13:50:54 Tak dzięki. Możesz mi tylko powiedzieć poco jest ta instrukcja? cin.ignore( numeric_limits < streamsize >::max()
|
|
mateczek |
» 2016-12-15 14:02:50 cin.ignore( numeric_limits < streamsize >::max()
zmienną "znak" masz zadeklarowaną jako typ "int". To sprawi że gdy z klawiatury wpiszesz powiedzmy "10" to są 2 znaki a i tak wczytanie liczby się się powiedzie. Natomiast gdy wpiszesz literkę powiedzmy "a" to nie nastąpi automatyczna konwersja na typ int i strumień ustawi się w błąd. W takim wypadku wymagane jest wyczyszczenie flagi błędu (metoda clear), oraz opróżnienie strumienia z błędnych danych(metoda ignore). // co innego taki kod #include <iostream> using namespace std;
int main() { char znak; do { cout << "podaj znak" << endl; cin >> znak; } while(( znak < '0' ) ||( znak > '9' ) ); cout << "Wprowadziles: " << znak << endl; int liczba = znak; cout << liczba << endl; return 0; }
znaki na liczby konwertowane są zgodnie z tablicą ASCII i tak znakowi char -> int '0' -> 48 '1' -> 49 więc trzeba wiedzieć że znak= '0' to nie to samo co liczba =0; |
|
carlosmay |
» 2016-12-15 15:15:19 Próbuje napisać program, który wczytuje znak będący symbolem końca ciągu, wymuszając, by był on cyfrą. |
Możesz bardziej rozwinąć tą myśl? |
|
« 1 » |