>> SPEAKER 1: Katsotaanpa katsomaan klo CS50 kirjasto,
erityisesti sen GetInt toiminto.
Tässä meillä on todellinen lähde koodi GetInt.
Ja huomaa, että se ei ole liian pitkä, ja suurin osa siitä muodostaa while-silmukka -
päättymättömään silmukkaan tuohon - että vain palauttaa arvon, kun olemme todella
saanut sitä, mitä odotimme.
Katsotaanpa kulkea läpi.
>> Huomaa täällä ensin, kun silmukka alkaa.
Huomata seuraavaksi, että meillä on koodiriviä että itse asiassa vaatii getString,
ja tallentaa tuotto arvo muuttuja, jota kutsutaan linja, tyypin merkkijono.
Sitten tehdä vähän järki tarkistaa.
Jos linja == null, sitten kumma palata INT_MAX.
>> Nyt on käynyt ilmi, että INT_MAX on erityistä jatkuvasti julisti muualla
joka määrittää suurin mahdollinen int että voit edustavat
ohjelma kuten tämä.
Nyt olemme mielivaltaisesti päätti palata INT_MAX kuin Sentinel arvo
lajittelee, joka olemme varattu eli on tapahtunut virhe.
Joten hinta me maksamme, on tietenkin että GetInt voi ilmeisesti ole
todella palata useita yhtä suuri kuin INT_MAX, sillä vaikka se haluaa,
että paluu arvo olisi todella tulkitaan soittajan -
kuka pääsee käyttämällä GetInt -
koska virhe jonkinlaisia.
>> Seuraavaksi huomaan, että olen julistanut int n ja char c.
Tässä seuraavassa koodiriviä, kutsun toiminto nimeltään sscanf, ohimennen
neljä argumenttia.
line, joka on merkkijono käyttäjän kirjoitetaan, "% i% c", joka on muotoa
merkkijono, joka Odotan käyttäjä voi tyyppi, jota seuraa osoite
n, ja osoite c.
Nyt sscanf n tarkoitus elämässä on todellakin skannata merkkijono etsii
tietyssä muodossa, että ohjelmoija on määritellyt, että toinen väite.
Tällöin% i on siellä, koska on% c.
Joten jos sscanf kohtaa int vuonna käyttäjän syötteen, että int tallennetaan
sisällä muuttuja nimeltä n, koska Olemme toimittaneet kolmanneksi
argumentti sscanf osoitteen n.
Mikä tarkoittaa, että sscanf voi todellakin mennä siellä, ja päivittää arvon siinä.
>> Nyt, jos käyttäjä kirjoittaa jotain lisää
kuin yksi tai useampi numeroa -
toisin sanoen, char jonkinlainen -
että toinen vaihteleva c, joiden osoite me johdetaan sscanf sen neljäs
argumentti on myös asuttu.
Nyt ylösalaisin tarkistaa lisäksi hahmo käyttäjä on
että jos hän ei tee yhteistyötä, ja tyyppejä enemmän kuin vain int,
pystymme havaitsemaan sitä tässä tavalla, koska siinä tapauksessa, sscanf
aikoo palata 2, joka ilmoittaa, että molemmat Paikkamerkkien täyttyivät
arvojen kanssa.
Mutta toivomme, että sscanf sijaan palauttaa 1, mikä tarkoittaa, että käyttäjän tarvitsee vain
edellyttäen int.
>> Mitä teemme, jos sscanf todellakin palauttaa 1?
No, me heti vapauttaa linja, että käyttäjä kirjoitettu, ja sitten me
välittömästi palautettava n, jolla saanut int.
Else, jos sscanf ei palaa 1, ja joten käyttäjä ei toiminut yhteistyössä,
me vielä vapaana linja, mutta meidän nyt pyytää käyttäjää yritä uudelleen.
Ja koska olemme yhä sisällä että muuten päättymättömään silmukkaan, prosessi
alkaa uudelleen, ja ehkä uudelleen, ja ehkä uudelleen, ennen kuin käyttäjä todella
tarjoaa meille int.