SIARADWR 1: Gadewch i ni edrych yn y llyfrgell CS50, yn benodol ei swyddogaeth GetInt. Yma, mae gennym y ffynhonnell gwirioneddol cod ar gyfer GetInt. Ac yn sylwi nad yw'n rhy hir, a y rhan fwyaf ohono yn gyfystyr â dolen tra - dolen ddiddiwedd ar hynny - mai dim ond yn dychwelyd gwerth unwaith rydym wedi gwirionedd gotten hyn yr ydym yn ei ddisgwyl. Gadewch i ni gerdded trwyddo. Hysbysiad i fyny yma yn gyntaf, y tra bod dolen yn dechrau. Hysbysiad nesaf fod gennym linell o god sydd mewn gwirionedd yn galw GetString, ac yn storio'r gwerth dychwelyd mewn amrywiol, a elwir yn llinell, o'r math llinyn. Yna rydym yn gwneud ychydig o wiriad bwyll. Os null == llinell, yna rydym yn rhyfedd dychwelyd INT_MAX. Nawr mae'n troi allan bod INT_MAX yn gyson arbennig datganwyd rywle arall sy'n nodi'r mwyaf posibl int y gallwch gynrychioli mewn rhaglen fel hon. Nawr rydym wedi penderfynu fympwyol i ddychwelyd INT_MAX fel gwerth sentinel o math, cafodd yr un yr ydym wedi cadw fel sy'n golygu gwall wedi digwydd. Felly, y pris byddwn yn talu, wrth gwrs, yw gall hynny GetInt ymddangos nad mewn gwirionedd yn dychwelyd nifer mor fawr â INT_MAX, oherwydd hyd yn oed os yw'n dymuno, Dylai fod gwerth dychwelyd mewn gwirionedd ei ddehongli gan y galwr - pwy bynnag sy'n defnyddio GetInt - fel gwall o ryw fath. Nesaf, yn sylwi fy mod wedi datgan yn int n ac torgoch c. Yn y llinell nesaf o god, galwaf i swyddogaeth a elwir yn sscanf, gan fynd yn pedwar dadleuon. llinell, sef y llinyn y defnyddiwr deipio i mewn, "% i% c", sef fformat llinyn fy mod yn disgwyl y gallai defnyddiwr math, wedi'i ddilyn gan y cyfeiriad n, a chyfeiriad c. Diben yn awr sscanf mewn bywyd yn wir i sganio llinyn chwilio am y fformat penodol bod y rhaglennydd wedi nodi fel yr ail ddadl. Yn yr achos hwn,% i mewn yno, fel y mae% c. Felly, os sscanf dod ar eu traws yn int yn y mewnbwn defnyddwyr, bydd y int cael eu storio tu mewn y newidyn a elwir n, oherwydd rydym wedi darparu fel y trydydd ddadl i sscanf cyfeiriad n. Sy'n golygu y gall sscanf yn wir yn mynd yno, a diweddaru'r gwerth ynddo. Yn awr, rhag ofn y math o ddefnyddiwr mewn rhywbeth mwy nag un neu ragor o ddigidau - mewn geiriau eraill, golosg o ryw fath - yr ail c amrywiol, y mae ei gyfeiriad rydym yn pasio i mewn i sscanf fel ei phedwaredd Bydd ddadl hefyd yn cael ei phoblogaeth. Nawr bod y upside o wirio ar gyfer cymeriad ychwanegol gan y defnyddiwr yn os nad yw ef neu hi yn cydweithredu, a mathau mewn mwy na dim ond int, byddwn yn gallu canfod fel hyn modd, oherwydd yn yr achos hwnnw, sscanf yn mynd i ddychwelyd 2, gan ddynodi bod ddau bachau yn cael eu llenwi gyda gwerthoedd. Ond rydym yn gobeithio y sscanf yn lle hynny yn dychwelyd 1, sy'n golygu bod y defnyddiwr yn unig rhoi int. Beth ydych yn ei wneud os sscanf yn wir yn dychwelyd 1? Wel, rydym yn rhad ac am ddim unwaith y llinell sy'n y defnyddiwr deipio i mewn, ac yna rydym yn dychwelyd n ar unwaith, ar ôl gotten yn int. Else, os nad sscanf yn dychwelyd 1, a y defnyddiwr felly nid oedd yn cydweithredu, rydym yn dal i ddim y llinell, ond rydym bellach yn annog y defnyddiwr i ailgeisio. Ac oherwydd ein bod yn dal i fod y tu mewn o hynny dolen ddiddiwedd fel arall, y broses yn dechrau eto, ac efallai unwaith eto, a efallai eto, nes bod y defnyddiwr mewn gwirionedd yn yn darparu int ni.