>> 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.