Konstanty se nemění. Jsou neměnné. Život funguje jinak a vaše testovací programy by také neměly být statické. Pokud se učíte C, pevně zakódovaná čísla jako 5 a 7 se rychle omrzí. Potřebujete interakci. Chcete, aby počítač počkal, až něco napíšete.
Do obrázku vstoupí scanf.
Toto je druhá část příběhu začínající printf. Zatímco printf tiskne data na obrazovku, scanf čte data z klávesnice. Není to nejrobustnější nástroj ve standardní knihovně C, ale pro jednoduchý vstup z konzole zvládne práci bez nutnosti zahrnout závislosti třetích stran.
Zde je návod, jak změnit statický skript na dynamický program.
Kód
Zkopírujte to. Spusťte to. Na výzvu programu zadejte čísla.
Analýza scanf
Kouzlo se odehrává v těchto dvou řádcích:
scanf("%d", &a);
scanf: Název funkce. Zkratka pro vstup ve formátu skenování."%d": Specifikátor formátu. Říkáscanf, aby očekával celé číslo. Pokud byste četli plovoucí číslo, použili byste"%f".&a: Toto je kritická část. Nepředáváte hodnotu do proměnnéa. Předáváte adresu proměnnéa.
Představte si to takto: printf potřebuje vědět, co je uvnitř proměnné. scanf potřebuje vědět, kam má data umístit. Operátor & poskytuje tuto adresu v paměti. Chybí ampersand a program se zhroutí. Nebo ještě hůř, dostanete varování, které vypadá jako nesmysl a proměnnou, která se nezmění.
Jak to funguje v praxi
Když spustíte program:
- Terminál zobrazí zprávu:
Zadejte první hodnotu: - Kurzor bliká. Program čeká. V tomto stavu zůstanete, dokud něco nenapíšete a nestisknete Enter.
- Zadáte „5“. Stiskněte Enter.
scanfpřevezme tuto hodnotu5, převede řetězec znaků “5” na celočíselnou hodnotu 5 a uloží ji na adresu paměti&a.- Stejný cyklus nastane pro druhou hodnotu.
Poté se provede matematická operace. “c = a + b;”. Jednoduché doplnění.
Nakonec printf vytiskne výsledek. Všimněte si formátovacího řádku: printf("%d + %d = %d\n", a, b, c);. Dosazujete proměnné zpět do řetězce. Tak vzniká jasný závěr.
Proč je to důležité?
Většina moderních aplikací nepoužívá vstup z konzole. Příkazy nezadáváte do černého okna webového prohlížeče nebo editoru fotografií. Ale pochopení tohoto toku je zásadní.
Vstup -> Zpracování -> Výstup.
Toto je základní cyklus jakéhokoli softwaru.
Jak scanf zpracovává adresy paměti
Když spustíte tento kód, rozdíl mezi úspěchem a pádem je určen jedním znakem. Konkrétně ampersand (& ) před proměnnými a a b.
Toto je operátor adresy. Říká scanf přesně, kam v paměti mají být přijatá vstupní data zapsána. Bez něj scanf nezná umístění proměnné. Obdrží pouze hodnotu, která je nepoužitelná pro ukládání dat zpět do programu. Pokud tento příkaz vynecháte, program se buď nezkompiluje, nebo se ihned po spuštění zhroutí. Tento operátor je vyžadován pro typy char, int, float a struct.
Zkuste to odstranit. Podívejte se, co se stane. Toto je bolestivá, ale nezbytná lekce o tom, jak C spravuje paměť.
Mastering výstupu pomocí printf
printf je vaše okno pro interakci uživatele. Odesílá data na standardní výstup. Nejjednodušší verze je velmi přehledná.
Tím se vytiskne slovo Ahoj. Nic víc. Žádný posun řádku. Kurzor zůstane bezprostředně za písmenem ‘o’.
Přidejte znak nového řádku.
Výstup se nyní přesune na další řádek. \n je znak návratu vozíku. Je vyžadován pro čitelný výstup konzoly.
Proměnné mění pravidla hry. Nemůžete jen vytisknout název proměnné jako v Pythonu nebo JavaScriptu. Musíte použít zástupný symbol.
%d je zástupný symbol. Za běhu je nahrazena celočíselnou hodnotou proměnné b. Takto C zpracovává dynamický výstup.
Můžete kombinovat text a proměnné. Jedním nemotorným způsobem je řetězit více tiskových volání.
Funguje to. Ale je to také těžkopádné. Čistším přístupem je vložit vše na jeden řádek.
Funguje také více hodnot. Jen se ujistěte, že zástupné symboly odpovídají argumentům v pořadí.
Na pořadí záleží. První %d odpovídá a. Druhý je “b”. Třetí je “c”. Pokud je vyměníte, matematika bude špatná. Pokud jeden vynecháte, chování programu nebude definováno. Počet a typy specifikátorů ve formátovacím řetězci musí přesně odpovídat parametrům.
Typově specifické výplně
C je striktní ohledně datových typů. Nemůžete použít stejný zástupný symbol pro všechno. Datový typ musíte shodovat se specifikátorem formátu.
- Použijte %d pro int (celočíselné hodnoty).
- Použijte %f pro float (čísla s pohyblivou řádovou čárkou).
- Použijte %c pro znak (jednotlivé znaky).
- Použijte %s pro řetězce znaků (pole znaků).
Pokud použijete %d pro float, dostanete nesmyslný výstup. Pokud pro int použijete %s, program s největší pravděpodobností spadne. Přesnost zde není volitelná.
Další informace o těchto specifikátorech naleznete v referenčních materiálech UNIX. Zadejte příkaz man 3 printf. Ostatní kompilátory poskytují podobnou dokumentaci. Stojí za přečtení.
Běžné chyby, kterým je třeba se vyhnout
Kompilátory C jsou užitečné, ale nejsou čtenáři myšlenek. Budete dělat chyby. Zde je návod, jak se vyhnout těm nejběžnějším.
- Velká a malá písmena : C rozlišuje velká a malá písmena.
PrintfneboPRINTFzpůsobí chybu. Správný pravopis jeprintf. Totéž platí pro názvy proměnných a volání funkcí. - Chybí operátor adresy : Častou chybou je zapomenutí vložit
&doscanf. To způsobí okamžité selhání za běhu. U primitivních typů jej vždy specifikujte. - Nesoulad parametrů : Příliš mnoho nebo příliš málo argumentů v
printfneboscanfzpůsobuje chyby. Formátovací řetězec definuje strukturu. Následujte to. - Nedeklarované proměnné : Před použitím musíte proměnnou deklarovat. C automaticky neodvozuje typy. Před tiskem “a” definujete
int a;.
Tyto chyby se opakují. Ale je snadné je opravit, jakmile rozpoznáte vzor.





























