>> SPEAKER 1: Vessünk egy pillantást A CS50 könyvtárban,
pontosabban annak getInt funkcióját.
Itt van tényleges forrása kód getInt.
Vegyük észre, hogy ez nem túl hosszú, és a legtöbb képez while ciklus -
végtelen hurok, amely - hogy csak a értéket ad vissza, ha mi már
ütött, amit várt.
Sétáljunk át rajta.
>> Figyeljük meg, itt az első, a while ciklus kezdődik.
Figyeljük meg a következő, hogy van egy sor kódot hogy valóban hív getString,
és tárolja a visszatérési értéket egy változó, az úgynevezett vonal, string típusú.
Mi akkor nem egy kis józanság csekket.
Ha a vonal == null, akkor kíváncsian vissza INT_MAX.
>> Most kiderül, hogy INT_MAX egy speciális állandó kijelentette máshol
, amely meghatározza a lehető legnagyobb int, hogy képviseli a
program, mint ez.
Most már önkényesen úgy döntött, hogy visszatér INT_MAX mint őrszem értéke
fajta, az egyik, hogy már foglalt, mint ami azt jelenti, hogy hiba történt.
Tehát az árat fizetünk, természetesen, hogy getInt lehet nyilvánvalóan nem
valóban vissza több olyan nagy, mint INT_MAX, mert még ha akar,
hogy a visszatérési érték tényleg kell értelmezni a hívó fél -
bárki is a getInt -
mint egy hiba valamilyen.
>> Ezután észre, hogy én már kijelentette, egy int n, és a char c.
Ebben a következő kódsort, hívom a nevű függvényt sscanf, átadva
négy érvet.
vonal, amely a húr a felhasználó beírt "% i% c", amely egy olyan formátum
karakterlánc, várom a felhasználó lehet típusát, majd a címét
n, és azt a címet c.
Most sscanf célja az életben valóban beolvasni egy string keresi a
adott formátumban, hogy a programozó meghatározta, mint a második érv.
Ebben az esetben a% i van ott, mint% c.
Tehát ha sscanf találkozik int a felhasználói bemenet, hogy int lesznek tárolva
belsejében a nevezett n változó, mivel már feltéve, hogy a harmadik
érv, hogy sscanf címét n.
Ami azt jelenti, hogy sscanf valóban menni ott, és frissíti az értéket ott.
>> Most, ha a felhasználó beír valami több
mint egy vagy több számjegy -
Más szóval, egy char valamilyen -
hogy a második változó c, akinek a címe már átment sscanf, mint a negyedik
érv is lakott.
Most a fejjel ellenőrzése egy további karaktert a felhasználó
, hogy ha ő nem működik együtt, és típusok több, mint egy int,
képesek leszünk felismerni, hogy ebben a módon, mert abban az esetben, sscanf
megy vissza 2, jelezve, hogy mindkét helyőrző tele voltak
értékekkel.
De reméljük, hogy sscanf helyett értéke 1, ami azt jelenti, a felhasználó csak
nyújtott int.
>> Mit tegyünk, ha sscanf Valóban vissza 1?
Nos, azonnal szabad a vonal a felhasználó beírt, aztán
azonnal vissza n, miután ütött egy int.
Különben, ha a sscanf nem tér vissza 1, és a a felhasználó számára, ezért nem működött együtt,
még mindig szabad a vonal, de Most kéri a felhasználót, hogy újra.
És mivel mi még mindig benne, hogy a egyébként végtelen ciklusba, a folyamat
kezdődik újra, és talán újra, és talán megint, amíg a felhasználó ténylegesen
ad nekünk egy int.