Standardní vstup a výstup



Podobné dokumenty
- jak udělat konstantu long int: L long velka = 78L;

Lekce 9 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Vstup a výstup datové proudy v C

Formátové specifikace formátovací řetězce

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Jazyk C práce se soubory. Jan Hnilica Počítačové modelování 16

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

10 Práce s řetězci - pokračování

Úvod do programování. Lekce 1

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

vstup a výstupy jazyce C

Proměnná a její uložení v paměti

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Práce se soubory. Základy programování 2 Tomáš Kühr

vstup a výstupv jazyce C

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Základy jazyka C. Základy programování 1 Tomáš Kühr

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

VISUAL BASIC. Práce se soubory

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Programování v jazyce C pro chemiky (C2160) 5. Čtení dat ze souboru

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Základy programování (IZP)

BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky

11b Další příklady operací vstupu a výstupu (úvod viz 10)

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

NPRG030 Programování I, 2016/17 1 / :58:13

NPRG030 Programování I, 2010/11

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

VY_32_INOVACE_08_2_04_PR

Racionální čísla, operátory, výrazy, knihovní funkce

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Algoritmizace a programování

Příklad: Součet náhodných čísel ve vektoru s počtem prvků, které zadá uživatel, pomocí sum() a pomocí cyklu for. Ověříme, že příliš výpisů na

Racionální čísla, operátory, výrazy, knihovní funkce

Základy programování (IZP)

Sada 1 - Základy programování

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

- tzv. standardní vstupní a výstupní proud (input / output stream)

Algoritmizace a programování. Terminálový vstup a výstup

Stručný návod k programu Octave

Systém je citlivý na velikost písmen CASE SENSITIVE rozeznává malá velká písmena, např. PROM=1; PROm=1; PRom=1; Prom=1; prom=1; - 5 různých proměnných

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Zápis programu v jazyce C#

Algoritmizace a programování

Operační systémy. Cvičení 3: Programování v C pod Unixem

IUJCE 07/08 Přednáška č. 1

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky

Datové typy pro reálná čísla

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Základy jazyka C. Úvod do programování 1 Tomáš Kühr

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

ALGORITMIZACE A PROGRAMOVÁNÍ

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

8 Třídy, objekty, metody, předávání argumentů metod

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

Jazyk C++, některá rozšíření oproti C

Textové soubory. alg9 1

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

Programovací jazyk Pascal

Algoritmizace a programování

PROGRAMOVÁNÍ V C++ CVIČENÍ

pi Ludolfovo číslo π = 3,14159 e Eulerovo číslo e = 2,71828 (lze spočítat jako exp(1)), např. je v Octave, v MATLABu tato konstanta e není

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Operační systémy. Cvičení 4: Programování v C pod Unixem

2 Datové typy v jazyce C

Struktury a dynamická paměť

Úvod do programování. Lekce 5

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Programování v jazyce C pro chemiky (C2160) 9. Práce s PDB soubory

Paměť počítače. alg2 1

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Řešení sady 1. Úvod do programování 1 Tomáš Kühr

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

Transkript:

Standardní vstup a výstup Trochu teorie S pojmy standardní vstup/výstup (I/O, input/output) jste se již pravděpodobně setkali, pokud ale ne, zde je krátké vysvětlení. Standardní vstup a výstup jsou vlastně jakési abstrakce vstupního a výstupního zařízení. Standardní vstup nejčastěji představuje klávesnici a standardní výstup zase monitor. Operační systém pak nabízí prostředky, pomocí kterých je možné změnit standardní vstupně-výstupní zařízení, a tak například přesměrovat výstup programu do souboru. Stejně tak je možné v rámci OS předat programu jako vstup soubor. Následující kapitoly se budou zabývat funkcemi, které provádějí výstup dat na standardní výstup, nebo které čtou data ze standardního vstupu. Dále budeme rozlišovat mezi neformátovaným a formátovaným I/O a mezi I/O znaků a řádků (řetězců).

