Scanf (jazyk C): Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
Riadok 149: Riadok 149:
 
  Zadali ste : 0x16 (22).
 
  Zadali ste : 0x16 (22).
  
==Zdroje==
+
==Referencie==

Verzia zo dňa a času 11:55, 11. máj 2020

Rozdelenie funkcií jazyka C podľa knižníc, v ktorých sú definované
<ctype.h> <limits.h> <stdio.h> <stdlib.h> <math.h> <string.h> <time.h>

isalnum
isalpha
isdigit
isgraph
islower
isprint
ispunct
isspace
isupper
isxdigit

printf
scanf
getc
putc
getchar
putchar
fprintf
fscanf
fgetc
fputc
fopen
fclose
feof

system
malloc
qsort
rand
srand
atoi
atol
atof
itoa
div
abs
labs

pow
fabs
exp
log
log10
sqrt
ceil
sin
cos

strlen
strcmp
strchr
strcpy
strstr
strcat
strncat

clock
time

Funkcia scanf

knižnica

stdio.h

popis

Načíta dáta z klávesnice


Úplný funkčný prototyp:

int scanf(const char *format, ...);

Podrobný popis funkcie

Táto funkcia načíta dáta z klávesnice (zo štandardizovaného vstupu stdin) do rôznych typov premenných: int, char, char[], byte, float, double,... Pri zadávaní z klávesnice sa dáta odošlú až vtedy, ak stlačíte enter.

Parametre

format
formát vstupných dát. Akýkoľvek biely znak oddeľuje hodnoty (rovnako aj pri reťazcoch). Tabuľka formátovacích znakov je nižšie.
...
ďalšie premenné, ktoré sú použité vo formáte. Pozor: pred všetkými premennými, ktoré samé o sebe nie sú smerníky, musíme dať znak referencie &, pretože my musíme tejto funkcie zadať adresu, na ktorú musí vpísať hodnotu.


Tvar formátu: %[*][šírka][dĺžka]formátovací znak ([] označujú, že daný špecifikátor je voliteľný)

Tabuľka formátovacích znakov:

Formátovací znak Popis Detailnejší popis
i Celé číslo Akýkoľvek počet číslic, ktorým prípadne predchádza znak (+ alebo -). Predvolené sú desatinné číslice (0-9), predpona 0 zavádza osmičkové číslice (0-7) a predpona 0x hexadecimálne číslice (0-f). Kladný aj záporný (signed) argument.
d alebo u Desiatkové celé číslo Akýkoľvek počet desiatkových číslic (0-9), ktorým prípadne predchádza znak (+ alebo -). d je pre kladný aj záporný argument (signed) a u je len pre kladný argument (unsigned).
o Osmičkové celé číslo Akýkoľvek počet osmičkových číslic (0-7), ktorým prípadne predchádza znak (+ alebo -). Len pre kladný argument (unsigned).
x Hexadecimálne celé číslo Akýkoľvek počet hexadecimálnych číslic (0-9,a-f,A-F), ktorým prípadne predchádzajú znaky 0x alebo 0X, ktorým prípadne predchádza znak (+ alebo -). Len pre kladný argument (unsigned).
f, e, g, a Reálne číslo Séria desatinných číslic, ktorá prípadne obsahuje desatinnú čiarku, prípadne pred ňou je znamienko (+ alebo -) a prípadne za ňou znak e alebo E a desatinné celé číslo.
c Znak Ďalší znak. Ak je zadaná iná šírka ako 1, funkcia načíta presne počet znakov rovný šírke a uloží ich do nasledujúceho umiestnenia poľa z argumentu. Na konci nie je pripojený ukončovací znak (\0, null character).
s Textový reťazec Akýkoľvek znakov, ktoré nie sú biele (prázdne) znaky. Načítavanie sa zastaví pri prvom nájdenom bielom znaku. Na koniec reťazca sa automaticky pridá ukončovancí znak (\0, null character).
p Adresa smerníku Sekvencia znakov predstavujúcich smerník. Konkrétny použitý formát závisí od implementácie systému a knižnice, ale je rovnaký ako formát použitý na formátovanie %p vo funkcii fprintf.
[znaky] Znaky, ktoré neukončia načítavanie Akýkoľvek počet znakov uvedených v zátvorkách. Pomlčka (-), ktorá nie je prvým znakom, môže v niektorých implementáciách knižnice spôsobiť chybu.
[^znaky] Znaky, ktoré ukončia načítavanie Akýkoľvek počet znakov, žiadny z nich nebol špecifikovaný ako znak medzi zátvorkami.
n Počet Nie je načítaný žiadny vstup. Počet znakov, ktoré sa doposiaľ prečítali zo stdin, sa uloží sa na miesto, na ktoré ukazuje smerník.
% % Znak %, za ktorým nasleduje tiež znak % je braný ako jeden znak %.
Prídavné špecifikátory Popis
* Voliteľná počiatočná hviezdička označuje, že dáta ktoré by mali byť načítané budú ignorované (t.j. nebudú zapísané na mieste kam ukazuje smerník v argumente).
width Špecifikuje maximálny počet znakov, ktoré budú načítané v danej operácii načítania (Voliteľné).
length Jedno z: hh, h, l, ll, j, z, t, L (Voliteľné). Mení očakávaný typ priestoru, na ktorý ukazuje smerník v argumente.

Tabuľka použitia premenných a formátovacích znakov:

dĺžka d i u o x X f F e E g G a A c s p n
(žiadna) int unsigned int double int char* void* int*
hh signed char unsigned char signed char*
h short int unsigned short int short int*
l long int unsigned long int wint_t wchar_t* long int*
ll long long int unsigned long long int long long int*
j intmax_t uintmax_t intmax_t*
z size_t size_t size_t*
t ptrdiff_t ptrdiff_t ptrdiff_t*
L long double

[1]

Návratová hodnota

Po úspechu sa vráti celkový počet prijatých položiek.

Ak nastala chyba počas čítania, indikátor chyby (ferror) je zapísaný a následne je vrátené záporné číslo označujúce chybu. [2]

Príklad

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5 	char str[200];
 6 	int i;
 7 
 8 	printf("Zadajte najoblubenejsiu vetu: ");
 9 	scanf("%199[^\n]s", str); //načíta textový reťazec s maximálnou dĺžkou 199 znakov až po znak \n (nový riadok), čiže až po stlačenie tlačidla enter
10 	printf("Vasa najoblubenejsia veta: %s\n", str);
11 	printf("Zadajte meno: ");
12 	scanf("%79s", str); //načíta jedno slovo s maximálnou dĺžkou 79 znakov
13 	printf("Zadajte rok: ");
14 	scanf("%d", &i); //načíta číslo
15 	printf("Pan %s ma %d rokov.\n", str, i);
16 	printf("Zadajte hexadecimalne cislo: ");
17 	scanf("%x", &i); //načíta hexadecimálne číslo
18 	printf("Zadali ste: %#x (%d).\n", i, i);
19 
20 	return 0;
21 }

Výstup:

Zadajte najoblubenejsiu vetu : Ema má mamu, mama má Emu.
Vasa najoblubenejsia veta : Ema má mamu, mama má Emu.
Zadajte meno : Ferko
Zadajte rok : 20
Pan Ferko ma 20 rokov.
Zadajte hexadecimalne cislo : 0x16
Zadali ste : 0x16 (22).

Referencie