>> 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.