Standardní I/O znaků - 1 Vstup a výstup znaků Programy často potřebují načítat z klávesnice nejen čísla, ale také znaky. Pro vstup znaků používáme getchar a putchar, případně jim odpovídající volání funkcí pracujících se standardním vstupním a výstupním proudem - getc(stdin) a putc(c, stdout). Důležité: Typ hodnoty, se kterou funkce pracují je nikoliv char, ale int. Důvodem je skutečnost, že ASCII tabulka obsahuje 256 znaků (přičemž přesně definuje dolních 128 z nich). A celkem 256 znaků je přesně tolik, kolik možností nabízí datový typ char. Vyčerpání všech kódových kombinací tohoto datového typu nedává odpovídajícím funkcím možnost pro zakódování řídicích informací. A proto je datový typ pro vstup i výstup znaků int.

Výstup znaků int putchar(int c) Standardní I/O znaků - 2 Pro výstup jednoho znaku nám poslouží funkce putchar, která na standardní výstup pošle znak, jehož ascii hodnota byla funkci předána parametrem c. V případě, že je standardním výstupem monitor, znak se vypíše na aktuální pozici na obrazovku. Jestliže se celá operace podařila, vrací putchar hodnotu tištěného znaku, v opačném případě vrací hodnotu EOF (end of file). Symbolická hodnota EOF bývá definována jako záporné číslo, a proto, pokud budete návratovou hodnotu uchovávat, používejte výhradně proměnnou typu int. Příklad použití : int c = 80; putchar(c); // ASCII kod znaku P

Vstup znaků int getchar(void) Standardní I/O znaků - 3 Funkce getchar přečte jeden znak ze standardního vstupu (nejčastěji klávesnice) a vrátí jeho ascii hodnotu pomocí typu int. Slovo void v závorkách značí, že funkce nemá žádný parametr. Pokud je standardním vstupem klávesnice, pak je vstup bufferovaný po řádcích, což znamená, že dříve než se provede samotná funkce getchar, jsou do klávesnicového bufferu načítány znaky tak dlouho, dokud není stisknuta klávesa ENTER. Příklad použití : int c ; c = getchar(); // v proměnné c je uložen ASCII kod znaku z klávesnice

Standardní I/O znaků - 4 Podívejme se na následující příklad: int c; c = getchar(); putchar(c); c = getchar(); putchar(c); Nejdříve se musí provést první příkaz getchar, který bude čekat na vstup od uživatele. Stiskneme-li ale např. klávesu 'a', vykonávání getchar tím nekončí, protože zatím se jenom znak 'a' zapsal do bufferu. Znak se také automaticky vypíše na obrazovku. I další vložené znaky se budou zapisovat do bufferu, a to tak dlouho, dokud uživatel nestiskne ENTER. Předpokládejme tedy, že jsme napsali slovo "ahoj" a odřádkovali. Pak se konečně do proměnné c uloží první stisknutý znak, v našem případě tedy 'a'. Následující příkaz putchar pak tento znak vytiskne na obrazovku. Pokud budeme znovu volat getchar, již se nečeká na další vstup uživatele, protože v klávesnicovém bufferu jsou dosud navybrané znaky z minulého volání getchar ('h' + 'o' + 'j' + '\n'). Proto je ihned vybrán další znak, tedy 'h'. Abychom buffer vyprázdnili, museli bychom číst pomocí getchar ještě třikrát. Nesmíme totiž zapomenout na znak odřádkování - '\n'.

Standardní I/O řetězců - 1 Vstup a výstup řetězců Standardní vstup a výstup řádků je jednoduchou nadstavbou nad čtením znaků. Funkce pro I/O řetězců používají hlavičkový soubor stdio.h, je tedy nutno před jejich použitím vložit na začátek programu direktivu include : #include <stdio.h> Funkce jsou TÉMĚŘ totožné jako pro I/O znaků. Funkce gets() čte zadávané znaky z klávesnice, dokud není načten znak "návrat na začátek řádku" (tj. dokud uživatel nestiskl klávesu ENTER). Přečtené znaky ukládá do pole str. Znak "návrat na začátek řádku" se k řetězci nepřidává. Místo toho je převeden na nulový ukončovací znak. Při úspěchu vrací gets() ukazatel na začátek str. Nastane-li chyba, vrací se nulový ukazatel. Funkce puts() vypíše na obrazovku řetězec, na který ukazuje str. K řetězci se automaticky přidává sekvence "návrat na začátek řádku" a "nový řádek". Při úspěchu vrací puts() nezápornou hodnotu. Nastane-li chyba vrací se EOF. Důležité Jednoduchost použití skrývá velké nebezpečí. Funkce gets() nemá informaci o délce oblasti vymezené pro čtený řetězec. Je-li oblast kratší, než vstupní řádek, dojde jeho načtením velmi pravděpodobně k přepsání paměťové oblasti související s vyhrazenou pamětí. A to se všemi důsledky z toho vyplývajícími.

