2 00:00:00,000 --> 00:00:01,860 >> SPEAKER 1: Pieņemsim to apskatīt pie CS50 bibliotēkā, 3 00:00:01,860 --> 00:00:05,190 īpaši tās GetInt funkcija. 4 00:00:05,190 --> 00:00:07,820 Šeit mums ir degšanas avota kods GetInt. 5 00:00:07,820 --> 00:00:12,050 Un paziņo, ka tas nav pārāk garš, un lielākā daļa no tā ir, kamēr cilpa - 6 00:00:12,050 --> 00:00:15,620 bezgalīga cilpa pie tam - tikai atgriež vērtību pēc tam, kad mēs esam patiesībā 7 00:00:15,620 --> 00:00:17,400 gotten to, ko mēs gaidīts. 8 00:00:17,400 --> 00:00:18,700 Let 's staigāt pa to. 9 00:00:18,700 --> 00:00:21,650 >> Paziņojums šeit pirmo reizi, kamēr cilpa sākas. 10 00:00:21,650 --> 00:00:25,390 Ievērojiet, nākamais, kas mums ir līnijas kodu kas faktiski zvani GetString, 11 00:00:25,390 --> 00:00:29,620 un saglabā atgriešanās vērtību mainīgais, ko sauc līnijas, tipa virkni. 12 00:00:29,620 --> 00:00:31,210 Mēs pēc tam darīt mazliet veselība pārbaudītu. 13 00:00:31,210 --> 00:00:35,770 Ja līnijas == null, tad mēs savādi atgriezties INT_MAX. 14 00:00:35,770 --> 00:00:40,140 >> Tagad izrādās, ka INT_MAX ir īpaša pastāvīga deklarēta citur 15 00:00:40,140 --> 00:00:44,030 , kas nosaka iespējas lielākā int, ka jūs varat pārstāvēt 16 00:00:44,030 --> 00:00:45,160 programma, kā šis. 17 00:00:45,160 --> 00:00:49,430 Tagad mēs esam patvaļīgi nolēma atgriezties INT_MAX kā pastiprinātas vērtība 18 00:00:49,430 --> 00:00:53,120 veidu, viens, ka mēs esam rezervēts nozīmē kļūda ir noticis. 19 00:00:53,120 --> 00:00:56,230 Tā cena, ko maksājam, protams, ir ka GetInt nevar acīmredzot nav 20 00:00:56,230 --> 00:01:01,440 faktiski atgriezties virkni tik liela kā INT_MAX, jo pat tad, ja tā vēlas, 21 00:01:01,440 --> 00:01:04,730 ka atgriešanās vērtība patiešām jāinterpretē zvanītājs - 22 00:01:04,730 --> 00:01:06,260 tas, kurš ir, izmantojot GetInt - 23 00:01:06,260 --> 00:01:09,340 kā kļūda kaut kāda. 24 00:01:09,340 --> 00:01:13,840 >> Nākamais, ievērosiet, ka es esmu deklarēts int n, un char c. 25 00:01:13,840 --> 00:01:18,030 Šajā nākamajā rindā kodu, es aicinu funkciju sauc sscanf, kas iet 26 00:01:18,030 --> 00:01:18,970 četri argumenti. 27 00:01:18,970 --> 00:01:25,110 līnija, kas ir string lietotāja ievadījis, "% i% c", kas ir formāts 28 00:01:25,110 --> 00:01:28,850 virkne, kas es esmu gaidījis lietotājs var tipa, kam seko adresi 29 00:01:28,850 --> 00:01:30,920 n, un adresi c. 30 00:01:30,920 --> 00:01:34,860 Tagad sscanf ir mērķis dzīvē ir patiešām skenēt virkni meklē 31 00:01:34,860 --> 00:01:38,700 īpaši formāts, programmētājs ir noteikta kā šo otro argumentu. 32 00:01:38,700 --> 00:01:42,020 Šajā gadījumā,% i ir tur, jo ir% c. 33 00:01:42,020 --> 00:01:46,700 Tātad, ja sscanf sastopas int lietotāja ievadi, kas int tiks saglabāti 34 00:01:46,700 --> 00:01:50,270 iekšpusē mainīgo sauc n, jo mums ir paredzēts kā trešais 35 00:01:50,270 --> 00:01:52,810 arguments sscanf adresi n. 36 00:01:52,810 --> 00:01:56,870 Kas nozīmē, ka sscanf tiešām var iet tur, un atjaunināt vērtību tajā. 37 00:01:56,870 --> 00:01:59,990 >> Tagad, ja lietotājs veidi kaut ko vairāk 38 00:01:59,990 --> 00:02:01,220 izņemot vienu vai vairākiem cipariem - 39 00:02:01,220 --> 00:02:03,570 citiem vārdiem sakot, char kaut kāda - 40 00:02:03,570 --> 00:02:07,940 ka otrais mainīgais c, kuru adrese mēs nonāca sscanf kā ceturtais 41 00:02:07,940 --> 00:02:10,560 arguments tiks apdzīvots. 42 00:02:10,560 --> 00:02:14,220 Tagad otrādi ir pārbaudīt papildu raksturs no lietotāja, ir 43 00:02:14,220 --> 00:02:17,360 ka, ja viņš vai viņa nevēlas sadarboties, un veidi vairāk nekā tikai int, 44 00:02:17,360 --> 00:02:20,530 mēs varētu atklāt to šajā veidā, jo šajā gadījumā, sscanf 45 00:02:20,530 --> 00:02:24,860 gatavojas atgriezties 2, kas norāda, ka abas vietturi bija aizpildītas 46 00:02:24,860 --> 00:02:25,600 ar vērtībām. 47 00:02:25,600 --> 00:02:30,360 Bet mēs ceram, ka sscanf vietā atgriež 1, kas nozīmē, ka lietotājs tikai 48 00:02:30,360 --> 00:02:31,630 sniedza int. 49 00:02:31,630 --> 00:02:34,480 >> Ko mēs darām, ja sscanf tiešām atgriežas 1? 50 00:02:34,480 --> 00:02:39,150 Nu, mēs uzreiz atbrīvotu līniju, kas lietotājs ievadījis, un tad mēs 51 00:02:39,150 --> 00:02:42,670 nekavējoties atgriezties n, kam gotten int. 52 00:02:42,670 --> 00:02:47,180 Cits, ja sscanf neatgriežas 1, un lietotājs tādējādi nesadarbojās, 53 00:02:47,180 --> 00:02:51,470 mēs joprojām atbrīvotu līniju, bet mēs Tagad ātru lietotājam, lai mēģinātu vēlreiz. 54 00:02:51,470 --> 00:02:55,390 Un tāpēc, ka mēs joprojām esam iekšā, ka citādi bezgalīga cilpa, process 55 00:02:55,390 --> 00:03:00,190 sāksies no jauna, un varbūt atkal, un varbūt atkal, kamēr lietotājs faktiski 56 00:03:00,190 --> 00:03:01,500 sniedz mums int. 57 00:03:01,500 --> 00:03:21,490