CCS printf()

Nya'ri Viktor office at flexelec.hu
Mon Jul 11 18:18:14 CEST 2005


>>printf("%lu",valami) müködik int32-re is, DE!!!
>>Ha pl. valami = 0xFFFFFF
>>és azt írom, hogy printf("%lu",valami), akkor kiir 16777215-t
>>de ha azt írom, hogy printf("%5lu",valami), akkor is 16777215-t ir ki,
>>meg ha azt írom, hogy printf("%2lu",valami), akkor is 16777215-t ir ki!
>>Szal a karakter-szám vezérlés nem müxik; mindig az értékéhez igazitja.
> 
> 
> Ez igy is van rendjen. Ha nagyobb a szam, akkor nem fogja levagni, hanem
> kimegy minden digit.
> Stringnel lehet csak ilyet.

Nemtom, mi az ANSI C szabvány, de a CCS (ami _nem_annyira_ ANSI 
tudomásom szerint) pl. az int16-nál bizony levágja, úgy ahogy írtam.
Mert ha van pl. egy szám, ami mondjuk 0..1023 tartományban mozoghat, 
annak ugye már nem elég az int8, használnom kell az int16-t; viszont ha 
mondjuk LCD-re akarom kiiratni, akkor meg elég a 4 digit, és lehet hogy 
nincs 5 digitnyi helyem, csak 4. Szal ilyenkor bizony jó ez a funkció, 
és a CCS-nél int8-nál és int16-nál ez müködik is; akkor szerintem 
logikus lenne, hogy int32-nél is így müködjön, de a manualja is ezt írja:

Format:
The format takes the generic form   %wt where w is optional and may be 
1-9 to specify how many characters are to be outputted, or 01-09 to 
indicate leading zeros or 1.1 to 9.9 for floating point.  t is the type 
and may be one of the following:

> Na ez a nemjo...De lehet hogy a manualban benne van hogy a mezoszelesseg
> csak 1 karakter lehet...
> Logikus is lenne.
> Mert vagy igy irjuk mindig: (10 mezoszelesseg 0 karakterrel feltoltve)
> %010lu
> vagy igy 1 karakter mezoszelesseggel (1 mezoszelesseg 0 karakterrel
> feltoltve):
> %10lu
> 
> Maskulonben nem lehet eldonteni.
> 

Igen, a beidézett szöveg szerint 1 karakter a mezőszélesség; de ha már 
int32-re is mukodnie kellene a dolognak (az én logikám szerint), akkor 
kitalálhatnának valami ujabb formulát, ahol a 10 karakteres kiirást is 
lehetne specifikálni, nem?
Tényleg, ANSI-éknál mi a szabvány erre? Hogy kell ezt megadni?

>>kiirast, ami 8 karakter) vezeto nullákkal. Szal vannak még hibái, na...
> 
> Nembiztos hogy minden hiba ami annak latszik. :)

Csak azt ne mondd, hogy ez feature :)
Szerintem ez kimondottan _hiba_; de mentségükre legyen mondva, hogy 
folyamatosan javitgatják.

 >>Huh, ezt nem gondoltad komolyan, ugye?
 >>
 >>pl.
 >>1000000(dec) = 0xF4240
 >>Namost 0xF4240 >> 16 az ugye 0xF
 >>0xF = 15(dec)
 >>0x4240 = 16960(dec)
 >>Ha úgy iratom ki, ahogy írod, akkor abból lesz a kijelzőn 1516960 az
 >>1000000 helyett :(

 > Az a durva hogy szamomra teljesen jo megoldasnak tunt. Fel sem merult 
bennem
 > hogy hulyeseg.
 > hexaban jo lenne... valszeg azert.
 >

Hát igen, hexaban jó lenne, de nekem decimálisban kell.

 > Nemértem... Viktor, eddig mit próbáltál???????
 > Azt nehezen kepzelem hogy ultel a kod felett, es panikoltal hogy 
vajon mivel
 > irjal ki, es nem probaltad ki a ket lehetseges kezenfekvo variaciot. :)))

De bizony, így történt.
Mert a "Longs in the printf may be 16 or 32 bit." szoveget nem vettem 
észre, és ha az int8-nak %u, az int16-nak %lu, akkor gondoltam, hogy az 
int32-nek is van valami saját szintaktikája, de nem találtam sehol. 
Bevallom töredelmesen, előre nem próbáltam ki; gondoltam megkérdezem az 
okosabbakat :)

V.




More information about the Elektro mailing list