Nieznany błąd przy wymuszaniu liczby
Ostatnio zmodyfikowano 2014-05-08 18:44
dziubeQ Temat założony przez niniejszego użytkownika |
Nieznany błąd przy wymuszaniu liczby » 2014-05-07 20:49:53 Napisałem kod, który miał wczytywać liczbę z danego przedziału, wczytywał ją jako string (żeby nie wariowało, po wpisaniu znaku) wydawało się, że działał dobrze, jednak teraz coś się zepsuło, pierwszy błąd zauważyłem przy wpisaniu liczby 33 (wybór miał być od 1 do 10) wtedy program wyłączył się, wprowadzałem zmiany w kodzie i teraz wygląda tak: string opcja; cin >> opcja;
do { if( opcja == "1" ) { } else if( opcja == "2" ) { } else { cout << "zly przedział"; cin >> opcja; } } while( !( opcja >= "1" && opcja <= "9" ) );
}
w jaki sposób mogę wymusić wpisanie liczby 1-10 bez błędów przy wpisywaniu liczb z innego przedziału, lub znaków? |
|
Raptiler |
» 2014-05-07 20:59:39 Był już podobny temat, przejrzyj forum http://cpp0x.pl/forum/temat/?id=15526
Możesz wczytywać liczbę jako int, poprostu później sprawdzasz czy to nie znak poprzez metodę cin.good() |
|
libed |
» 2014-05-07 21:20:26 int range; bool invalid; do { invalid = false; std::cout << "Enter a number: "; std::cin >> range; if( !std::cin ||( range < 1 || range > 10 ) ) { std::cout << "Invalid input\n"; std::cin.clear(); std::cin.sync(); invalid = true; } } while( invalid );
std::cout << "Choosed option: " << range << "\n"; |
|
dziubeQ Temat założony przez niniejszego użytkownika |
» 2014-05-07 23:01:46 moja funkcja wygląda teraz tak: void sprawdzanie( int p, int k ) { cout << "\nWYB" << char( 0xe0 ) << "R: "; cin >> l; do { if( cin.good() ) { if( l >= p && l <= k ) break; else { cout << "\nPodaj liczb\251 z w\210a" << char( 0x98 ) << "ciwego przedzia\210u!\nWYB" << char( 0xe0 ) << "R: "; cin >> l; } } else { cout << "\nPodaj liczb\251!\nWYB" << char( 0xe0 ) << "R: "; cin.clear(); cin.sync(); cin >> l; } } while( cin.fail() ||( !( l >= p && l <= k ) ) ); } p - początek przedziału, k - koniec przedziału, dzięki l przepisuję do konkretnej zmiennej wartość w innej funkcji. Występuje tylko błąd kiedy wpiszę liczbę a potem znak, wtedy jeśli pierwsza z liczb należy do danego przedziału wyświetla mi funkcję która powinna robić ta pierwsza liczba, oraz informację, że następny znak nie jest liczbą. Jakieś wskazówki? |
|
pekfos |
» 2014-05-08 10:36:52 Czyść strumień niezależnie od tego, czy wystąpił błąd. |
|
maly |
» 2014-05-08 10:55:57 Nie na temat ale... char( 0x98 ) => "\230" char( 0xe0 ) => "\340" |
|
dziubeQ Temat założony przez niniejszego użytkownika |
» 2014-05-08 18:44:17 z tym czyszczeniem mi jakoś nie szło do końca, zmieniłem trochę pod siebie bo potrzebuję tylko liczb jednocyfrowych i działa git #include <iostream> #include <stdlib.h>
using namespace std;
void sprawdzanie( string pocz, string kon ) { int p, k, z; string x; p = atoi( pocz.c_str() ); k = atoi( kon.c_str() ); cout << "podaj liczbe: "; do { getline( cin, x ); if( x.size() != 1 ) cout << "podaj wlasciwa liczbe!\n"; else { z = atoi( x.c_str() ); if( z >= p && z <= k ) cout << "najs!\n"; else cout << "podaj wlasciwa liczbe!\n"; } } while( !( z >= p && z <= k ) ); } int main() { sprawdzanie( "3", "6" ); return 0; }
|
|
« 1 » |