>> SPEAKER 1: Poďme sa pozrieť v knižnici CS50,
konkrétne jeho vezmi_int funkcie.
Tu máme skutočný zdroj Kód pre vezmi_int.
A všimnite si, že to nie je príliš dlhá, a väčšina z nich predstavuje while -
nekonečnej slučky na to - že iba vráti hodnotu, akonáhle máme vlastne
dostal to, čo sme očakávali.
Poďme si prejsť to.
>> Všimnite si, až tú prvú, zatiaľ čo začína slučka.
Všimnite si, že máme nasledujúci riadok kódu že vlastne volá GetString,
a ukladá návratovú hodnotu v variabilný, volané linka, typu reťazec.
Potom sme to trochu kontroly zdravý rozum.
Ak je linka == null, potom sa zvedavo návrat INT_MAX.
>> Teraz sa ukazuje, že INT_MAX je špeciálny konštanta deklarovaná inde
, Ktorý určuje najväčší možný pravý, ktorý môže predstavovať v
program, ako je tento.
Teraz sme svojvoľne rozhodli k návratu INT_MAX Sentinel hodnotu
druhy, ten, ktorý sme rezervovaný ako čo znamená, došlo k chybe.
Takže cena, ktorú platíme, je samozrejme že vezmi_int môže zrejme nie je
vlastne vracia číslo tak veľké, ako INT_MAX, pretože aj keď sa chce,
že návratová hodnota by mala v skutočnosti byť interpretovaný volajúceho -
kto ich používa vezmi_int -
ako chybu nejakého druhu.
>> Ďalej si všimnite, že som vyhlásil, int n a char c
V tomto ďalšom riadku kódu, hovorím funkcie tzv sscanf, odovzdaním
štyri argumenty.
linka, čo je reťazec užívateľa zadal, "% i% c", čo je formát
Reťazec, ktorý som očakával, môže užívateľ typ, nasledovaný adresou
n, a adresa c
Teraz sscanf je zmyslom života je skutočne skenovanie reťazec hľadá
najmä vo formáte, ktorý programátor je uvedené ako ten druhý argument.
V tomto prípade, aj% je v tam, ako je% c
Takže ak sscanf narazí na int vstup užívateľa, bude, že int je uložený
v premennej s názvom n, pretože sme poskytli ako tretí
argument sscanf adresu n.
Čo znamená, že sscanf skutočne môže ísť tam, a aktualizujte hodnotu v ňom.
>> Teraz, v prípade, že používateľ zadá v niečo viac
ako jednej alebo viacerých číslic -
inými slovami, char nejakého druhu -
že druhá premenná c, ktorého adresa sme prešli do sscanf ako štvrtý
Argument sa tiež naplnená.
Teraz nahor kontroly pre ďalší postava z užívateľov je
že ak on alebo ona nespolupracuje, a druhy vo viac než len int,
budeme môcť zistiť, že v tomto spôsobom, pretože v tomto prípade, sscanf
sa chystá vrátiť 2, znamenať, že obaja zástupné symboly boli vyplnené
s hodnotami.
Ale my namiesto toho dúfa, že sscanf vráti 1, čo znamená, že iba užívateľ
za predpokladu, int.
>> Čo budeme robiť, keď sscanf naozaj vracia 1?
No, sme okamžite uvoľniť linku, ktorá užívateľ zadal, a potom sme
okamžite vrátiť n, ktoré majú dostal int.
Inak, ak sscanf nevráti 1, a Užívateľ tak nespolupracoval,
stále voľné čiaru, ale my Teraz vyzve užívateľa na zadanie zopakovať.
A pretože sme stále vo vnútri, ktorý inak nekonečnej slučky, proces
začne znova, a možno znovu, a možno opäť, kým používateľ skutočne
poskytuje nám int.