2 00:00:00,000 --> 00:00:01,860 >> SPIKA 1: Hebu tuangalie katika maktaba CS50, 3 00:00:01,860 --> 00:00:05,190 hasa GetInt kazi yake. 4 00:00:05,190 --> 00:00:07,820 Hapa tuna chanzo halisi kanuni kwa ajili ya GetInt. 5 00:00:07,820 --> 00:00:12,050 Tena, ona kwamba si muda mrefu sana, na zaidi ya hayo hufanya wakati kitanzi - 6 00:00:12,050 --> 00:00:15,620 usio kitanzi wakati huo - kwamba tu anarudi thamani mara moja tumekuwa kweli 7 00:00:15,620 --> 00:00:17,400 kujipatia nini sisi ilivyotarajiwa. 8 00:00:17,400 --> 00:00:18,700 Hebu kutembea kwa njia hiyo. 9 00:00:18,700 --> 00:00:21,650 >> Taarifa juu hapa kwanza, kitanzi wakati huanza. 10 00:00:21,650 --> 00:00:25,390 Taarifa ijayo kwamba tuna mstari wa kanuni kwamba kweli wito GetString, 11 00:00:25,390 --> 00:00:29,620 na maduka ya thamani kurudi katika variable, aitwaye line, kamba aina. 12 00:00:29,620 --> 00:00:31,210 Sisi basi kufanya kidogo ya sanity kuangalia. 13 00:00:31,210 --> 00:00:35,770 Kama line == null, kisha sisi ajabu kurudi INT_MAX. 14 00:00:35,770 --> 00:00:40,140 >> Sasa zinageuka kuwa INT_MAX ni mara kwa mara maalum alitangaza mahali pengine 15 00:00:40,140 --> 00:00:44,030 kwamba unasema mkubwa iwezekanavyo int kwamba unaweza kuwakilisha katika 16 00:00:44,030 --> 00:00:45,160 mpango kama hii. 17 00:00:45,160 --> 00:00:49,430 Sasa tumekuwa kiholela aliamua kurudi INT_MAX kama mwangalizi thamani ya 18 00:00:49,430 --> 00:00:53,120 kila aina, moja kwamba tumekuwa zimehifadhiwa kama maana hitilafu imetokea. 19 00:00:53,120 --> 00:00:56,230 Hivyo bei sisi kulipa, bila shaka, ni kwamba GetInt unaweza inaonekana si 20 00:00:56,230 --> 00:01:01,440 kweli kurudi idadi kubwa kama INT_MAX, kwa sababu hata kama inataka, 21 00:01:01,440 --> 00:01:04,730 kwamba thamani ya kurudi lazima kweli kutafsiriwa na mpigaji - 22 00:01:04,730 --> 00:01:06,260 yeyote ni kwa kutumia GetInt - 23 00:01:06,260 --> 00:01:09,340 kama makosa ya aina fulani. 24 00:01:09,340 --> 00:01:13,840 >> Next, taarifa kwamba nimepata alitangaza int n na char c. 25 00:01:13,840 --> 00:01:18,030 Katika line hii ya pili ya maadili ya, mimi wito kazi kuitwa sscanf, kupita katika 26 00:01:18,030 --> 00:01:18,970 nne hoja. 27 00:01:18,970 --> 00:01:25,110 line, ambayo ni kamba mtumiaji typed katika, "% i% c", ambayo ni format 28 00:01:25,110 --> 00:01:28,850 kamba kwamba mimi nina wanatarajia user nguvu aina, ikifuatiwa na barua pepe ya 29 00:01:28,850 --> 00:01:30,920 n, na barua pepe ya c. 30 00:01:30,920 --> 00:01:34,860 Sasa sscanf kusudi katika maisha ni kweli Scan kamba kuangalia kwa 31 00:01:34,860 --> 00:01:38,700 format fulani kwamba programu ina maalum kama hoja kuwa ya pili. 32 00:01:38,700 --> 00:01:42,020 Katika kesi hiyo,% i ni katika huko, kama ni% c. 33 00:01:42,020 --> 00:01:46,700 Hivyo kama sscanf atakutana na int katika pembejeo mtumiaji, kwamba int kuhifadhiwa 34 00:01:46,700 --> 00:01:50,270 ndani ya variable kuitwa n, kwa sababu tuna zinazotolewa kama tatu 35 00:01:50,270 --> 00:01:52,810 hoja ya sscanf ya barua pepe ya n. 36 00:01:52,810 --> 00:01:56,870 Ambayo ina maana kwamba sscanf unaweza kweli kwenda huko, na update thamani humo. 37 00:01:56,870 --> 00:01:59,990 >> Sasa, katika kesi aina ya mtumiaji katika kitu zaidi 38 00:01:59,990 --> 00:02:01,220 ya tarakimu moja au zaidi - 39 00:02:01,220 --> 00:02:03,570 kwa maneno mengine, char wa aina fulani - 40 00:02:03,570 --> 00:02:07,940 kwamba pili variable c, ambaye anwani sisi kupita katika sscanf kama nne wake 41 00:02:07,940 --> 00:02:10,560 hoja pia kuwa watu wengi. 42 00:02:10,560 --> 00:02:14,220 Sasa suala la mafanikio ya kuangalia kwa tabia ya ziada kutoka kwa mtumiaji ni 43 00:02:14,220 --> 00:02:17,360 kwamba, kama yeye au yeye hana kushirikiana, na aina katika zaidi ya int, 44 00:02:17,360 --> 00:02:20,530 tutaweza kuwa na uwezo wa kuchunguza katika hii namna, kwa sababu katika kesi hiyo, sscanf 45 00:02:20,530 --> 00:02:24,860 ni kwenda na kurudi 2, ikimaanisha kwamba zote za placeholders walijawa 46 00:02:24,860 --> 00:02:25,600 na maadili. 47 00:02:25,600 --> 00:02:30,360 Lakini sisi ni matumaini kwamba sscanf badala anarudi 1, ambayo ina maana user tu 48 00:02:30,360 --> 00:02:31,630 zinazotolewa int. 49 00:02:31,630 --> 00:02:34,480 >> Tufanye nini kama sscanf kweli anarudi 1? 50 00:02:34,480 --> 00:02:39,150 Naam, sisi mara moja bure line kwamba user typed, na kisha sisi 51 00:02:39,150 --> 00:02:42,670 mara moja kurudi n, kuwa kujipatia int. 52 00:02:42,670 --> 00:02:47,180 Mwingine, kama sscanf haina kurudi 1, na user hiyo hawakuwa kushirikiana, 53 00:02:47,180 --> 00:02:51,470 sisi bado bure line, lakini sisi sasa haraka mtumiaji tena. 54 00:02:51,470 --> 00:02:55,390 Na kwa sababu bado tuko ndani ya kwamba vinginevyo usio kitanzi, mchakato 55 00:02:55,390 --> 00:03:00,190 itaanza tena, na labda tena, na labda tena, mpaka user kweli 56 00:03:00,190 --> 00:03:01,500 hutoa sisi int. 57 00:03:01,500 --> 00:03:21,490