>> Ræðumaður 1: Við skulum taka a líta á CS50 bókasafn,
sérstaklega GetInt hlutverk hennar.
Hér höfum við í raun uppspretta kóða fyrir GetInt.
Og taka eftir því að það er ekki of lengi, og flest það telst meðan lykkja -
óendanlega lykkju á það - að aðeins skilar gildi þegar við höfum í raun
fengið það sem við ráð fyrir.
Skulum ganga í gegnum það.
>> Tilkynning upp hér fyrst, meðan lykkja hefst.
Takið næst að við höfum línu af kóða að í raun kallar GetString,
og geymir aftur gildi í breytu, sem heitir lína, af taginu String.
Við gerum þá hluti af geðheilsu stöðva.
Ef lína == null, þá erum við forvitinn aftur INT_MAX.
>> Nú kemur í ljós að INT_MAX er sérstakt fasti lýst annars staðar
sem skilgreinir stærsti kostur int sem þú getur táknað í
program eins og this.
Nú höfum við geðþótta ákveðið að snúa aftur INT_MAX sem Sentinel gildi
tegundir, einn sem við höfum áskilinn sem sem þýðir villa kom upp.
Þannig að verðið sem við greiðum að sjálfsögðu er að GetInt getur greinilega ekki
reyndar aftur a tala eins og stór eins INT_MAX, því jafnvel ef það vill,
sem skilagildi ætti í raun að túlka af tekur -
hver er að nota GetInt -
sem villa af einhverju tagi.
>> Næst, eftir að ég hef lýst int N og A char c.
Í þessu næstu línu af kóða, kalla ég að fall sem kallast sscanf, sem liggur í
fjögur rök.
lína, sem er band sem notandinn er slegið inn, "% i% c", sem er á sniði
band sem ég er von gæti notandinn gerð, eftir tölu
n, og heimilisfang c.
Tilgangurinn nú sscanf í lífinu er örugglega að skanna band leita að
einkum snið að forritarinn hefur tilgreint sem þeirri seinni argument.
Í þessu tilviki,% i er í það, sem er% c.
Þannig að ef sscanf kynni við int Í inntak notandinn gefur frá sér Int verða geymd
inni á breytu sem kallast n, vegna þess að höfum við skilyrði eins og í þriðja
rök að sscanf veffang n.
Sem þýðir að sscanf getur örugglega farið þar, og uppfæra verðmæti þar.
>> Nú, ef notandinn slær í eitthvað meira
en einn eða fleiri tölustöfum -
í öðrum orðum, bleikju af einhverju tagi -
að second breytu c, þar sem vistfang fórum við inn sscanf sem fjórða þess
rök Einnig verður byggð.
Nú kosti að stöðva fyrir að viðbótar eðli frá notanda er
að ef hann eða hún er ekki að vinna, og gerðir í meira en bara int,
við munum vera fær um að uppgötva það í þessari hátt, vegna þess að í því tilfelli, sscanf
er að fara að skila 2, merkja að báðir staðgengla voru fylltir
með gildi.
En við erum að vonast eftir að sscanf staðinn skilar 1, sem þýðir að notandinn aðeins
enda við int.
>> Hvað gerum við ef sscanf örugglega skilar 1?
Jæja, losa við strax til línunnar sem notandinn slegið inn, og þá erum við
strax aftur n, having fengið við int.
Annars, ef sscanf ekki aftur 1, og notandinn því ekki vinna,
við frjáls enn á línu, en við nú hvetja notandann til að reyna aftur.
Og vegna þess að við erum enn inni að ella óendanlegur lykkja, ferlið
mun byrja aftur, og kannski aftur, og kannski aftur, þar til notandi reyndar
veitir okkur int.