2 00:00:00,000 --> 00:00:01,860 >> Spreker 1: Kom ons neem 'n blik by die CS50 biblioteek, 3 00:00:01,860 --> 00:00:05,190 spesifiek sy getint funksie. 4 00:00:05,190 --> 00:00:07,820 Hier het ons die werklike bron kode vir getint. 5 00:00:07,820 --> 00:00:12,050 En sien dat dit nie te lank, en die meeste van dit 'n lus - 6 00:00:12,050 --> 00:00:15,620 'n oneindige lus aan dat - dat slegs terug 'n waarde sodra ons het eintlik 7 00:00:15,620 --> 00:00:17,400 gekry wat ons verwag het. 8 00:00:17,400 --> 00:00:18,700 Kom ons loop deur dit. 9 00:00:18,700 --> 00:00:21,650 >> Let hier die eerste, die while lus begin. 10 00:00:21,650 --> 00:00:25,390 Let volgende dat ons 'n reĂŤl van die kode wat eintlik 'n beroep GetString, 11 00:00:25,390 --> 00:00:29,620 en slaan die terugkeer waarde in 'n veranderlike, genaamd lyn, string-tipe. 12 00:00:29,620 --> 00:00:31,210 Ons doen dan 'n bietjie van 'n gesonde verstand tjek. 13 00:00:31,210 --> 00:00:35,770 As lyn == null, dan is ons nuuskierig terug INT_MAX. 14 00:00:35,770 --> 00:00:40,140 >> Nou is dit blyk dat INT_MAX is 'n spesiale konstante reeds verklaar 15 00:00:40,140 --> 00:00:44,030 wat bepaal die grootste moontlike int dat jy kan verteenwoordig in 'n 16 00:00:44,030 --> 00:00:45,160 program soos hierdie. 17 00:00:45,160 --> 00:00:49,430 Nou het ons arbitrĂŞr besluit om terug te keer INT_MAX as 'n brandwag waarde van 18 00:00:49,430 --> 00:00:53,120 soorte, een wat ons as voorbehou het beteken 'n fout het voorgekom. 19 00:00:53,120 --> 00:00:56,230 So het die prys wat ons betaal, natuurlik, is dat getint kan klaarblyklik nie 20 00:00:56,230 --> 00:01:01,440 eintlik terug 'n aantal so groot soos INT_MAX, want selfs as hy wil, 21 00:01:01,440 --> 00:01:04,730 wat terugkeer waarde moet regtig word vertolk deur die oproeper - 22 00:01:04,730 --> 00:01:06,260 wie is die gebruik van getint - 23 00:01:06,260 --> 00:01:09,340 as 'n fout van 'n soort. 24 00:01:09,340 --> 00:01:13,840 >> Volgende, sien dat Ek het verklaar 'n int n en 'n kar c. 25 00:01:13,840 --> 00:01:18,030 In hierdie volgende lyn van kode, ek noem 'n funksie genoem sscanf, verby in 26 00:01:18,030 --> 00:01:18,970 vier argumente. 27 00:01:18,970 --> 00:01:25,110 lyn, wat is die string die gebruiker se getik, "% i% c", wat is 'n formaat 28 00:01:25,110 --> 00:01:28,850 string wat ek verwag dat die gebruiker kan tipe, gevolg deur die adres van 29 00:01:28,850 --> 00:01:30,920 n, en die adres van c. 30 00:01:30,920 --> 00:01:34,860 Nou sscanf se doel in die lewe is inderdaad ' 'n string op soek na die scan 31 00:01:34,860 --> 00:01:38,700 bepaalde formaat wat die programmeerder het gespesifiseer as die tweede argument. 32 00:01:38,700 --> 00:01:42,020 In hierdie geval,% i is in daar, soos% c. 33 00:01:42,020 --> 00:01:46,700 So as sscanf ontmoetings 'n int in die gebruiker se insette, wat int gestoor word 34 00:01:46,700 --> 00:01:50,270 binnekant van die veranderlike genoem N, omdat ons verskaf het as die derde 35 00:01:50,270 --> 00:01:52,810 argument die adres van N sscanf. 36 00:01:52,810 --> 00:01:56,870 Wat beteken dat sscanf inderdaad kan gaan daar en daarin werk die waarde. 37 00:01:56,870 --> 00:01:59,990 >> Nou, in die geval van die gebruiker in iets meer 38 00:01:59,990 --> 00:02:01,220 as een of meer syfers - 39 00:02:01,220 --> 00:02:03,570 Met ander woorde, 'n kar van 'n soort - 40 00:02:03,570 --> 00:02:07,940 dat die tweede veranderlike c, wie se adres ons geslaag het in sscanf as sy vierde 41 00:02:07,940 --> 00:02:10,560 argument sal ook ingevul word. 42 00:02:10,560 --> 00:02:14,220 Nou is die onderstebo van kontrole vir 'n addisionele karakter van die gebruiker is 43 00:02:14,220 --> 00:02:17,360 dat indien hy of sy nie saamwerk nie, en tipes in meer as net 'n int, 44 00:02:17,360 --> 00:02:20,530 ons sal in staat wees om dit op te spoor in hierdie wyse, want in daardie geval, sscanf 45 00:02:20,530 --> 00:02:24,860 gaan om terug te keer 2, wat beteken dat beide van die plekhouers is gevul 46 00:02:24,860 --> 00:02:25,600 met waardes. 47 00:02:25,600 --> 00:02:30,360 Maar ons hoop dat sscanf plaas terug 1, wat net beteken dat die gebruiker 48 00:02:30,360 --> 00:02:31,630 verskaf 'n int. 49 00:02:31,630 --> 00:02:34,480 >> Wat doen ons as sscanf inderdaad terug 1? 50 00:02:34,480 --> 00:02:39,150 Wel, ons onmiddellik vry om die lyn wat die gebruiker getik, en dan het ons 51 00:02:39,150 --> 00:02:42,670 onmiddellik n terugkeer, met gekry 'n int. 52 00:02:42,670 --> 00:02:47,180 Want as sscanf nie terug 1 en die gebruiker dus nie saamwerk nie, 53 00:02:47,180 --> 00:02:51,470 ons nog steeds vry om die lyn, maar ons nou Vra die gebruiker om weer te probeer. 54 00:02:51,470 --> 00:02:55,390 En omdat ons nog in daardie anders oneindige lus, die proses 55 00:02:55,390 --> 00:03:00,190 sal weer weer begin, en miskien, en Miskien, totdat die gebruiker eintlik 56 00:03:00,190 --> 00:03:01,500 bied ons 'n int. 57 00:03:01,500 --> 00:03:21,490