Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Typy zmiennych - unsigned.

Ostatnio zmodyfikowano 2015-04-19 10:07
Autor Wiadomość
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)"?
P-131059
Monika90
» 2015-04-17 15:33:48
Moim zdaniem to niezgodność implementacji biblioteki ze standardem. Clang z biblioteką libc++ wykrywa błąd:
http:/​/coliru.stacked-crooked.com/a​/1835b17c85b0daab

I nie używaj cin.good() do sprawdzania poprawności ale !cin.fail(), albo po prostu cin jako warunku if
P-131065
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
P-131086
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 ().
P-131120
Monika90
» 2015-04-19 10:07:15
Uruchom sobie taki program
C/C++
#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.
P-131121
« 1 »
  Strona 1 z 1