Hardcoding je na první pokus v pořádku, ale skutečný software musí reagovat na to, co uživatelé zadají. Původní fragment kódu používal konstanty. Byl statický. Předvídatelný. Nudný.
Aby byl program užitečný, musí přijímat vstup od uživatele, když je program spuštěn. K tomu slouží funkce scanf. Je opakem printf. Zatímco printf tiskne data na obrazovku, scanf je čte z klávesnice.
Níže je uvedeno, jak zacházet se základním celočíselným vstupem v C.
Zachyťte uživatelský vstup
Nemůžete jen deklarovat proměnnou a očekávat, že magicky přijme data uživatele. Tyto údaje si musíte vyžádat. Také musíte počítači sdělit, kde mají být tato data uložena. To je důvod, proč scanf vyžaduje ukazatel (znak & ). Pokud zapomenete vložit ampersand, program může selhat nebo zapsat do paměti nesmysly. Vždy jej používejte pro primitivní typy jako int.
Zvažte aktualizovanou logiku:
- Deklarujte proměnné pro uložení vstupních dat a výsledku.
- Zobrazte výzvu pro uživatele, aby věděl, co má zadat.
- Použijte
scanfse správným specifikátorem formátu (%dpro celá čísla). - Proveďte výpočet s použitím uložených hodnot.
- **Výsledek ** zahrnutím vstupních proměnných do výstupního řádku.
Proč je to důležité?
Přechod od konstant k proměnným vše změní. Program se již neopakuje jako porouchaná deska. Ona se přizpůsobí. Můžete to spustit jednou s čísly 5 a 7. Můžete to spustit znovu s čísly 100 a 200. Logika zůstává stejná; změny dat.
Je základem interaktivních aplikací příkazového řádku (CLI). Než budete moci vytvářet složité nástroje, musíte pochopit, jak bezpečně dostat data do proměnných.
Klíčové věci
scanfvyžaduje ukazatel: Vždy používejte operátor adresy (&) před názvem proměnné vscanf.- Specifikátory formátu se musí shodovat: Pokud čtete
int, musíte použít%d. Použití%fna celé číslo bude mít za následek nedefinované chování. - Výzvy jsou kritické: Bez jasné výzvy, jako je „Zadejte první hodnotu:“, zůstane uživatel zírat na blikající kurzor a přemýšlí, zda se program zablokoval nebo ne. Nemrzlo. Jen čeká na vstup.
Kód funguje. Je to jednoduché. Ale je funkční. Přešli jste ze statického skriptu na dynamický nástroj. Dalším krokem je obvykle zpracování chyb. Co se stane, když uživatel místo čísla zadá „ahoj“? scanf tiše selže a vaše proměnné zůstanou neinicializované. To je problém na další den.
Mezitím máte program, který skutečně poslouchá.
Vstup, výstup a pravidla interakce
Provedli jste změny. Nyní zkompilujte kód. Spusťte to. Pokud se program zhroutí, nepropadejte panice. S největší pravděpodobností jste přehlédli nějaký malý detail syntaxe.
Vezměte funkci scanf. Používá formátovací řetězce podobné printf. Pokud potřebujete podrobnou dokumentaci, zadejte man scanf. Všimněte si však ampersandu (& ) před proměnnými jako a a b.
Toto je operátor adresy.
Vrací paměťovou adresu proměnné. Nyní se to může zdát matoucí. Ukazatele objasní tento problém později. Ale zatím se řiďte pravidlem: pokud používáte scanf pro char, int nebo float, potřebujete &. Vyžaduje se také u konstrukcí.
Vynechat &? Zobrazí se chyba runtime. Toto pravidlo záměrně porušte. Podívejte se, co se stane. Jedině tak si zapamatujete, proč je to důležité.
Přesné formátování výstupu
Podívejme se na printf. Začněme něčím jednoduchým.
printf("Ahoj");
Tento příkaz odešle slovo “Ahoj” na standardní výstup. Nic víc. Žádný posun řádku. Kurzor zůstane bezprostředně za písmenem “o”.
Nyní přidáme posun řádku.
printf("Dobrý den\n");
\n způsobí návrat vozíku. Výstup končí na vlastním řádku. To je standardní očekávání pro čistě konzolový výstup.
Proměnné vyžadují zástupné symboly. Chcete-li vytisknout hodnotu b :
`printf(“%d”, b);”.
%d je zástupný symbol. Když je kód spuštěn, printf jej nahradí skutečnou celočíselnou hodnotou b.
Do vět můžete vkládat významy. Můžete použít více hovorů za sebou:
printf("Teplota je "); printf("%d", b); printf("stupně\n");
Ale je to únavné. Čistším přístupem je zkombinovat je do jednoho formátovacího řetězce:
printf("Teplota je %d stupňů\n", b);
Můžete také zobrazit více hodnot.
printf("%d + %d = %d\n", a, b, c);
Tady je past. Počet zástupných symbolů ve formátovacím řetězci musí přesně odpovídat počtu proměnných, které za ním následují. Přesně.
Pokud máte tři značky %d, potřebujete tři parametry. Typy se musí shodovat. Objednávka se musí shodovat. Porušíte tato pravidla? Výstupem bude odpad. Nebo v horším případě dojde k selhání programu.
Odpovídající typy zástupným symbolům
printf zvládá většinu standardních typů C. Stačí použít správný kód.
- int používá
%d - float používá
%f - char používá
%c - řetězce znaků používají
%s
Pro hlubší pochopení se podívejte na man 3 printf v systému UNIX. Váš konkrétní kompilátor má s největší pravděpodobností příručku nebo soubor nápovědy týkající se okrajových případů.
Časté chyby
Nováčci o tyto body neustále klopýtají.
Případ postavy je přísný. printf se píše malými písmeny. Printf nebo PRINTF způsobí chybu.
scanf vyžaduje operátor adresy (& ). Zapomeňte na to a program váš vstup neuloží správně.
Rozhodující je počet parametrů. Příliš mnoho nebo příliš málo argumentů v printf nebo scanf má za následek nedefinované chování.
Prohlášení musí předcházet použití. Nemůžete použít název proměnné v C, aniž byste jej nejprve deklarovali. Kompilátor musí předem znát strukturu a typ paměti.
Kompilátor nic netuší. Vyžaduje důsledné dodržování pravidel.






















