>> Tagapagsalita 1: Hayaan ang tumagal ng isang hitsura sa CS50 library,
partikular na function na GetInt nito.
Narito mayroon namin ang aktwal na source code para sa GetInt.
At mapansin na ito ay hindi masyadong mahaba, at karamihan sa mga ito ang siyang bumubuo ng isang habang loop -
isang walang-katapusang loop sa na - na lamang ay nagbabalik ng isang halaga sa sandaling hindi namin talaga
nakuha kung ano ang aming inaasahan.
Ni maglakad sa pamamagitan nito Hayaang.
>> Pansinin up dito muna, ang habang nagsisimula loop.
Pansinin susunod na mayroon kami ng isang linya ng code na aktwal na tawag GetString,
at nag-iimbak ang halaga balik sa isang variable, na tinatawag na linya, ng uri ng string.
Pagkatapos ay gawin namin ng kaunti ng isang tseke katinuan.
Kung linya == null, pagkatapos namin pausisa bumalik INT_MAX.
>> Ngayon ito ay lumiliko out na INT_MAX ay isang ipinahayag espesyal na pare-pareho sa ibang lugar
na tumutukoy sa pinakamalaking posible int na maaari mong kumatawan sa isang
programa tulad nito.
Ngayon ay na-nagkataon napagpasyahan naming bumalik INT_MAX bilang isang tanod na halaga ng
mga klase, isa na na-reserbado namin bilang ibig sabihin may naganap na error.
Kaya ang presyo namin magbayad, siyempre, ay na GetInt maaari tila hindi
talaga magbalik ng numero bilang malaking bilang INT_MAX, dahil kahit na ito ay nais na,
na halaga return dapat talaga mangahulugan ng tumatawag -
kung sinuman ang gumagamit ito GetInt -
bilang isang error ng ilang mga uri.
>> Susunod, mapapansin na na-ipinahayag ko isang int n at isang pansamantalang trabaho c.
Sa susunod na linya ng code, tumawag ako ng isang function na tinatawag na sscanf, pagpasa sa
apat na mga argumento.
linya, na kung saan ay ang string ng gumagamit nai-type sa, "% i% c", na isang format
string na ako umaasang ang maaaring gumagamit uri, kasunod ang address ng
n, at ang address ng c.
Ngayon sscanf ng layunin sa buhay ay sa katunayan upang i-scan ang isang string naghahanap para sa
partikular na format na iyon ang programmer ay tinukoy bilang ang pangalawang argumento.
Sa kasong ito,% i ay nasa doon, bilang ay% c.
Kaya kung nakatagpo sscanf isang int sa input gumagamit, na int ay maiimbak
sa loob ng variable na tinatawag n, dahil na aming ibinigay bilang sa ikatlong
argumento sa sscanf ang address ng n.
Na nangangahulugan na maaari sscanf sa katunayan pumunta doon, at i-update ang halaga sa ganyang bagay.
>> Ngayon, kung sakaling uri ng gumagamit sa isang bagay na mas
kaysa sa isa o higit pang mga digit -
sa ibang salita, isang pansamantalang trabaho ng isang uri -
na pangalawang variable c, na ang address kami ang pumasa sa sscanf bilang nito ikaapat
ay malagyan din ng argumento.
Ngayon ang bentahe ng pag-check para sa isang karagdagang mga character na mula ang gumagamit ay
na kung siya ay hindi makikipagtulungan, at mga uri sa higit pa sa isang int,
magagawa naming upang makita ito sa ito paraan, dahil sa kasong iyon, sscanf
Pupunta upang bumalik 2, signifying na pareho ng mga placeholder ay napuno
may halaga.
Ngunit umaasa kaming na sscanf sa halip Ibinabalik 1, na nangangahulugang gumagamit ang tanging
ibinigay sa isang int.
>> Ano ang gagawin namin kung sscanf sa katunayan ay nagbabalik 1?
Well, agad naming palayain ang linya na gumagamit ang nai-type sa, at pagkatapos namin
agad na bumalik n, nagkakaroon nakuha sa isang int.
Iba Pa, kung sscanf hindi nagbabalik 1, at ang gumagamit samakatuwid ay hindi makikipagtulungan,
pa rin palayain kami ng hangganan, ngunit namin i-prompt na ngayon ang gumagamit upang subukang muli.
At dahil ikaw pa rin kami sa loob ng na kung hindi man ay walang-katapusang loop, ang proseso
ay muling simulan, at marahil muli, at siguro muli, hanggang sa aktwal na user
Nagbibigay kami ng isang int.