SPEAKER 1: Pieņemsim to apskatīt pie CS50 bibliotēkā, īpaši tās GetInt funkcija. Šeit mums ir degšanas avota kods GetInt. Un paziņo, ka tas nav pārāk garš, un lielākā daļa no tā ir, kamēr cilpa - bezgalīga cilpa pie tam - tikai atgriež vērtību pēc tam, kad mēs esam patiesībā gotten to, ko mēs gaidīts. Let 's staigāt pa to. Paziņojums šeit pirmo reizi, kamēr cilpa sākas. Ievērojiet, nākamais, kas mums ir līnijas kodu kas faktiski zvani GetString, un saglabā atgriešanās vērtību mainīgais, ko sauc līnijas, tipa virkni. Mēs pēc tam darīt mazliet veselība pārbaudītu. Ja līnijas == null, tad mēs savādi atgriezties INT_MAX. Tagad izrādās, ka INT_MAX ir īpaša pastāvīga deklarēta citur , kas nosaka iespējas lielākā int, ka jūs varat pārstāvēt programma, kā šis. Tagad mēs esam patvaļīgi nolēma atgriezties INT_MAX kā pastiprinātas vērtība veidu, viens, ka mēs esam rezervēts nozīmē kļūda ir noticis. Tā cena, ko maksājam, protams, ir ka GetInt nevar acīmredzot nav faktiski atgriezties virkni tik liela kā INT_MAX, jo pat tad, ja tā vēlas, ka atgriešanās vērtība patiešām jāinterpretē zvanītājs - tas, kurš ir, izmantojot GetInt - kā kļūda kaut kāda. Nākamais, ievērosiet, ka es esmu deklarēts int n, un char c. Šajā nākamajā rindā kodu, es aicinu funkciju sauc sscanf, kas iet četri argumenti. līnija, kas ir string lietotāja ievadījis, "% i% c", kas ir formāts virkne, kas es esmu gaidījis lietotājs var tipa, kam seko adresi n, un adresi c. Tagad sscanf ir mērķis dzīvē ir patiešām skenēt virkni meklē īpaši formāts, programmētājs ir noteikta kā šo otro argumentu. Šajā gadījumā,% i ir tur, jo ir% c. Tātad, ja sscanf sastopas int lietotāja ievadi, kas int tiks saglabāti iekšpusē mainīgo sauc n, jo mums ir paredzēts kā trešais arguments sscanf adresi n. Kas nozīmē, ka sscanf tiešām var iet tur, un atjaunināt vērtību tajā. Tagad, ja lietotājs veidi kaut ko vairāk izņemot vienu vai vairākiem cipariem - citiem vārdiem sakot, char kaut kāda - ka otrais mainīgais c, kuru adrese mēs nonāca sscanf kā ceturtais arguments tiks apdzīvots. Tagad otrādi ir pārbaudīt papildu raksturs no lietotāja, ir ka, ja viņš vai viņa nevēlas sadarboties, un veidi vairāk nekā tikai int, mēs varētu atklāt to šajā veidā, jo šajā gadījumā, sscanf gatavojas atgriezties 2, kas norāda, ka abas vietturi bija aizpildītas ar vērtībām. Bet mēs ceram, ka sscanf vietā atgriež 1, kas nozīmē, ka lietotājs tikai sniedza int. Ko mēs darām, ja sscanf tiešām atgriežas 1? Nu, mēs uzreiz atbrīvotu līniju, kas lietotājs ievadījis, un tad mēs nekavējoties atgriezties n, kam gotten int. Cits, ja sscanf neatgriežas 1, un lietotājs tādējādi nesadarbojās, mēs joprojām atbrīvotu līniju, bet mēs Tagad ātru lietotājam, lai mēģinātu vēlreiz. Un tāpēc, ka mēs joprojām esam iekšā, ka citādi bezgalīga cilpa, process sāksies no jauna, un varbūt atkal, un varbūt atkal, kamēr lietotājs faktiski sniedz mums int.