Standardní I/O řetězců - 2 Výstup řetězců int puts(char string[]) int puts(char *string) Funkce puts jednoduše vypíše na standardní výstup celý řetězec předaný jí parametrem string a po jeho vypsání automaticky odřádkuje. Při úspěchu funkce vrací nezápornou hodnotu. V případě, že se nepodařilo řetězec vytisknout (např. při přesměrování do souboru, pro který už není na disku dostatek místa), vrací funkce hodnotu EOF. Vstup řetězců char *gets(char buffer[]) char *gets(char *buffer) Opakem předchozí funkce je funkce gets, která čte znaky ze standardního vstupu a ukládá je do předaného řetězce buffer tak dlouho, dokud nenarazí na znak odřádkování '\n'. Ten už do řetězce buffer neuloží!!! Jako poslední vloží funkce gets znak EOS, a pak už jen vrátí ukazatel na buffer. Pokud by nebyl vložen žádný znak, funkce vrací nulový pointer NULL. Funkce gets je nebezpečná v tom, že předem nevíme kolik znaků se do proměnné buffer zapíše, a proto se může stát, že velikost bufferu nebude dostatečná.

Standardní I/O řetězců - 3 Příklad výstupu a vstupu řetězců Správné pochopení funkcí gets() a puts() si prověříme na příkladu. Ukážeme si jak použít návratovou hodnotu funkce gets() pro přístup k řetězci obsahující zadané vstupní informace. Zároveň budeme také testovat, zda při zpracování gets() nedošlo k chybě. /****************************** * gets.c ******************************/ #include <stdio.h> int main(void) { char str[80]; printf("zadejte retezec: "); if(gets(str)) /* kontrola zda nedoslo k chybe */ printf("nacteny retezec: %s", str); } return 0;

Formátovaný výstup int printf(char format[],...) Formátovaný I/O - 1 Velice užitečnou funkcí je v jazyce C funkce printf, která slouží k formátovanému výstupu textu. Tato funkce je nadefinována s proměnným počtem parametrů, nicméně jeden argument má vždy. Je jím řetězec format, který funkce vypíše na standardní výstup. printf("ahoj"); Přesnější by bylo říci, že vypíše všechny obyčejné znaky. Kromě těch může totiž řetězec obsahovat i tzv. popisovače (formátové specifikátory). To jsou znakové posloupnosti, začínající znakem '%', pomocí kterých můžeme jednoduše vypisovat hodnoty výrazů, které jsou funkci printf předány v jejích dodatečných parametrech. Chceme-li například vypsat hodnotu int proměnné i, bude zápis s použitím printf vypadat takhle: int a=26; printf("hodnota a je: %i\n", a); Detailní rozbor viz následující strana.

Formátovaný I/O - 2 int a=26; double b = 2.5874569; printf("hodnota a je: %i, vypocet vzorce je %f \n", a, -b/(2*a)); Provádění takto zapsaného voláni funkce printf vypadá následovně: Nejdříve se postupně čte řetězec format tak, že obyčejné znaky jsou hned posílány na výstup. Narazí-li se na znak popisovače '%',znamená to, že se na výstup pošle hodnota dalšího parametru printf (chceme-li vytisknout přímo znak procenta, musíme použít sekvenci '%%'). Podle znaku konverze (v našem případě je to znak 'i') se zjistí, jakého typu je hodnota parametru a podle toho je konvertována na řetězec, který se pošle na výstup. Pak se dále pokračuje ve čtení řetězce format a analogicky je zpracován druhý parametr (výsledek výpočtu + znak konverze 'f').dále zbývá ještě znak '\n', kterým odřádkujeme. Printf vrací počet skutečně zapsaných znaků, což je v našem případě 17. Počet dodatečných parametrů je libovolný, a tak můžeme jedním voláním printf vypsat hodnoty třeba desíti výrazů. Je ale nutné dodržet několik zásad. Předně musí počet parametrů (bez povinného parametru format) přesně odpovídat počtu popisovačů v řetězci format. Každému popisovači odpovídá jeden skutečný parametr, a to v pořadí jak jsou zapsány. První výskyt popisovače je tedy svázán s druhým skutečným parametrem printf, druhý výskyt s třetím parametrem, atd. Druhou věcí, na kterou je třeba si dát pozor, jsou typy uvedené v popisovači. Ty musí skutečně odpovídat typům parametrů funkce, jinak se program může začít chovat podivně a nemusí pak být snadné tuto chybu odhalit.

