>> Spreker 1: Kom ons neem 'n blik by die CS50 biblioteek,
spesifiek sy getint funksie.
Hier het ons die werklike bron kode vir getint.
En sien dat dit nie te lank, en die meeste van dit 'n lus -
'n oneindige lus aan dat - dat slegs terug 'n waarde sodra ons het eintlik
gekry wat ons verwag het.
Kom ons loop deur dit.
>> Let hier die eerste, die while lus begin.
Let volgende dat ons 'n reĂŤl van die kode wat eintlik 'n beroep GetString,
en slaan die terugkeer waarde in 'n veranderlike, genaamd lyn, string-tipe.
Ons doen dan 'n bietjie van 'n gesonde verstand tjek.
As lyn == null, dan is ons nuuskierig terug INT_MAX.
>> Nou is dit blyk dat INT_MAX is 'n spesiale konstante reeds verklaar
wat bepaal die grootste moontlike int dat jy kan verteenwoordig in 'n
program soos hierdie.
Nou het ons arbitrĂŞr besluit om terug te keer INT_MAX as 'n brandwag waarde van
soorte, een wat ons as voorbehou het beteken 'n fout het voorgekom.
So het die prys wat ons betaal, natuurlik, is dat getint kan klaarblyklik nie
eintlik terug 'n aantal so groot soos INT_MAX, want selfs as hy wil,
wat terugkeer waarde moet regtig word vertolk deur die oproeper -
wie is die gebruik van getint -
as 'n fout van 'n soort.
>> Volgende, sien dat Ek het verklaar 'n int n en 'n kar c.
In hierdie volgende lyn van kode, ek noem 'n funksie genoem sscanf, verby in
vier argumente.
lyn, wat is die string die gebruiker se getik, "% i% c", wat is 'n formaat
string wat ek verwag dat die gebruiker kan tipe, gevolg deur die adres van
n, en die adres van c.
Nou sscanf se doel in die lewe is inderdaad ' 'n string op soek na die scan
bepaalde formaat wat die programmeerder het gespesifiseer as die tweede argument.
In hierdie geval,% i is in daar, soos% c.
So as sscanf ontmoetings 'n int in die gebruiker se insette, wat int gestoor word
binnekant van die veranderlike genoem N, omdat ons verskaf het as die derde
argument die adres van N sscanf.
Wat beteken dat sscanf inderdaad kan gaan daar en daarin werk die waarde.
>> Nou, in die geval van die gebruiker in iets meer
as een of meer syfers -
Met ander woorde, 'n kar van 'n soort -
dat die tweede veranderlike c, wie se adres ons geslaag het in sscanf as sy vierde
argument sal ook ingevul word.
Nou is die onderstebo van kontrole vir 'n addisionele karakter van die gebruiker is
dat indien hy of sy nie saamwerk nie, en tipes in meer as net 'n int,
ons sal in staat wees om dit op te spoor in hierdie wyse, want in daardie geval, sscanf
gaan om terug te keer 2, wat beteken dat beide van die plekhouers is gevul
met waardes.
Maar ons hoop dat sscanf plaas terug 1, wat net beteken dat die gebruiker
verskaf 'n int.
>> Wat doen ons as sscanf inderdaad terug 1?
Wel, ons onmiddellik vry om die lyn wat die gebruiker getik, en dan het ons
onmiddellik n terugkeer, met gekry 'n int.
Want as sscanf nie terug 1 en die gebruiker dus nie saamwerk nie,
ons nog steeds vry om die lyn, maar ons nou Vra die gebruiker om weer te probeer.
En omdat ons nog in daardie anders oneindige lus, die proses
sal weer weer begin, en miskien, en Miskien, totdat die gebruiker eintlik
bied ons 'n int.