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.