Formátovaný vstup int scanf(char format[],...) Formátovaný I/O - 3 Opakem printf je funkce scanf, díky které je možné v jednom kroku načíst hodnotu do více proměnných, za předpokladu, že známe formát vstupních dat. Vyzveme uživatele programu, aby zadal datum narození. Zároveň budeme chtít uložit vložená data do příslušných proměnných rok, mesic, den. int den, mesic, rok; printf("zadej datum narozeni ve formatu (dd.mm.rrrr):"); scanf("%d:%d:%d", &den, &mesic, &rok); Řetězec format může obsahovat tři typy znaků. Prvním jsou "bílé znaky", což je mezera, tabulátor '\t', nebo znak nového řádku '\n'. Narazí-li se při zpracovávání řetězce format na bílý znak, funkce na vstupu očekává libovolný počet za sebou jdoucích bílých znaků. Pokud se v řetězci format vyskytuje obyčejný znak, funkce předpokládá stejný znak na vstupu. Poslední, co může řetězec format obsahovat, je znak '%', který uvozuje sekvenci popisovače stejně jako u funkce printf s rozdílem, že načtená data se do proměnných, předaných parametry scanf, zapisují. Ve skutečnosti ale funkci nepředáváme přímo proměnné, ale pouze ukazatele na ně. Jinak by nebylo možné do proměnných nic uložit, protože by funkce pracovala pouze s jejich lokálními kopiemi. Výjimkou je typ pole, pro který se lokální kopie nevytváří nikdy.

Formátovaný I/O - 4 Formátový specifikátor (popisovač) Jestliže jsme se minule zaměřili na funkce printf a scanf, měli bychom se dnes trochu blíže podívat na formátový specifikátor. Jeho použití může být ještě mnohem složitější, než jsme si dosud uváděli. Kromě znaku konverze totiž může obsahovat i další znaky, které dále upřesňují formu výpisu. Pro funkci printf a jí příbuzné je formát popisovače takovýto: %[příznaky][šířka][.přesnost][modifikátor]konverze

Znaky konverze Formátovaný I/O - 5 Jak už bylo řečeno minule, znak konverze říká funkci printf (scanf), jakým způsobem interpretovat a konvertovat data získaná z parametrů funkce. Můžeme volit mezi těmito znaky konverze: d i u o x X f e E g G c s p desítkové číslo typu signed int desítkové číslo typu signed int desítkové číslo typu unsigned int osmičkové číslo typu unsigned int šestnáctkové číslo typu unsigned int s malými znaky písmen šestnáctkové číslo typu unsigned int s velkými znaky písmen desítkové číslo typu double v desetinném tvaru desítkové číslo typu double v semilogaritmickém tvaru s malým znakem 'e' desítkové číslo typu double v semilogaritmickém tvaru s velkým znakem 'E' desítkové číslo typu double, přičemž normální (f) nebo semilogaritmický tvar (e) se zvolí automaticky podle hodnoty argumentu a přesnosti (viz. dále). jako konverze g, ale pro semilogaritmický zápis zvolí konverzi E jeden znak řetězec ukazatel

Znaky konverze - příklad Formátovaný I/O - 6 int i=28; printf("%i %o %x", i, i, i); // vypíše hodnotu i v decimálním, octalovém a hexadecimálním tvaru // takto: 28 34 1c double d=3478.12589; printf("%f %e", d, d); // vypíše hodnotu d v normálním a semilogaritmickém tvaru // takto: 3478.125890 3.478126e+03

