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.