standardní knihovní funkce pro vstup a výstup

Post on 24-Jan-2016

56 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Verze 2009.01. Standardní knihovní funkce pro vstup a výstup. 12. A1PRG - Programování – Seminář Ing. Michal Heczkoheczko@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. - PowerPoint PPT Presentation

TRANSCRIPT

A1PRG - Programování – Seminář

Ing. Michal Heczko heczko@fai.utb.cz

Standardní knihovní funkce pro vstup a výstup12

Verze 2009.01

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

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

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

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

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 %

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

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)

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 ( int category, const char * locale );

Návratová hodnota: kategorie lokalizace

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()

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í

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

top related