FULL-C: printf
Tato stránka popisuje programovací jazyk FULL-C, který je dostupný na vybraných zařízeních SDS. Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.
Standard
FULL-C plně sleduje standard jazyka C, i se všemi specifiky.
- Tisk a převody signed / unsigned
Na toto si dejte pozor, už to bylo zdrojem mnohých nečekaných problémů.
Nejčastější chybou je tisk číselné hodnoty proměnné definované jako char.
Typy "char", "int" jsou dle C standardu "signed char", "signed int" atd. (pokud jej explicitně nedefinujete jako unsigned).
To přináší "problém" při použití (s)(n)printf funkcí (atd.), kdy se použije %u nebo %x pro tisk číselné hodnoty (tedy ne např. %c), ale interně se to uvnitř (s)(n)printf převede na int32 a pak až tiskne. Lze si částečně pomoct pomocí %hu ale to nestačí. Řešením je přetypování.
Příklad:
char c1, c2; c1 = 10; c2 = 200; printf("%u %u", c1, c2); <pre> Co by jste čekali že uvidíte ? Podle C standardu uvidíte toto: "10 -56" (bez uvozovek). Správně totiž musíte program zapsat takto: <pre> char c1, c2; c1 = 10; c2 = 200; printf("%u %u", (unsigned char)c1, (unsigned char)c2); <pre> == int printf(char *format, ...); == Provede vypsání parametrů (...) do konzole (echo.html) v závislosti na formátování (format). Příklad: <pre> void main(void) { int i; i = 1 + 1; printf(" 1 + 1 = %d \n", i); for (;;); // wait here forever }
Příklad:
void main(void) { char txt[6]; txt[0] = 'h'; txt[1] = 'e'; txt[2] = 'l'; txt[3] = 'l'; txt[4] = 'o'; txt[5] = 0; printf(" %s world \n", txt); for (;;); // wait here forever }
Formátování
Platí, že všechny formátovací prvky jsou uvedeny pomocí znaku procenta '%' s následnou informací o typu parametru.
%specifier = popis %% = vypíše znak % %d, %i = signed decimal integer %o = unsigned octal %u = unsigned decimal integer %x = unsigned hexadecimal integer %X = unsigned hexadecimal integer (uppercase) %e, %E = nepodporováno %g, %G = nepodporováno %a, %A = nepodporováno %f = decimal floating point number %F = decimal floating point number (uppercase) %c = jeden znak %s = nulou ukončený text %p = pointer address %n = nepodporováno %m = nepodporováno
Samozřejmě, použití formátovacích prvků musí přesně odpovídat parametrům (...) poskytnutým příslušnému volání printf().
Formátování lze dále zpřesňovat - pomocí doplňujících parametrů v rámci každého formátovacího prvku:
%[flags][width][.precision][length]specifier
Příklad:
int i; unsigned int l, z; char *q; printf("%d %u %x %s \n", i, (unsigned int)l, (unsigned int)z, q); printf("Zarovnani nulami zleva na deset mist: %010d \n", 1984);
Souvislosti
Stejný způsob formátování používá i FULL-C funkce sprinf() a snprintf(), popř. sscanf().
Výpis do konzole (echo.html) je additivní, tzn. každé volání printf() tam text přidá (k textu, který tam už předtím byl). Pokud je potřeba obsah konzole smazat, použije se FULL-C funkce echoclear().