Scanf (jazyk C): Rozdiel medzi revíziami
d (→Príklad) |
d (→Príklad) |
||
Riadok 140: | Riadok 140: | ||
</source> | </source> | ||
− | Výstup: | + | ''Výstup:'' |
Zadajte najoblubenejsiu vetu : Ema má mamu, mama má Emu. | Zadajte najoblubenejsiu vetu : Ema má mamu, mama má Emu. | ||
Vasa najoblubenejsia veta : Ema má mamu, mama má Emu. | Vasa najoblubenejsia veta : Ema má mamu, mama má Emu. |
Aktuálna revízia z 23:16, 19. máj 2020
<ctype.h> | <limits.h> | <stdio.h> | <stdlib.h> | <math.h> | <string.h> | <time.h> |
---|---|---|---|---|---|---|
isalnum |
printf |
system |
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 |
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).