[ Príspevkov: 10 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Zistenie či je čislo vacsie ako ULONG_MAX

Registrovaný: 17.07.08
Prihlásený: 24.01.13
Príspevky: 143
Témy: 37 | 37

Zdravim,
mam usek kodu kde nacitavam cez getchar nejake cele čislo, problem je, ze mi nefunguje porovnanie či nie je to čislo vacsie ako ULONG_MAX.

Kód:
unsigned long int cislo = 0;
while (true)
{
    char c = getchar();

    if (c == '\n' || c == EOF)
        break;

    if (((cislo * 10 + c - '0') + ULONG_MAX) > ULONG_MAX)
    {
            .
            .
            .
    }

    cislo = cislo * 10 + c - '0';
}


tento kod som skusal na zaklade doporučenia na nejakej nemeckej stranke, ono mi to akosi fungovalo včera, ale dnes už tak moc nie :D a nie som si vedomy toho žeby som robil nejake zmeny


_________________
PC: Procesor: INTEL Core i7-860, grafika: MSI R4890 Cyclone OC, 1GB DDR5, doska: Gigabyte GA-P55-UD3R, zdroj: Fortron 700W Everest 700 80+, RAM: 2x2GB Corsair XMS3 DHX
Offline

Užívateľ
Užívateľ
Zistenie či je čislo vacsie ako ULONG_MAX

Registrovaný: 09.04.11
Prihlásený: 11.01.14
Príspevky: 257
Témy: 26 | 26
Bydlisko: Kesa

prečo máš tú nulu v uvodzovkách ?


_________________
NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 13.11.07
Prihlásený: 20.08.16
Príspevky: 1702
Témy: 0 | 0

Pretože c je char. :)


Offline

Skúsený užívateľ
Skúsený užívateľ
Zistenie či je čislo vacsie ako ULONG_MAX

Registrovaný: 11.01.09
Prihlásený: 09.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova

@tomxi, neviem presne, co znamena ta kontrola, ale si si vedomy toho, ze tu:
Kód:
((cislo * 10 + c - '0') + ULONG_MAX)

dochadza k preteceniu? A podalsie ziaden udaj typu unsigned long nemoze byt vacsi ako ULONG_MAX.


Offline

Užívateľ
Užívateľ
Zistenie či je čislo vacsie ako ULONG_MAX

Registrovaný: 17.07.08
Prihlásený: 24.01.13
Príspevky: 143
Témy: 37 | 37
Napísal autor témyOffline : 12.10.2011 17:06 | Zistenie či je čislo vacsie ako ULONG_MAX

som si toho vedomy. nepotrebujem aby to fungovalo presne takto. ja len potrebujem zistit ktore z dvoch cisel je vacsie.. ci ULONG_MAX ci cislo


_________________
PC: Procesor: INTEL Core i7-860, grafika: MSI R4890 Cyclone OC, 1GB DDR5, doska: Gigabyte GA-P55-UD3R, zdroj: Fortron 700W Everest 700 80+, RAM: 2x2GB Corsair XMS3 DHX
Offline

Skúsený užívateľ
Skúsený užívateľ
Zistenie či je čislo vacsie ako ULONG_MAX

Registrovaný: 11.01.09
Prihlásený: 09.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova

tomxi píše:
som si toho vedomy

Zrejme nie, pretoze potom by si vedel, ze cokolvek + ULONG_MAX sa zacne pocitat od nuly a teda automaticky to nemoze byt vacsie ako ULONG_MAX :) Ak chces porovnavat nejake cislo s toutu konstantou, potrebujes vacsi datovy typ - logicky, pretoze pre datovy typ unsigned long je to maximalne cislo. Cize mozes pouzit napr double, staci len pretypovat porovnavanie:
Kód:
if ( ( (double)(cislo * 10 + c - '0') + ULONG_MAX) > ULONG_MAX)


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 13.11.07
Prihlásený: 20.08.16
Príspevky: 1702
Témy: 0 | 0

Ten test tam využíva práve to pretečenie (preto tam je to + ULONG_MAX). Ak tam použije double, tak môže nastať problém s tým, že tam nebude presne celé číslo a môže to robiť zvláštne veci. V oboch prípadoch bude funkčnosť záležať tak trochu na náhode.

Ja osobne by som skôr ULONG_MAX vydelil 10 a z toho vychádzal. :)


Offline

Skúsený užívateľ
Skúsený užívateľ
Zistenie či je čislo vacsie ako ULONG_MAX

Registrovaný: 11.01.09
Prihlásený: 09.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova

chrono píše:
Ten test tam využíva práve to pretečenie (preto tam je to + ULONG_MAX)

