INT_MAX použití v programu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

INT_MAX použití v programu – C / C++ – Fórum – Programujte.comINT_MAX použití v programu – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Libor
~ Anonymní uživatel
90 příspěvků
28. 7. 2012   #1
-
0
-

Snad nevadí, že mám další otázku.. v C++ jsem napsal tento jednoduchý program:

# include <iostream>
# include <climits>
int main()
{
    int a;
    std::cin >> a;
    if(a > INT_MAX || a < INT_MIN)
        return 1;
    else
        return 0;
}

podobný program jsem psal i v C a taky nedělal to, co pravděpodobně všichni odhadnete, že bych chtěl. pokud uživatel zadá číslo, které je mimo rozsah INT, pak vrátí 1, jinak vrací 0. problém je ten, že ať zadám jakékoliv číslo, vždy program vrací 0... asi tuším, čím to je, ale nevím jak program upravit aby pracoval jak má.

myslím si, že je to tím, že číslo INT_MAX je (zjednodušeně) třeba 1111 . Pokud zadám nějaké větší číslo, tak je třeba 
10111, ovšem počítač pracuje pouze s 0111 a to porovná s 1111. nevím jestli to chápu dobře, ale tak si to vysvětluji já. a netuším jak bych to měl opravit. za každou radu bych byl moc rád

Nahlásit jako SPAM
IP: 93.99.200.–
Reklama
Reklama
__Libor0
Duch
28. 7. 2012   #2
-
0
-

#1 Libor

Já už jsem zde měl pár otázek, tak sem se registroval. teď když budu něco psát tak pod tímto jménem

Nahlásit jako SPAM
IP: 93.99.200.–
vitamin+8
Grafoman
28. 7. 2012   #3
-
0
-

INT_MAX je najvecsie mozne cislo ktore sa zmesti do typu int, takze premenna a bude bud mensia alebo rovna INT_MAX a vecsia alebo rovna INT_MIN. Takze ta podmienka bude vzdy vyhodnotena ako false.

edit:

mozes cislo nacitat ako string a potom ho previest na cislo, pri prevode lahko zistis ci je moc velke.

Ak mas kniznicu boost, tak mozes pouzit toto:

#include <boost/lexical_cast.hpp>

try {
    int x = boost::lexical_cast<int>( "123" );
} catch( boost::bad_lexical_cast const& ) {
    std::cout << "Error: input string was not valid" << std::endl;
}
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
__Libor0
Duch
28. 7. 2012   #4
-
0
-

#3 vitamin

vitamin, díky za odpověď. toto asi moc nechápu... ale asi je to docela složité pro začátek to tak vidím.. C++ se učím docela  krátkou dobu asi po sobě chci najednou příliš. zatím z toho přiloženému kódu nerozumím bohužel skoro ničemu. 

Nahlásit jako SPAM
IP: 93.99.200.–
vitamin+8
Grafoman
28. 7. 2012   #5
-
0
-
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
__Libor0
Duch
28. 7. 2012   #6
-
0
-

   

# include <iostream>
# include <climits>

int main()
{
    using namespace std;
    cout << "zadejte cislo int: ";
    double x;
    cin >> x;
    if(x > INT_MAX || x < INT_MIN)
        return 1;
    cout << "ano, cislo " << int(x) << " je int" << endl;
    return 0;
}
    

mam otazku... v tomto pripade, je toto pretypovani mozne nebo ne? osetril jsem ze cislo je ve spravnem rozsahu, takze se do typu int vejde, nebo ne? potom bych mohl dale s promennou x pracovat jako s int. Ale nevim jestli je to takto funkcni musim to zkusit

edit: opravil jsem hroznou chybu kde sem mel jen int main bez zavorek

Nahlásit jako SPAM
IP: 93.99.200.–
vitamin+8
Grafoman
28. 7. 2012   #7
-
0
-

Ak bude platit toto:

sizeof(int) < sizeof(double) 

tak to moze fungovat. 

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
yaqwsx+9
Posthunter
28. 7. 2012   #8
-
0
-

#7 vitamin
Není pravda - double je číslo s plovoucí destinnou čárkou - tzn. je uloženo jako několik platných číslic a mantisa (řád). Tzn. do double klidně uložíš číslo 10^24. Ale číslo 12345678912345678912346789 do double už bez ztráty přesnosti neuložíš.

Nahlásit jako SPAM
IP: 85.160.15.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
vitamin+8
Grafoman
28. 7. 2012   #9
-
0
-

Ja som to presne nepocital, len som vyskusal int32 prekonvertovat na float a spet na int32 a neslo to spravne. int64 na double podobne. Toto: sizeof(int) < sizeof(double) som myslel len ako nutnu podmienku  

Skusal som to na tomto:

cout << numeric_limits<int64_t>::max() << "  ?=  " << (int64_t)(double)numeric_limits<int64_t>::max() << endl;
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
zlz
~ Anonymní uživatel
634 příspěvků
29. 7. 2012   #10
-
0
-

#6 __Libor
Co to udělá s "1,23" nebo "asd" ?

Chyby při čtení (včetně překročení rozsahu typu cílové proměnné) můžeš otestovat třeba takhle: if (!cin) { ...chyba... }.

Nahlásit jako SPAM
IP: 80.188.216.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 83 hostů

Podobná vlákna

C# - pouziti += — založil aleskm

$_GLOBALS Pouziti — založil Petr

Použití tlačítka — založil Koumes21

Použití výjimek v C++ — založil Jonyzz

C# použití linq — založil Marek

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý