2 00:00:00,000 --> 00:00:01,860 >> SPEAKER 1: Vessünk egy pillantást A CS50 könyvtárban, 3 00:00:01,860 --> 00:00:05,190 pontosabban annak getInt funkcióját. 4 00:00:05,190 --> 00:00:07,820 Itt van tényleges forrása kód getInt. 5 00:00:07,820 --> 00:00:12,050 Vegyük észre, hogy ez nem túl hosszú, és a legtöbb képez while ciklus - 6 00:00:12,050 --> 00:00:15,620 végtelen hurok, amely - hogy csak a értéket ad vissza, ha mi már 7 00:00:15,620 --> 00:00:17,400 ütött, amit várt. 8 00:00:17,400 --> 00:00:18,700 Sétáljunk át rajta. 9 00:00:18,700 --> 00:00:21,650 >> Figyeljük meg, itt az első, a while ciklus kezdődik. 10 00:00:21,650 --> 00:00:25,390 Figyeljük meg a következő, hogy van egy sor kódot hogy valóban hív getString, 11 00:00:25,390 --> 00:00:29,620 és tárolja a visszatérési értéket egy változó, az úgynevezett vonal, string típusú. 12 00:00:29,620 --> 00:00:31,210 Mi akkor nem egy kis józanság csekket. 13 00:00:31,210 --> 00:00:35,770 Ha a vonal == null, akkor kíváncsian vissza INT_MAX. 14 00:00:35,770 --> 00:00:40,140 >> Most kiderül, hogy INT_MAX egy speciális állandó kijelentette máshol 15 00:00:40,140 --> 00:00:44,030 , amely meghatározza a lehető legnagyobb int, hogy képviseli a 16 00:00:44,030 --> 00:00:45,160 program, mint ez. 17 00:00:45,160 --> 00:00:49,430 Most már önkényesen úgy döntött, hogy visszatér INT_MAX mint őrszem értéke 18 00:00:49,430 --> 00:00:53,120 fajta, az egyik, hogy már foglalt, mint ami azt jelenti, hogy hiba történt. 19 00:00:53,120 --> 00:00:56,230 Tehát az árat fizetünk, természetesen, hogy getInt lehet nyilvánvalóan nem 20 00:00:56,230 --> 00:01:01,440 valóban vissza több olyan nagy, mint INT_MAX, mert még ha akar, 21 00:01:01,440 --> 00:01:04,730 hogy a visszatérési érték tényleg kell értelmezni a hívó fél - 22 00:01:04,730 --> 00:01:06,260 bárki is a getInt - 23 00:01:06,260 --> 00:01:09,340 mint egy hiba valamilyen. 24 00:01:09,340 --> 00:01:13,840 >> Ezután észre, hogy én már kijelentette, egy int n, és a char c. 25 00:01:13,840 --> 00:01:18,030 Ebben a következő kódsort, hívom a nevű függvényt sscanf, átadva 26 00:01:18,030 --> 00:01:18,970 négy érvet. 27 00:01:18,970 --> 00:01:25,110 vonal, amely a húr a felhasználó beírt "% i% c", amely egy olyan formátum 28 00:01:25,110 --> 00:01:28,850 karakterlánc, várom a felhasználó lehet típusát, majd a címét 29 00:01:28,850 --> 00:01:30,920 n, és azt a címet c. 30 00:01:30,920 --> 00:01:34,860 Most sscanf célja az életben valóban beolvasni egy string keresi a 31 00:01:34,860 --> 00:01:38,700 adott formátumban, hogy a programozó meghatározta, mint a második érv. 32 00:01:38,700 --> 00:01:42,020 Ebben az esetben a% i van ott, mint% c. 33 00:01:42,020 --> 00:01:46,700 Tehát ha sscanf találkozik int a felhasználói bemenet, hogy int lesznek tárolva 34 00:01:46,700 --> 00:01:50,270 belsejében a nevezett n változó, mivel már feltéve, hogy a harmadik 35 00:01:50,270 --> 00:01:52,810 érv, hogy sscanf címét n. 36 00:01:52,810 --> 00:01:56,870 Ami azt jelenti, hogy sscanf valóban menni ott, és frissíti az értéket ott. 37 00:01:56,870 --> 00:01:59,990 >> Most, ha a felhasználó beír valami több 38 00:01:59,990 --> 00:02:01,220 mint egy vagy több számjegy - 39 00:02:01,220 --> 00:02:03,570 Más szóval, egy char valamilyen - 40 00:02:03,570 --> 00:02:07,940 hogy a második változó c, akinek a címe már átment sscanf, mint a negyedik 41 00:02:07,940 --> 00:02:10,560 érv is lakott. 42 00:02:10,560 --> 00:02:14,220 Most a fejjel ellenőrzése egy további karaktert a felhasználó 43 00:02:14,220 --> 00:02:17,360 , hogy ha ő nem működik együtt, és típusok több, mint egy int, 44 00:02:17,360 --> 00:02:20,530 képesek leszünk felismerni, hogy ebben a módon, mert abban az esetben, sscanf 45 00:02:20,530 --> 00:02:24,860 megy vissza 2, jelezve, hogy mindkét helyőrző tele voltak 46 00:02:24,860 --> 00:02:25,600 értékekkel. 47 00:02:25,600 --> 00:02:30,360 De reméljük, hogy sscanf helyett értéke 1, ami azt jelenti, a felhasználó csak 48 00:02:30,360 --> 00:02:31,630 nyújtott int. 49 00:02:31,630 --> 00:02:34,480 >> Mit tegyünk, ha sscanf Valóban vissza 1? 50 00:02:34,480 --> 00:02:39,150 Nos, azonnal szabad a vonal a felhasználó beírt, aztán 51 00:02:39,150 --> 00:02:42,670 azonnal vissza n, miután ütött egy int. 52 00:02:42,670 --> 00:02:47,180 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, 53 00:02:47,180 --> 00:02:51,470 még mindig szabad a vonal, de Most kéri a felhasználót, hogy újra. 54 00:02:51,470 --> 00:02:55,390 És mivel mi még mindig benne, hogy a egyébként végtelen ciklusba, a folyamat 55 00:02:55,390 --> 00:03:00,190 kezdődik újra, és talán újra, és talán megint, amíg a felhasználó ténylegesen 56 00:03:00,190 --> 00:03:01,500 ad nekünk egy int. 57 00:03:01,500 --> 00:03:21,490