>> SPEAKER 1: Pojďme se podívat v knihovně CS50,
konkrétně jeho vezmi_int funkce.
Zde máme skutečný zdroj Kód pro vezmi_int.
A všimněte si, že to není příliš dlouhá, a většina z nich představuje while -
nekonečné smyčky na to - že pouze vrátí hodnotu, jakmile máme vlastně
dostal to, co jsme očekávali.
Pojďme si projít to.
>> Všimněte si, až tu první, zatímco začíná smyčka.
Všimněte si, že máme následující řádek kódu že vlastně volá GetString,
a ukládá návratovou hodnotu v variabilní, volaná linka, typu řetězec.
Pak jsme to trochu kontroly zdravý rozum.
Pokud je linka == null, pak se zvědavě návrat INT_MAX.
>> Nyní se ukazuje, že INT_MAX je speciální konstanta deklarována jinde
, který určuje největší možný pravý, který může představovat v
program, jako je tento.
Teď jsme svévolně rozhodli k návratu INT_MAX Sentinel hodnotu
druhy, ten, který jsme rezervovaný jako což znamená, došlo k chybě.
Takže cena, kterou platíme, je samozřejmě že vezmi_int může zřejmě není
vlastně vrací číslo tak velké, jako INT_MAX, protože i když se chce,
že návratová hodnota by měla ve skutečnosti být interpretován volajícího -
kdo je používá vezmi_int -
jako chybu nějakého druhu.
>> Dále si všimněte, že jsem prohlásil, int n a char c.
V tomto dalším řádku kódu, říkám funkce tzv. sscanf, předáním
čtyři argumenty.
linka, což je řetězec uživatele zadal, "% i% c", což je formát
Řetězec, který jsem očekával, může uživatel typ, následovaný adresou
n, a adresa c.
Nyní sscanf je smyslem života je skutečně skenování řetězec hledá
zejména ve formátu, který programátor je uvedeno jako ten druhý argument.
V tomto případě, i% je v tam, jak je% c.
Takže pokud sscanf narazí na int vstup uživatele, bude, že int je uložen
v proměnné s názvem n, protože jsme poskytli jako třetí
argument sscanf adresu n..
Což znamená, že sscanf skutečně může jít tam, a aktualizujte hodnotu v něm.
>> Nyní, v případě, že uživatel zadá v něco víc
než jedné nebo více číslic -
jinými slovy, char nějakého druhu -
že druhá proměnná c, jehož adresa jsme prošli do sscanf jako čtvrtý
Argument se také naplněna.
Nyní vzhůru kontroly pro další postava z uživatele je
že pokud on nebo ona nespolupracuje, a druhy ve více než jen int,
budeme moci zjistit, že v tomto způsobem, protože v tomto případě, sscanf
se chystá vrátit 2, znamenat, že oba zástupné symboly byly vyplněny
s hodnotami.
Ale my místo toho doufá, že sscanf vrátí 1, což znamená, že pouze uživatel
za předpokladu, int.
>> Co budeme dělat, když sscanf opravdu vrací 1?
No, jsme okamžitě uvolnit linku, která uživatel zadal, a pak jsme
okamžitě vrátit n, které mají dostal int.
Jinak, pokud sscanf nevrátí 1, a Uživatel tak nespolupracoval,
stále volné čáru, ale my Nyní vyzve uživatele k zadání zopakovat.
A protože jsme stále uvnitř, který jinak nekonečné smyčky, proces
začne znovu, a možná znovu, a možná opět, dokud uživatel skutečně
poskytuje nám int.