2 00:00:00,000 --> 00:00:01,860 >> SPEAKER 1: Võtame pilk kell CS50 raamatukogu 3 00:00:01,860 --> 00:00:05,190 konkreetselt selle GetInt funktsioon. 4 00:00:05,190 --> 00:00:07,820 Siin on meil tegelik allikas kood GetInt. 5 00:00:07,820 --> 00:00:12,050 Ja teate, et see ei ole liiga pikk, ja enamus sellest moodustab samas loop - 6 00:00:12,050 --> 00:00:15,620 lõputu silmuse sel - et ainult tagastab väärtuse kui oleme tegelikult 7 00:00:15,620 --> 00:00:17,400 saanud, mida me ootasime. 8 00:00:17,400 --> 00:00:18,700 Vaatame seda. 9 00:00:18,700 --> 00:00:21,650 >> Pange tähele, siin esimene, samas loop algab. 10 00:00:21,650 --> 00:00:25,390 Pange tähele, järgmine, et meil on rida koodi mis tegelikult nõuab getString, 11 00:00:25,390 --> 00:00:29,620 ja salvestab tagastamise väärtus muutuja, nimetatakse rida, string-tüüpi. 12 00:00:29,620 --> 00:00:31,210 Siis teha natuke meelerahu kontrolli. 13 00:00:31,210 --> 00:00:35,770 Kui rida == null, siis me uudishimulikult tagasi INT_MAX. 14 00:00:35,770 --> 00:00:40,140 >> Nüüd selgub, et INT_MAX on eriline pidev deklareeritud mujal 15 00:00:40,140 --> 00:00:44,030 mis määrab suurima võimaliku int et saate esindavad 16 00:00:44,030 --> 00:00:45,160 Programmi niimoodi. 17 00:00:45,160 --> 00:00:49,430 Nüüd oleme omavoliliselt otsustas tagasi INT_MAX kui valvur väärtus 18 00:00:49,430 --> 00:00:53,120 kehvasti, üks, et me oleme kaitstud kui tähendab viga. 19 00:00:53,120 --> 00:00:56,230 Seega hind, mida me maksma, on muidugi et GetInt ei ole ilmselt 20 00:00:56,230 --> 00:01:01,440 tegelikult tagastab arvu nii suur kui INT_MAX, sest isegi kui ta tahab, 21 00:01:01,440 --> 00:01:04,730 et tagastatav väärtus peaks tõesti tõlgendada helistaja - 22 00:01:04,730 --> 00:01:06,260 kes kasutab GetInt - 23 00:01:06,260 --> 00:01:09,340 kui viga mingisugune. 24 00:01:09,340 --> 00:01:13,840 >> Järgmiseks teate, et ma olen kuulutanud int n ja char c. 25 00:01:13,840 --> 00:01:18,030 Selle kõrval koodirida kutsun funktsiooni nimetatakse sscanf, läbides 26 00:01:18,030 --> 00:01:18,970 neli argumenti. 27 00:01:18,970 --> 00:01:25,110 line, mis on string kasutaja trükitud "% i% c", mis on vormingus 28 00:01:25,110 --> 00:01:28,850 string et ma ootan kasutaja võib , sellele järgneb aadress 29 00:01:28,850 --> 00:01:30,920 n ja aadress c. 30 00:01:30,920 --> 00:01:34,860 Nüüd sscanf tema eesmärk elus on tõepoolest skannida string otsin 31 00:01:34,860 --> 00:01:38,700 kindla vormi, et programmeerija on määranud, et teine ​​argument. 32 00:01:38,700 --> 00:01:42,020 Sel juhul% i on seal, nagu on% c. 33 00:01:42,020 --> 00:01:46,700 Nii et kui sscanf kohtab int sisse kasutaja sisend, mis int salvestatakse 34 00:01:46,700 --> 00:01:50,270 sees muutuja nimetatakse n, sest oleme andnud kui kolmanda 35 00:01:50,270 --> 00:01:52,810 argument, et sscanf aadress n. 36 00:01:52,810 --> 00:01:56,870 Mis tähendab, et sscanf võib tõesti minna seal, ning uuendage väärtust selles. 37 00:01:56,870 --> 00:01:59,990 >> Nüüd, juhul kui kasutaja liigid milleski 38 00:01:59,990 --> 00:02:01,220 kui ühe või mitme numbri - 39 00:02:01,220 --> 00:02:03,570 teisisõnu paalia mingisugune - 40 00:02:03,570 --> 00:02:07,940 et teine ​​muutuja c, mille aadress meil läks sscanf oma neljanda 41 00:02:07,940 --> 00:02:10,560 argument on ka asustatud. 42 00:02:10,560 --> 00:02:14,220 Nüüd Tagurpidi kontrollimine täiendavat iseloomu kasutaja on 43 00:02:14,220 --> 00:02:17,360 et kui ta ei tee koostööd ja liiki rohkem kui lihtsalt keskmine, 44 00:02:17,360 --> 00:02:20,530 me oleme võimelised avastama selles viisil, kuna sel juhul sscanf 45 00:02:20,530 --> 00:02:24,860 läheb tagasi 2, mis tähendab, et mõlemad kohahoidjad täitusid 46 00:02:24,860 --> 00:02:25,600 väärtustega. 47 00:02:25,600 --> 00:02:30,360 Aga me loodame, et sscanf asemel tagastab 1, mis tähendab, et kasutaja ainult 48 00:02:30,360 --> 00:02:31,630 tingimusel int. 49 00:02:31,630 --> 00:02:34,480 >> Mida me teeme, kui sscanf tõepoolest naaseb 1? 50 00:02:34,480 --> 00:02:39,150 Noh, me kohe vaba rida, kasutaja kirjutada, ja siis me 51 00:02:39,150 --> 00:02:42,670 kohe tagasi n, millel saanud int. 52 00:02:42,670 --> 00:02:47,180 Sest kui sscanf ei tagasta 1, ja kasutaja seega ei teinud koostööd, 53 00:02:47,180 --> 00:02:51,470 me veel vaba, kuid meil on Nüüd palub kasutajal uuesti. 54 00:02:51,470 --> 00:02:55,390 Ja kuna me oleme ikka veel sees, et muidu lõputu silmuse, protsessi 55 00:02:55,390 --> 00:03:00,190 algab uuesti ja võibolla uuesti ja võibolla uuesti, kuni kasutaja tegelikult 56 00:03:00,190 --> 00:03:01,500 annab meile int. 57 00:03:01,500 --> 00:03:21,490