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.