Ale ak v tejto podmienke:
Kód:
if (((cislo * 10 + c - '0') + ULONG_MAX) > ULONG_MAX)

dosadime miesto prvej zatvorky lubovolne cislo:
Kód:
if ( ( 1 + ULONG_MAX ) > ULONG_MAX )

nikdy v zivote nebude tato podmienka splnena, pokial sa pohybujeme v datovom type unsigned long, kde ja maximalne cislo prave ULONG_MAX.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 13.11.07
Prihlásený: 20.08.16
Príspevky: 1702
Témy: 0 | 0

Áno a predpokladám, že tá podmienka s tým pretečením pôvodne vyzerala trochu inak. :)


Offline

Užívateľ
Užívateľ
Zistenie či je čislo vacsie ako ULONG_MAX

Registrovaný: 17.07.08
Prihlásený: 24.01.13
Príspevky: 143
Témy: 37 | 37
Napísal autor témyOffline : 13.10.2011 23:50 | Zistenie či je čislo vacsie ako ULONG_MAX

spravil som to s tym cislom vydelenim desiatimi :) vdaka


_________________
PC: Procesor: INTEL Core i7-860, grafika: MSI R4890 Cyclone OC, 1GB DDR5, doska: Gigabyte GA-P55-UD3R, zdroj: Fortron 700W Everest 700 80+, RAM: 2x2GB Corsair XMS3 DHX
 [ Príspevkov: 10 ] 


Zistenie či je čislo vacsie ako ULONG_MAX



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

externy HDD nechce kopirovat subory vacsie ako 6GB

v Pevné disky a radiče

8

1615

22.06.2010 16:39

cuckocuc

V tomto fóre nie sú ďalšie neprečítané témy.

Cislo ako string v CSV

v PHP, ASP

2

638

23.06.2008 11:55

stenley

V tomto fóre nie sú ďalšie neprečítané témy.

Word 2007 / ako vlozim cislo strany?

v Ostatné programy

1

1067

13.12.2008 19:28

dulius

V tomto fóre nie sú ďalšie neprečítané témy.

AKO MAM ZMENIT CISLO NA WIN XP

v Operačné systémy Microsoft

13

1735

07.09.2005 17:58

Pufo Callo

V tomto fóre nie sú ďalšie neprečítané témy.

Ako zistit najmensie a najvacsie cislo v C

v Assembler, C, C++, Pascal, Java

4

2658

19.11.2009 15:09

reDo

V tomto fóre nie sú ďalšie neprečítané témy.

Stránka na zistenie ako mi pôjdu hry

v Služby a webstránky

2

4360

14.02.2013 13:03

Gravedigger

V tomto fóre nie sú ďalšie neprečítané témy.

VACSIE TITULKY

v Ostatné programy

15

2098

12.05.2007 16:43

Dzimbo

V tomto fóre nie sú ďalšie neprečítané témy.

Vacsie rozlisenie notebooku

v Ostatné programy

4

521

20.07.2008 21:40

ac.milan

V tomto fóre nie sú ďalšie neprečítané témy.

zistenie IP adresy, alebo ako mam zistit ci je FAKE uzivatel

v Bezpečnosť a firewally

1

3483

22.11.2010 0:58

shiro

V tomto fóre nie sú ďalšie neprečítané témy.

Starostlivosť o väčšie množstvo tabletov

v Smartfóny a tablety

16

801

05.02.2014 12:37

kuki_sk

V tomto fóre nie sú ďalšie neprečítané témy.

Vacsie sluchatka hraju velmi ticho

v Zvuk

5

1014

21.02.2010 2:15

ac.milan

V tomto fóre nie sú ďalšie neprečítané témy.

Ext HDD nechce prijať väčšie súbory

v Pevné disky a radiče

5

305

22.04.2013 16:42

dano1805

V tomto fóre nie sú ďalšie neprečítané témy.

I/P: DDR1 256mb ramky , aj väčšie množstvo , do PC

v Predám

8

614

10.02.2013 19:18

ramaya

V tomto fóre nie sú ďalšie neprečítané témy.

cislo PORTu

v Bezpečnosť a firewally

2

1012

20.02.2010 8:24

Jaro

V tomto fóre nie sú ďalšie neprečítané témy.

Amstrongove číslo

v Assembler, C, C++, Pascal, Java

9

577

14.02.2017 18:40

GamerSK

V tomto fóre nie sú ďalšie neprečítané témy.

Tel. číslo

v Krčma

8

1104

20.01.2011 16:00

Daron



© 2005 - 2024 PCforum, edited by JanoF