2 00:00:00,000 --> 00:00:01,860 >> Tagapagsalita 1: Hayaan ang tumagal ng isang hitsura sa CS50 library, 3 00:00:01,860 --> 00:00:05,190 partikular na function na GetInt nito. 4 00:00:05,190 --> 00:00:07,820 Narito mayroon namin ang aktwal na source code para sa GetInt. 5 00:00:07,820 --> 00:00:12,050 At mapansin na ito ay hindi masyadong mahaba, at karamihan sa mga ito ang siyang bumubuo ng isang habang loop - 6 00:00:12,050 --> 00:00:15,620 isang walang-katapusang loop sa na - na lamang ay nagbabalik ng isang halaga sa sandaling hindi namin talaga 7 00:00:15,620 --> 00:00:17,400 nakuha kung ano ang aming inaasahan. 8 00:00:17,400 --> 00:00:18,700 Ni maglakad sa pamamagitan nito Hayaang. 9 00:00:18,700 --> 00:00:21,650 >> Pansinin up dito muna, ang habang nagsisimula loop. 10 00:00:21,650 --> 00:00:25,390 Pansinin susunod na mayroon kami ng isang linya ng code na aktwal na tawag GetString, 11 00:00:25,390 --> 00:00:29,620 at nag-iimbak ang halaga balik sa isang variable, na tinatawag na linya, ng uri ng string. 12 00:00:29,620 --> 00:00:31,210 Pagkatapos ay gawin namin ng kaunti ng isang tseke katinuan. 13 00:00:31,210 --> 00:00:35,770 Kung linya == null, pagkatapos namin pausisa bumalik INT_MAX. 14 00:00:35,770 --> 00:00:40,140 >> Ngayon ito ay lumiliko out na INT_MAX ay isang ipinahayag espesyal na pare-pareho sa ibang lugar 15 00:00:40,140 --> 00:00:44,030 na tumutukoy sa pinakamalaking posible int na maaari mong kumatawan sa isang 16 00:00:44,030 --> 00:00:45,160 programa tulad nito. 17 00:00:45,160 --> 00:00:49,430 Ngayon ay na-nagkataon napagpasyahan naming bumalik INT_MAX bilang isang tanod na halaga ng 18 00:00:49,430 --> 00:00:53,120 mga klase, isa na na-reserbado namin bilang ibig sabihin may naganap na error. 19 00:00:53,120 --> 00:00:56,230 Kaya ang presyo namin magbayad, siyempre, ay na GetInt maaari tila hindi 20 00:00:56,230 --> 00:01:01,440 talaga magbalik ng numero bilang malaking bilang INT_MAX, dahil kahit na ito ay nais na, 21 00:01:01,440 --> 00:01:04,730 na halaga return dapat talaga mangahulugan ng tumatawag - 22 00:01:04,730 --> 00:01:06,260 kung sinuman ang gumagamit ito GetInt - 23 00:01:06,260 --> 00:01:09,340 bilang isang error ng ilang mga uri. 24 00:01:09,340 --> 00:01:13,840 >> Susunod, mapapansin na na-ipinahayag ko isang int n at isang pansamantalang trabaho c. 25 00:01:13,840 --> 00:01:18,030 Sa susunod na linya ng code, tumawag ako ng isang function na tinatawag na sscanf, pagpasa sa 26 00:01:18,030 --> 00:01:18,970 apat na mga argumento. 27 00:01:18,970 --> 00:01:25,110 linya, na kung saan ay ang string ng gumagamit nai-type sa, "% i% c", na isang format 28 00:01:25,110 --> 00:01:28,850 string na ako umaasang ang maaaring gumagamit uri, kasunod ang address ng 29 00:01:28,850 --> 00:01:30,920 n, at ang address ng c. 30 00:01:30,920 --> 00:01:34,860 Ngayon sscanf ng layunin sa buhay ay sa katunayan upang i-scan ang isang string naghahanap para sa 31 00:01:34,860 --> 00:01:38,700 partikular na format na iyon ang programmer ay tinukoy bilang ang pangalawang argumento. 32 00:01:38,700 --> 00:01:42,020 Sa kasong ito,% i ay nasa doon, bilang ay% c. 33 00:01:42,020 --> 00:01:46,700 Kaya kung nakatagpo sscanf isang int sa input gumagamit, na int ay maiimbak 34 00:01:46,700 --> 00:01:50,270 sa loob ng variable na tinatawag n, dahil na aming ibinigay bilang sa ikatlong 35 00:01:50,270 --> 00:01:52,810 argumento sa sscanf ang address ng n. 36 00:01:52,810 --> 00:01:56,870 Na nangangahulugan na maaari sscanf sa katunayan pumunta doon, at i-update ang halaga sa ganyang bagay. 37 00:01:56,870 --> 00:01:59,990 >> Ngayon, kung sakaling uri ng gumagamit sa isang bagay na mas 38 00:01:59,990 --> 00:02:01,220 kaysa sa isa o higit pang mga digit - 39 00:02:01,220 --> 00:02:03,570 sa ibang salita, isang pansamantalang trabaho ng isang uri - 40 00:02:03,570 --> 00:02:07,940 na pangalawang variable c, na ang address kami ang pumasa sa sscanf bilang nito ikaapat 41 00:02:07,940 --> 00:02:10,560 ay malagyan din ng argumento. 42 00:02:10,560 --> 00:02:14,220 Ngayon ang bentahe ng pag-check para sa isang karagdagang mga character na mula ang gumagamit ay 43 00:02:14,220 --> 00:02:17,360 na kung siya ay hindi makikipagtulungan, at mga uri sa higit pa sa isang int, 44 00:02:17,360 --> 00:02:20,530 magagawa naming upang makita ito sa ito paraan, dahil sa kasong iyon, sscanf 45 00:02:20,530 --> 00:02:24,860 Pupunta upang bumalik 2, signifying na pareho ng mga placeholder ay napuno 46 00:02:24,860 --> 00:02:25,600 may halaga. 47 00:02:25,600 --> 00:02:30,360 Ngunit umaasa kaming na sscanf sa halip Ibinabalik 1, na nangangahulugang gumagamit ang tanging 48 00:02:30,360 --> 00:02:31,630 ibinigay sa isang int. 49 00:02:31,630 --> 00:02:34,480 >> Ano ang gagawin namin kung sscanf sa katunayan ay nagbabalik 1? 50 00:02:34,480 --> 00:02:39,150 Well, agad naming palayain ang linya na gumagamit ang nai-type sa, at pagkatapos namin 51 00:02:39,150 --> 00:02:42,670 agad na bumalik n, nagkakaroon nakuha sa isang int. 52 00:02:42,670 --> 00:02:47,180 Iba Pa, kung sscanf hindi nagbabalik 1, at ang gumagamit samakatuwid ay hindi makikipagtulungan, 53 00:02:47,180 --> 00:02:51,470 pa rin palayain kami ng hangganan, ngunit namin i-prompt na ngayon ang gumagamit upang subukang muli. 54 00:02:51,470 --> 00:02:55,390 At dahil ikaw pa rin kami sa loob ng na kung hindi man ay walang-katapusang loop, ang proseso 55 00:02:55,390 --> 00:03:00,190 ay muling simulan, at marahil muli, at siguro muli, hanggang sa aktwal na user 56 00:03:00,190 --> 00:03:01,500 Nagbibigay kami ng isang int. 57 00:03:01,500 --> 00:03:21,490