Typy zmiennych - unsigned.
Ostatnio zmodyfikowano 2015-04-19 10:07
spike1975 Temat założony przez niniejszego użytkownika |
Typy zmiennych - unsigned. » 2015-04-17 15:04:20 W kursie jest napisane że zmienne "unsigned" przechowują dodatnie wartości. Tymczasem zainspirowany rozdziałem 13 dotyczącym wieku napisałem coś takiego:
unsigned short wiek;
cin.clear (); cin.sync ();
cout << "Podaj swoj wiek "; cin >> wiek;
if (cin.good ())
cout << "Twoj wiek to " << wiek << " lat" << endl;
else
cout << "ERROR ERROR ERROR";
no i jak wpisze mu normalny wiek to jest ok. jak wpisze jakąs literę to też jest OK, czyli wywala ERROR ERROR ERROR. ale jak wpisze liczbe ujemną to przyjmuje jakąś bzdurną wartość i ją przechowuje i wypisuje ze wiek to np 65481 lat. jak to faktycznie jest z tymi zmiennymi nieujemnymi? czy można to jakoś rozwiazac nie pakując się w dodatkową "if (wiek<0)"? |
|
Monika90 |
» 2015-04-17 15:33:48 |
|
JMII89 |
» 2015-04-17 20:11:47 Bo dochodzi do przekroczenia wartości którą unsigned int może pomieścić .
http://pl.wikipedia.org/wiki/Przekroczenie_zakresu_liczb_ca%C5%82kowitych |
|
spike1975 Temat założony przez niniejszego użytkownika |
» 2015-04-19 08:48:29 "I nie używaj cin.good() do sprawdzania poprawności ale !cin.fail(), albo po prostu cin jako warunku if"
a dlaczego? pytam bo w kursie jest wlasnie cin.good (). |
|
Monika90 |
» 2015-04-19 10:07:15 Uruchom sobie taki program #include <iostream> #include <sstream>
int main() { std::istringstream input( "123" ); int x; input >> x; if( input.good() ) std::cout << "OK, x = " << x << std::endl; else std::cout << "ERROR" << std::endl; }
i zobacz jaki jest wynik, następnie zmień input.good() na !input.fail() i sam sobie odpowiedz co działa lepiej. |
|
« 1 » |