2 00:00:00,000 --> 00:00:01,860 >> SIARADWR 1: Gadewch i ni edrych yn y llyfrgell CS50, 3 00:00:01,860 --> 00:00:05,190 yn benodol ei swyddogaeth GetInt. 4 00:00:05,190 --> 00:00:07,820 Yma, mae gennym y ffynhonnell gwirioneddol cod ar gyfer GetInt. 5 00:00:07,820 --> 00:00:12,050 Ac yn sylwi nad yw'n rhy hir, a y rhan fwyaf ohono yn gyfystyr â dolen tra - 6 00:00:12,050 --> 00:00:15,620 dolen ddiddiwedd ar hynny - mai dim ond yn dychwelyd gwerth unwaith rydym wedi gwirionedd 7 00:00:15,620 --> 00:00:17,400 gotten hyn yr ydym yn ei ddisgwyl. 8 00:00:17,400 --> 00:00:18,700 Gadewch i ni gerdded trwyddo. 9 00:00:18,700 --> 00:00:21,650 >> Hysbysiad i fyny yma yn gyntaf, y tra bod dolen yn dechrau. 10 00:00:21,650 --> 00:00:25,390 Hysbysiad nesaf fod gennym linell o god sydd mewn gwirionedd yn galw GetString, 11 00:00:25,390 --> 00:00:29,620 ac yn storio'r gwerth dychwelyd mewn amrywiol, a elwir yn llinell, o'r math llinyn. 12 00:00:29,620 --> 00:00:31,210 Yna rydym yn gwneud ychydig o wiriad bwyll. 13 00:00:31,210 --> 00:00:35,770 Os null == llinell, yna rydym yn rhyfedd dychwelyd INT_MAX. 14 00:00:35,770 --> 00:00:40,140 >> Nawr mae'n troi allan bod INT_MAX yn gyson arbennig datganwyd rywle arall 15 00:00:40,140 --> 00:00:44,030 sy'n nodi'r mwyaf posibl int y gallwch gynrychioli mewn 16 00:00:44,030 --> 00:00:45,160 rhaglen fel hon. 17 00:00:45,160 --> 00:00:49,430 Nawr rydym wedi penderfynu fympwyol i ddychwelyd INT_MAX fel gwerth sentinel o 18 00:00:49,430 --> 00:00:53,120 math, cafodd yr un yr ydym wedi cadw fel sy'n golygu gwall wedi digwydd. 19 00:00:53,120 --> 00:00:56,230 Felly, y pris byddwn yn talu, wrth gwrs, yw gall hynny GetInt ymddangos nad 20 00:00:56,230 --> 00:01:01,440 mewn gwirionedd yn dychwelyd nifer mor fawr â INT_MAX, oherwydd hyd yn oed os yw'n dymuno, 21 00:01:01,440 --> 00:01:04,730 Dylai fod gwerth dychwelyd mewn gwirionedd ei ddehongli gan y galwr - 22 00:01:04,730 --> 00:01:06,260 pwy bynnag sy'n defnyddio GetInt - 23 00:01:06,260 --> 00:01:09,340 fel gwall o ryw fath. 24 00:01:09,340 --> 00:01:13,840 >> Nesaf, yn sylwi fy mod wedi datgan yn int n ac torgoch c. 25 00:01:13,840 --> 00:01:18,030 Yn y llinell nesaf o god, galwaf i swyddogaeth a elwir yn sscanf, gan fynd yn 26 00:01:18,030 --> 00:01:18,970 pedwar dadleuon. 27 00:01:18,970 --> 00:01:25,110 llinell, sef y llinyn y defnyddiwr deipio i mewn, "% i% c", sef fformat 28 00:01:25,110 --> 00:01:28,850 llinyn fy mod yn disgwyl y gallai defnyddiwr math, wedi'i ddilyn gan y cyfeiriad 29 00:01:28,850 --> 00:01:30,920 n, a chyfeiriad c. 30 00:01:30,920 --> 00:01:34,860 Diben yn awr sscanf mewn bywyd yn wir i sganio llinyn chwilio am y 31 00:01:34,860 --> 00:01:38,700 fformat penodol bod y rhaglennydd wedi nodi fel yr ail ddadl. 32 00:01:38,700 --> 00:01:42,020 Yn yr achos hwn,% i mewn yno, fel y mae% c. 33 00:01:42,020 --> 00:01:46,700 Felly, os sscanf dod ar eu traws yn int yn y mewnbwn defnyddwyr, bydd y int cael eu storio 34 00:01:46,700 --> 00:01:50,270 tu mewn y newidyn a elwir n, oherwydd rydym wedi darparu fel y trydydd 35 00:01:50,270 --> 00:01:52,810 ddadl i sscanf cyfeiriad n. 36 00:01:52,810 --> 00:01:56,870 Sy'n golygu y gall sscanf yn wir yn mynd yno, a diweddaru'r gwerth ynddo. 37 00:01:56,870 --> 00:01:59,990 >> Yn awr, rhag ofn y math o ddefnyddiwr mewn rhywbeth mwy 38 00:01:59,990 --> 00:02:01,220 nag un neu ragor o ddigidau - 39 00:02:01,220 --> 00:02:03,570 mewn geiriau eraill, golosg o ryw fath - 40 00:02:03,570 --> 00:02:07,940 yr ail c amrywiol, y mae ei gyfeiriad rydym yn pasio i mewn i sscanf fel ei phedwaredd 41 00:02:07,940 --> 00:02:10,560 Bydd ddadl hefyd yn cael ei phoblogaeth. 42 00:02:10,560 --> 00:02:14,220 Nawr bod y upside o wirio ar gyfer cymeriad ychwanegol gan y defnyddiwr yn 43 00:02:14,220 --> 00:02:17,360 os nad yw ef neu hi yn cydweithredu, a mathau mewn mwy na dim ond int, 44 00:02:17,360 --> 00:02:20,530 byddwn yn gallu canfod fel hyn modd, oherwydd yn yr achos hwnnw, sscanf 45 00:02:20,530 --> 00:02:24,860 yn mynd i ddychwelyd 2, gan ddynodi bod ddau bachau yn cael eu llenwi 46 00:02:24,860 --> 00:02:25,600 gyda gwerthoedd. 47 00:02:25,600 --> 00:02:30,360 Ond rydym yn gobeithio y sscanf yn lle hynny yn dychwelyd 1, sy'n golygu bod y defnyddiwr yn unig 48 00:02:30,360 --> 00:02:31,630 rhoi int. 49 00:02:31,630 --> 00:02:34,480 >> Beth ydych yn ei wneud os sscanf yn wir yn dychwelyd 1? 50 00:02:34,480 --> 00:02:39,150 Wel, rydym yn rhad ac am ddim unwaith y llinell sy'n y defnyddiwr deipio i mewn, ac yna rydym yn 51 00:02:39,150 --> 00:02:42,670 dychwelyd n ar unwaith, ar ôl gotten yn int. 52 00:02:42,670 --> 00:02:47,180 Else, os nad sscanf yn dychwelyd 1, a y defnyddiwr felly nid oedd yn cydweithredu, 53 00:02:47,180 --> 00:02:51,470 rydym yn dal i ddim y llinell, ond rydym bellach yn annog y defnyddiwr i ailgeisio. 54 00:02:51,470 --> 00:02:55,390 Ac oherwydd ein bod yn dal i fod y tu mewn o hynny dolen ddiddiwedd fel arall, y broses 55 00:02:55,390 --> 00:03:00,190 yn dechrau eto, ac efallai unwaith eto, a efallai eto, nes bod y defnyddiwr mewn gwirionedd yn 56 00:03:00,190 --> 00:03:01,500 yn darparu int ni. 57 00:03:01,500 --> 00:03:21,490