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.