Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sstream> //do obslugi konwersji stringa na inta
- int i, nr_int;
- string nr_str;
- double nr_db;
- do
- {
- i=0; //zeruje przed nastepnym wywolaniem
- error_flag=0;
- cin.clear(); //czysci bufor strumienia przed ew. bledem
- cin.sync();
- getline(cin, nr_str);
- while(i < nr_str.length() && error_flag==0) //wczytuje do konca stringa i dopoki nie nabito flagi bledu wewnatrz petli
- {
- int x = nr_str.at(i); //przypisuje numer ASCII z konkretnego wczytanego "znaku"
- if((x<48 || x>57) && nr_str.at(i)!=46) //akceptuje tylko cyfry 0-9 i kropke (po numerze ascii)
- error_flag=1;
- i++; //inkrementacja, aby nast. razem byl badany nowy element, czy jest poprawny
- if(i==10) //zeby nie wczytywalo za duzych liczb to przerywa, tutaj jest an miliard
- error_flag=1;
- }
- if(error_flag==0)
- //jesli poprawnie wczytano, to przypisuje intowi liczbe double w celu badania czy liczba jest calkowita
- {
- istringstream iss(nr_str);
- iss >> nr_db;
- nr_int=nr_db; //przypisanie intowi liczby double w celu badania czy liczba jest calkowita
- }
- if(error_flag==1) //jesli wczytano niepoprawnie
- out<<"Podaj poprawna liczbe"<<endl;
- if(error_flag==0 && nr_db-nr_int!=0) //jesli przy nienabitej fladze natrafi na liczbe niecalkowita
- {
- cout<<"Wczytaj liczbe calkowita!"<<endl;
- error_flag=1;
- }
- else if(error_flag==0 && nr_db<=0)
- {
- cout<<"Liczba musi byc dodatnia."<<endl;
- error_flag=1;
- }
- }while(error_flag==1);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement