>> SPEAKER 1: Ni rigardu ĉe la CS50 biblioteko,
specife lia GetInt funkcio.
Ĉi tie ni havos la reala fonto kodo por GetInt.
Kaj rimarki ke ĝi ne estas tro longa, kaj plejparto de ĝi konstituas dum buklo -
malfinia ciklo ĉe tio - ke nur redonas valoron unufoje ni reale
alveninta kion ni atendis.
Ni iru tra ĝi.
>> Rimarku tien unue, la dum buklo komencas.
Rimarku sekvanta ke ni havas linion de kodo ke efektive nomas GetString,
kaj stokas la reveno valoron en variablo, nomata linio, de tipo kordo.
Ni do faru iom de prudento ĉekon.
Se linio == null, tiam ni scivoleme revenu INT_MAX.
>> Nun ĝi rezultas ke INT_MAX estas speciala konstanta deklaris aliloke
kiu specifas la plej granda ebla int ke vi povas reprezenti en
programo kiel ĉi tio.
Nun ni jam arbitre decidis reveni INT_MAX kiel sentinelo valoro de
varojn, kiu jam rezervis kiel signifanta eraro okazis.
Do la prezo ni pagas, kompreneble, estas ke GetInt povas ŝajne ne
reale resendas numeron tiel granda kiel INT_MAX, ĉar eĉ se ĝi volas,
ke reveno valoro devus vere esti interpretitaj de la telefonanto -
Kiu estas uzanta GetInt -
kiel eraro de iu varo.
>> Venonta, rimarki, ke Mi jam deklaris an int n kaj char c.
En ĉi sekva linio de kodo, mi nomas funkcio nomita sscanf, pasante en
kvar argumentojn.
linio, kiu estas la kordoj de la uzanto tajpitaj en "% i% c", kio estas formato
kordo, ke mi atendis la uzanto forteco tipo, sekvis per la adreso de
n, kaj la adreso de c.
Nun sscanf La celo en la vivo estas ja skani ĉenon serĉante la
aparta formato kiun la programisto specifis kiel tiu dua argumento.
En ĉi tiu kazo,% i estas en tie, kiel estas% c.
Do se sscanf renkontas _int_ en la uzanto enigo, ke int estos stokitaj
ene de la variablo nomata n, ĉar Ni provizis kiel la tria
argumento por sscanf la adreso de n.
Kiu signifas ke sscanf povas ja iri tie, kaj ĝisdatigi la valoron tie.
>> Nun, en tiu kazo la uzanto tajpas en iu pli
ol unu aŭ pli da ciferoj -
en aliaj vortoj, char de iu speco -
ke dua variablo c, kies adreso ni pasis en sscanf kiel ĝia kvara
argumento ankaŭ estos popolita.
Nun la supra parto de kontrolanta por aldona karaktero de la uzanto estas
ke se li aŭ ŝi ne kunlaboras, kaj tipoj en pli ol nura int,
ni povos detekti ĝin en tiu maniero, ĉar en tiu kazo, sscanf
tuj revenos 2, montrante, ke ambaŭ de la anstataŭiloj satiĝis
per valoroj.
Sed ni esperis, ke sscanf anstataŭ Revenas 1, kio signifas ke la uzanto nur
havigis int.
>> Kion ni faru se sscanf ja revenas 1?
Nu, ni tuj liberigi la linio kiu la uzanto tajpas en, kaj tiam ni
tuj revenos n, havanta alveninta an int.
Alie, se sscanf ne revenos 1, kaj la uzanto por tio ne kunlaboras,
ni ankoraŭ liberigi la linion, sed ni nun instigas la uzanton reprovi.
Kaj ĉar ni estas ankoraŭ ene de tiu alie senfina ciklo, la procezo
komenciĝos denove, kaj eble pli, kaj eble pli, ĝis la uzanto reale
havigas al ni int.