standardní knihovní funkce pro vstup a výstup
DESCRIPTION
Verze 2009.01. Standardní knihovní funkce pro vstup a výstup. 12. A1PRG - Programování – Seminář Ing. Michal [email protected]. 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. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/1.jpg)
A1PRG - Programování – Seminář
Ing. Michal Heczko [email protected]
Standardní knihovní funkce pro vstup a výstup12
Verze 2009.01
![Page 2: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/2.jpg)
Agenda
Standardní vstup a výstup Formátovaný vstup a výstup Národní prostředí
Dynamická alokace paměti
![Page 3: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/3.jpg)
Standardní vstup a výstup
Základní knihovní funkce: gets() puts() getchar() putchar()
![Page 4: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/4.jpg)
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‘.
![Page 5: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/5.jpg)
Standardní vstup a výstup
Funkce puts() – příklad:#include <stdio.h>
int main ()
{
char string [] = "Hello world!";
puts (string);
}
![Page 6: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/6.jpg)
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.
![Page 7: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/7.jpg)
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;
}
![Page 8: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/8.jpg)
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.
![Page 9: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/9.jpg)
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;
}
![Page 10: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/10.jpg)
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.
![Page 11: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/11.jpg)
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;
}
![Page 12: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/12.jpg)
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)
![Page 13: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/13.jpg)
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
![Page 14: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/14.jpg)
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.
![Page 15: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/15.jpg)
Formátovaný vstup a výstup%[příznaky][min_šířka][přesnost][modifikátor typu]typ
Příznak
Význam
# Výpis hodnoty více explicitně (např. vynucení zobrazení 0x u hexadecimální hodnoty)
0 Zleva zarovnat nulami
- Zprava zarovnat mezerami
mezera Zleva zarovnat mezerami
+ Před číslem vždy zobrazit znaménko
![Page 16: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/16.jpg)
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
![Page 17: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/17.jpg)
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
![Page 18: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/18.jpg)
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.
![Page 19: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/19.jpg)
Formátovaný vstup a výstup%[příznaky][min_šířka][přesnost][modifikátor typu]typ
Typ Popis
c znak
d znaménkové celé číslo v desítkovém formátu
i znaménkové celé číslo v desítkovém formátu (C++)
e reálné číslo ve vědeckém formátu (např. 2.8e31)
E reálné číslo ve vědeckém formátu (např. 2.8E31)
f reálné číslo s desetinnou tečkou
g reálné číslo s desetinnou tečkou, je-li exponent menší než 4, v opačném případě stejně jako u e
G reálné číslo s desetinnou tečkou, je-li exponent menší než 4, v opačném případě stejně jako u E
![Page 20: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/20.jpg)
Formátovaný vstup a výstup%[příznaky][min_šířka][přesnost][modifikátor typu]typ
Typ Popis
o znaménkové celé číslo v oktalovém formátu
s řetězec
u nezáporné celé číslo
x znaménkové celé číslo v hexadecimálním formátu. Znaky A-F malými písmeny
X znaménkové celé číslo v hexadecimálním formátu. Znaky A-F velkými písmeny
p ukazatel (adresa v paměti)
n nezobrazí žádnou hodnotu
% výpis znaku %
![Page 21: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/21.jpg)
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.
![Page 22: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/22.jpg)
Formátovaný vstup a výstup%[příznaky][min_šířka][přesnost][modifikátor typu]typ
Typ Popis
h Datový typ short int
l Modifikátor pro datový typ long int nebo long double
L Modifikátor pro datový typ long int nebo long double
ll Modifikátor pro datový typ long long int (dle normy C99)
LL Modifikátor pro datový typ long long int (dle normy C99)
![Page 23: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/23.jpg)
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
![Page 24: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/24.jpg)
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
![Page 25: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/25.jpg)
Formátovaný vstup a výstup Příklady:
printf ("Šířka: %*d \n", 5, 10); Width trick: 10
printf ("%s \n", "Řetězec"); Řetězec
![Page 26: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/26.jpg)
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++
![Page 27: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/27.jpg)
Národní prostředí
Nastavení pomocí funkce setlocale()char * setlocale ( int category, const char * locale );
Návratová hodnota: kategorie lokalizace
![Page 28: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/28.jpg)
Národní prostředí
Nastavení pomocí funkce setlocale()char * setlocale ( int category, const char * locale );
1. parametr: kategorie lokalizace
Jméno Popis
LC_ALL Plná lokalizace (vše následující)
LC_COLLATE Znaková sada
LC_CTYPE Chování maker v ctype.h
LC_MONETARY Symbol a formátování měny
LC_NUMERIC Nastavení oddělovače u desetinných čísel (tečka/čárka)
LC_TIME Datum a čas (konkrétně funkce strftime()
![Page 29: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/29.jpg)
Národní prostředí
Nastavení pomocí funkce setlocale()char * setlocale ( int category, const char * 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í
![Page 30: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/30.jpg)
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;
}
![Page 31: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/31.jpg)
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;
}
![Page 32: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/32.jpg)
Dynamická alokace paměti
Funkce z knihovny stdlib.h Základní funkce:
malloc() calloc() realloc() free()
![Page 33: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/33.jpg)
Dynamická alokace paměti
Funkce malloc()
Alokace paměti. Neprobíhá inicializace!
Funkce z knihovny stdlib.h
Syntaxe: void * malloc ( size_t size );
![Page 34: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/34.jpg)
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));
![Page 35: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/35.jpg)
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 );
![Page 36: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/36.jpg)
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));
![Page 37: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/37.jpg)
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 );
![Page 38: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/38.jpg)
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));
![Page 39: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/39.jpg)
Dynamická alokace paměti
Funkce free()
Dealokace paměti – uvolnění paměti
Funkce z knihovny stdlib.h
Syntaxe: void free ( void * ptr );
![Page 40: Standardní knihovní funkce pro vstup a výstup](https://reader036.vdocuments.pub/reader036/viewer/2022081503/568152f6550346895dc11185/html5/thumbnails/40.jpg)
A1PRG-s 12. Vstup a výstup
Děkuji za pozornost
Ing. Michal Heczko
218/U3
Prezentace k dispozici na http://vyuka.fai.utb.cz