Jak mame prevadet yytext na integery(pripadne na floaty)?
To ze atoi to nema byt mi doslo celkem rychle
![Smile :)](./images/smilies/icon_smile.gif)
Este k tomu musis dorobit spracovanie tych zle zapisanych cisel (napr. 24j).Dawe píše:Myslím, že stačí otestovat, jestli v tom char* (resp. string) není něco většího než těch 4294967295 (2^32 -1) - (to se provede celkem snadno) a pokud jo, zařvu a pustím na to atoi a vypadne mi to co má ne? Jestli se pletu, tak mě opravte, abych to vymyslel nějak jináč
Aha, mas pravdu, atoi to oreze zle. Ked som to skusal na zaciatku, tak som mal dojem ze to fungovalo. Ta moja veta s tym orezavani ale plati, vysledok je potom:JJ píše:Podle me by to melo z cisla
4294967296 ( binarne 100000000000000000000000000000000 )
melo udelat 0 (uriznutim vyssich bitu ), ale atoi z toho udela neco jako maxint
Kód: Vybrat vše
Warning (line 10): Integer number '4294967296' is out of range, will be truncated
10: unsigned integer [0]
Mas nejaky chytry atoi me to na win i na linuxu dava 2147483647Dawe píše:No nevím, mně když do atoi pošlu "4294967296" tak mi vrátí 0
No tebe zajimaji cisla jen do 2^31-1. Vetsi uz jsou 32-bitovyDawe píše: Ale spíš sem se chtěl zeptat jak je to s tím že se to v tý interpretaci ukládá do vektoru intů ač je to unsigned int, potom z toho vyleze jiný číslo než dotoho vlezlo. Resp. vše co je do 2^31 - 1 je OK a pak to dělá bordel...
Výsledný soubor pak neodpovídá zadanýmu...
V Dev-C++ mi to hezky fungovalo a jak jsem to dal do VS tak to začlo "blbnout". Dev vrací spodní bity, kdežto VS dá jak už tu bylo napsáno "maxint". Takže to chce zvolit jinej přístup ...Return Value.
The converted integer value of the input string.
On overflow the result is undefined.
If an error occurs 0 is returned.