400 likes | 528 Views
Verze 2009.01. Standardní knihovní funkce pro vstup a výstup. 12. A1PRG - Programování – Seminář Ing. Michal Heczko heczko@fai.utb.cz. Agenda. Standardní vstup a výstup Formátovaný vstup a výstup Národní prostředí Dynamická alokace paměti. Standardní vstup a výstup.
E N D
Verze 2009.01 Standardní knihovní funkce pro vstup a výstup 12 A1PRG - Programování – Seminář Ing. Michal Heczko heczko@fai.utb.cz
Agenda • Standardní vstup a výstup • Formátovaný vstup a výstup • Národní prostředí • Dynamická alokace paměti
Standardní vstup a výstup • Základní knihovní funkce: • gets() • puts() • getchar() • putchar()
Standardní vstup a výstup • Funkce puts() • char * puts ( char * str ); • Vypíše řetězec na standardní výstup • Výpis textu proměnné až do nalezení ‘\0‘ . • Automaticky doplňuje znak ‘\n‘.
Standardní vstup a výstup • Funkce puts() – příklad: #include <stdio.h> int main () { char string [] = "Hello world!"; puts (string); }
Standardní vstup a výstup • Funkce gets() • char * gets ( char * str ); • Načte řetězec ze standardního vstupu a uloží do řetězcové proměnné. • Načítá celý řádek textu, vynechává znak ‘\n‘. • Automaticky doplňuje ‘\0‘ na konec řetězce.
Standardní vstup a výstup • Funkce gets() – příklad: #include <stdio.h> int main() { char string [256]; printf ("Zadejte svou adresu: "); gets (string); printf (“Vaše adresa je: %s\n",string); return 0; }
Standardní vstup a výstup • Funkce putchar() • char putchar ( char ch ); • Vypíše jednoho znaku na standardní výstup • Návratová hodnota: znak, který byl načten.
Standardní vstup a výstup • Funkce putchar() – příklad: #include <stdio.h> int main () { char c; for (c = 'A' ; c <= 'Z' ; c++) { putchar(c); } return 0; }
Standardní vstup a výstup • Funkce getchar() • int getchar (); • Načtení jednoho znaku ze standardního vstupu. • Návratová hodnota: znak, který byl zapsán.
Standardní vstup a výstup • Funkce getchar() – příklad: #include <stdio.h> int main () { char c; puts ("Vepište text. Zápis ukončíte tečkou:"); do { c=getchar(); putchar (c); } while (c != '.'); return 0; }
Formátovaný vstup a výstup • Výpis na terminál: • Obecný zápis: printf(řetězec, promenna) • Vstup z terminálu: • Obecný zápis: scanf(řetězec, &promenna)
Formátovaný vstup a výstup • Řetězec obsahuje řídící sekvence, za které jsou dosazovány proměnné. • Řídící sekvence má následující obecnou syntaxi: %[příznaky][min_šířka][přesnost][modifikátor typu]typ
Formátovaný vstup a výstup %[příznaky][min_šířka][přesnost][modifikátor typu]typ • Nepovinný parametr • Ovlivňuje zejména způsob zarovnání hodnoty při nastavení minimální šířky, zobrazení znaménka, … • Příznaky mají jednu z hodnot dle následující tabulky.
Formátovaný vstup a výstup %[příznaky][min_šířka][přesnost][modifikátor typu]typ
Formátovaný vstup a výstup %[příznaky][min_šířka][přesnost][modifikátor typu]typ • Nepovinný parametr. • Celočíselná hodnota. • Minimální šířka vypisovaného parametru. • Pokud je vypisovaná hodnota kratší, je doplněna zleva mezerami nebo dle příznaků. • Možno použít znak * - počet míst se načte z argumentu, který předchází proměnné k výpisu
Formátovaný vstup a výstup %[příznaky][min_šířka][přesnost][modifikátor typu]typ • Nepovinný parametr. • Použití u racionálních čísel. • Počet cifer za desetinnou tečkou. • Uvádí se zápis včetně desetinné tečky. • Možno použít znak * - počet míst se načte z argumentu, který předchází proměnné k výpisu
Formátovaný vstup a výstup %[příznaky][min_šířka][přesnost][modifikátor typu]typ • Povinný parametr. • Určuje formát vypisovaných dat, který odpovídá danému datovému typu. • Jednotlivé typy shrnuje následující tabulka.
Formátovaný vstup a výstup %[příznaky][min_šířka][přesnost][modifikátor typu]typ
Formátovaný vstup a výstup %[příznaky][min_šířka][přesnost][modifikátor typu]typ
Formátovaný vstup a výstup %[příznaky][min_šířka][přesnost][modifikátor typu]typ • Nepovinný parametr. • Použití zejména u datových typů s větším/menším rozsahem než u základního datového typu. • Jednotlivé modifikátory typu shrnuje následující tabulka.
Formátovaný vstup a výstup %[příznaky][min_šířka][přesnost][modifikátor typu]typ
Formátovaný vstup a výstup • Příklady: • printf ("Znaky: %c %c \n", 'a', 65); • Znaky: a A • printf ("Desítková čísla: %d %ld\n", 1977, 650000); • Desítková čísla: 1977 650000 • printf ("Úvodní mezery: %10d \n", 1977); • Úvodní mezery: 1977 • printf ("Úvodní nuly: %010d \n", 1977); • Úvodní nuly: 0000001977
Formátovaný vstup a výstup • Příklady: • printf ("Různé číselné soustavy: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100); • Různé číselné soustavy: 100 64 144 0x64 0144 • printf ("Reálná čísla: %4.2f %+.0e %E \n", 3.1416, 3.1416, 3.1416); • Reálná čísla: 3.14 +3e+000 3.141600E+000
Formátovaný vstup a výstup • Příklady: • printf ("Šířka: %*d \n", 5, 10); • Width trick: 10 • printf ("%s \n", "Řetězec"); • Řetězec
Národní prostředí • Při návrhu jazyka C se nepočítalo s použitím jiného kódování, než je kódování pro znaky anglické abecedy. • Pro znaky národních abeced doplněna knihovna locale.h • Knihovna locale.h však nemá podporu ve všech překladačích! • Funguje však např. v MS Visual Studio nebo v Dev C++
Národní prostředí • Nastavení pomocí funkce setlocale() char * setlocale ( intcategory, constchar * locale ); • Návratová hodnota: kategorie lokalizace
Národní prostředí • Nastavení pomocí funkce setlocale() char * setlocale ( intcategory, constchar * locale ); • 1. parametr: kategorie lokalizace
Národní prostředí • Nastavení pomocí funkce setlocale() char * setlocale ( intcategory, constchar * locale ); • 2. parametr: řetězec obsahující jméno lokalizace. • C – výchozí dle jazyka C • Prázdný řetězec – výchozí dle prostředí
Národní prostředí • Příklad: #include <stdio.h> #include <conio.h> int main() { printf("Příliš žluťoučký kůň úpěl ďábelské ódy"); getch(); return 0; }
Národní prostředí • Příklad: #include <stdio.h> #include <conio.h> #include <locale.h> int main() { setlocale(LC_ALL, ""); printf("Příliš žluťoučký kůň úpěl ďábelské ódy"); getch(); return 0; }
Dynamická alokace paměti • Funkce z knihovny stdlib.h • Základní funkce: • malloc() • calloc() • realloc() • free()
Dynamická alokace paměti • Funkce malloc() • Alokace paměti. Neprobíhá inicializace! • Funkce z knihovny stdlib.h • Syntaxe: • void * malloc ( size_t size );
Dynamická alokace paměti • Funkce malloc() • Parametry: • size … velikost alokované paměti v bytech • Návratová hodnota: • void * … ukazatel na začátek alokované oblasti • Příklad: • int *x; • x = (int *) malloc(sizeof(int));
Dynamická alokace paměti • Funkce calloc() • Alokace paměti. Probíhá inicializace na 0! • Funkce z knihovny stdlib.h • Syntaxe: • void * calloc ( size_t num, size_t size );
Dynamická alokace paměti • Funkce calloc() • Parametry: • num … počet prvků • size … velikost jednoho prvku v bytech • Návratová hodnota: • void * … ukazatel na začátek alokované oblasti • Příklad: • int *x; • x = (int *) calloc(5, sizeof(int));
Dynamická alokace paměti • Funkce realloc() • Realokace paměti – změna velikosti alokované oblasti. • Funkce z knihovny stdlib.h • Syntaxe: • void * realloc ( void * ptr, size_t size );
Dynamická alokace paměti • Funkce realloc() • Parametry: • ptr … ukazatel na původní oblast • size … nová velikost v bytech • Návratová hodnota: • void * … ukazatel na začátek alokované oblasti • Příklad: • int *x; • x = (int *) malloc(5*sizeof(int)); • x = (int *) realloc(x, 10*sizeof(int));
Dynamická alokace paměti • Funkce free() • Dealokace paměti – uvolnění paměti • Funkce z knihovny stdlib.h • Syntaxe: • void free ( void * ptr );
A1PRG-s 12. Vstup a výstup Děkuji za pozornost Ing. Michal Heczko heczko@fai.utb.cz 218/U3 Prezentace k dispozici na http://vyuka.fai.utb.cz