>> SPEAKER 1: Võtame pilk kell CS50 raamatukogu
konkreetselt selle GetInt funktsioon.
Siin on meil tegelik allikas kood GetInt.
Ja teate, et see ei ole liiga pikk, ja enamus sellest moodustab samas loop -
lõputu silmuse sel - et ainult tagastab väärtuse kui oleme tegelikult
saanud, mida me ootasime.
Vaatame seda.
>> Pange tähele, siin esimene, samas loop algab.
Pange tähele, järgmine, et meil on rida koodi mis tegelikult nõuab getString,
ja salvestab tagastamise väärtus muutuja, nimetatakse rida, string-tüüpi.
Siis teha natuke meelerahu kontrolli.
Kui rida == null, siis me uudishimulikult tagasi INT_MAX.
>> Nüüd selgub, et INT_MAX on eriline pidev deklareeritud mujal
mis määrab suurima võimaliku int et saate esindavad
Programmi niimoodi.
Nüüd oleme omavoliliselt otsustas tagasi INT_MAX kui valvur väärtus
kehvasti, üks, et me oleme kaitstud kui tähendab viga.
Seega hind, mida me maksma, on muidugi et GetInt ei ole ilmselt
tegelikult tagastab arvu nii suur kui INT_MAX, sest isegi kui ta tahab,
et tagastatav väärtus peaks tõesti tõlgendada helistaja -
kes kasutab GetInt -
kui viga mingisugune.
>> Järgmiseks teate, et ma olen kuulutanud int n ja char c.
Selle kõrval koodirida kutsun funktsiooni nimetatakse sscanf, läbides
neli argumenti.
line, mis on string kasutaja trükitud "% i% c", mis on vormingus
string et ma ootan kasutaja võib , sellele järgneb aadress
n ja aadress c.
Nüüd sscanf tema eesmärk elus on tõepoolest skannida string otsin
kindla vormi, et programmeerija on määranud, et teine ​​argument.
Sel juhul% i on seal, nagu on% c.
Nii et kui sscanf kohtab int sisse kasutaja sisend, mis int salvestatakse
sees muutuja nimetatakse n, sest oleme andnud kui kolmanda
argument, et sscanf aadress n.
Mis tähendab, et sscanf võib tõesti minna seal, ning uuendage väärtust selles.
>> Nüüd, juhul kui kasutaja liigid milleski
kui ühe või mitme numbri -
teisisõnu paalia mingisugune -
et teine ​​muutuja c, mille aadress meil läks sscanf oma neljanda
argument on ka asustatud.
Nüüd Tagurpidi kontrollimine täiendavat iseloomu kasutaja on
et kui ta ei tee koostööd ja liiki rohkem kui lihtsalt keskmine,
me oleme võimelised avastama selles viisil, kuna sel juhul sscanf
läheb tagasi 2, mis tähendab, et mõlemad kohahoidjad täitusid
väärtustega.
Aga me loodame, et sscanf asemel tagastab 1, mis tähendab, et kasutaja ainult
tingimusel int.
>> Mida me teeme, kui sscanf tõepoolest naaseb 1?
Noh, me kohe vaba rida, kasutaja kirjutada, ja siis me
kohe tagasi n, millel saanud int.
Sest kui sscanf ei tagasta 1, ja kasutaja seega ei teinud koostööd,
me veel vaba, kuid meil on Nüüd palub kasutajal uuesti.
Ja kuna me oleme ikka veel sees, et muidu lõputu silmuse, protsessi
algab uuesti ja võibolla uuesti ja võibolla uuesti, kuni kasutaja tegelikult
annab meile int.