V tomto díle se podíváme na funkci scanf a některé další možnosti načítání dat
Funkce scanf
Funkce scanf slouží k načítání dat ze standardního vstupu a tyto data ukládá do proměnných které jí předáme jako paramtery s jednou "zvláštností". To si ale vyjasníme o několik řádků níže na praktické ukázce. Funcke scanf má následující syntaxi
int scanf("formát vstupního retezce", seznam promennych);
funkce scanf pracuje tak že načte najednou celou sekvenci danou formátovacím řetězcem který je stejný jako u funkce printf. Jedinou odlišností, kterou zde najdeme, je ta, že u proměnných, do kterých chceme data načítat, musíme použít refenční operátor & ampersand. Ukážeme si to na úříkladu.
Scanf("%lf %lf", &a, &b);
Tento refenční operátor slouží k tomu že se na proměnnou odvoláváme odkazem. To znamená, že takto předáme funkci scanf adresu v paměti, kam má načtenou hodnotu zapsat. K lepšímu pochopení uvedu příklad
int a = 10;
printf("promenna a ma hodnotu %d a lezi na adrese %x\n", a, &a);
Zde předáváme funkci pro výpis dvakrát proměnnou a, ale po druhé používáme referenční operátor, což má za následek, že funkci printf je předána adresa proměnné a, která ji vytiskne v hexadecimálním tvaru. Z toho vyplývá, že použitím referenčního operátoru se odkazujeme na místo v operační paměti, kam se mají data zapsat.
Funkce scanf je velice vhodná, pokud potřebujeme zpracovávat data v nějakém speciálním formátu. Toho budeme využívat později pomocí příbuzné funkce fscanf, která slouží pro čtení ze souboru, ale o tom až později. U funkce scanf si ukážeme ještě jeden příklad, který nám zmíněné chování blíže objasní.
double x, y ;
printf("Zadejte hodnoty pro a a b\n");
scanf("x=%lf y=%lf", &x, &y);
printf("Nacetl jsem %lf, %lf\n", x, y);
Pokud nyní zadáme na vstup pouze čísla, funkce scanf se čtením neuspěje, protože data očekávala v jiném formátu. Pokud ale zadáme
a = 10.5
b = 100
vše již proběhne v pořádku.
Funkce getcahr / putchar
Tyto dvě funkce představují základní možnost načítání a vypisování znaků. První funkce getchar má následující syntaxi.
int getchar(void);
Funkce nepřebírá žádné parametry, pouze vrací celé celé číslo, co by ASCII kód načteného znaku. Tím se dostáváme k důležité informaci, a tou je ta, že jazyk C vnitřně pracuje se znakovou proměnnou, jako s celým číslem. Druhá funkce putchar
void putchar(int ch);
slouží k výpisu znaku na standardní výstup a přebírá jediný parametr, a tím je celé číslo reprezentující kód znaku který chceme tisknout. Nakonec ukázka, jak pomocí getchar znak načíst, a pomocí putchar zase zpět vypsat.
int ch;
printf("Zadejte alfanumericky znak:");
ch = getchar();
printf("Vytiskneme pomoci putchar:");
putchar(ch);