Formátovaný I/O - 7 Modifikátor Modifikátor je znak, který mění velikost typu konverze číselných parametrů následujícím způsobem. h l L konverze d, i, u, o, x zkracuje z typu int na short int konverze d, i, u, o, x zvětšuje z typu int na long int konverze f, e, g mění na long double short int i=28; long int l=8489821; long double d=3478.12589; printf("%hi %li %Lf", i, l, d); // jednoduše vytiskne hodnoty i, l, d;

Formátovaný I/O - 8 Přesnost Desítkové číslo určující * minimální počet cifer čísla pro konverze d, i, u, o, x a X. Před číslo tedy bude doplněn potřebný počet nul. * počet cifer za desetinnou tečkou pro konverze f, e, E. Je-li skutečný počet cifer větší, je číslo zaokrouhleno. V opačném případě jsou doplněny nuly. * maximální počet významových cifer. Tato hodnota také ovlivňuje použití výpisu f nebo e pro konverze g, G * maximální počet tištěných znaků pro konverzi s int i=28; double d=3478.12; char s[]="pokus"; printf("%.6i %.4f %.3s", i, d, s); //vytiskne hodnoty i, d a část řetězce s //takto: 000028 3478.1200 pok

Formátovaný I/O - 9 Šířka Je to číslo (nebo znak '*'), které určuje minimální počet vypisovaných znaků podle následujících pravidel: n Tiskne minimálně n znaků, přičemž za chybějící znaky doplňuje mezery zprava. 0n Tiskne minimálně n znaků, přičemž za chybějící znaky se doplňují nuly zleva. * Minimální počet tištěných znaků udává hodnota předchozího parametru (Ten ovšem slouží pouze tomuto účelu. Proto nemá odpovídající popisovač a jeho hodnota se tedy netiskne). int i=28, j=5; printf("%06i%6i %0*i\n", i, i, j, i); //třikrát vytiskne hodnotu i. Celý výpis bude vypadat //takto: 000028 28 00028

Formátovaný I/O - 10 Příznak Jako znak příznaku můžeme použít některý z následujících znaků. Je ale možné tyto znaky i vzájemně kombinovat. - Tištěná hodnota se zarovná doleva, místo implicitního nastavení doprava, pokud hodnota položky šířka nutí k doplnění mezer. + Vynutí tištění znaménka + nebo # Před osmičkové číslo doplní 0, před šestnáctkové 0x (0X) a vynutí použití desetinné tečky pro typ double i v případě, že by za ní nebyly již žádné číslice. int i=28; printf("%+i %#o %#x\n", i, i, i); printf("%+6i %#6o %#6x\n", i, i, i); // vytiskne hodnotu i v desitkovém, osmičkovém //a šestnáctkovém tvaru takto: +28 034 0x1c // pro každou hodnotu se navíc tiskne // minimálně 6 znaků. Chybějící znaky jsou // zleva doplněny mezerami. (zarovnání doprava) printf("%-+6i %-#6o %-#6x\n", i, i, i); // stejný výpis zarovnaný doleva

Formátovaný I/O - 11 Formátový specifikátor pro scanf %[*][šířka][modifikátor]konverze Znak '*' ve formátovém specifikátoru funkce scanf potlačí přiřazení načtené hodnoty. Vstupní data jsou tedy normálně přečtena, pouze nedojde k jejich uložení. Použijem-li znak '*', pak nemusí být (a není) hledán odpovídající parametr, do kterého by se hodnota uložila. Proto pozor, aby vám jeden parametr nepřebýval. Šířka v tomto případě definuje maximum počtu načítaných znaků. Je-li tedy načteno šířka znaků ze vstupu a přitom ještě není načteno celé vstupní pole, čtení je stejně ukončeno (Je ukončeno pouze načítání do příslušného parametru. Jinak se pokračuje normálně dál.) Modifikátor a konverze mají stejný význam jako pro printf. char str[6]=""; scanf("%*f %5s", str); puts(str); // ze vstupu přečte float číslo, které ale nikam neuloží. // Pak přečte maximálně 5 znaků a uloží je do řetězce str.