>> SPIKA 1: Hebu tuangalie katika maktaba CS50,
hasa GetInt kazi yake.
Hapa tuna chanzo halisi kanuni kwa ajili ya GetInt.
Tena, ona kwamba si muda mrefu sana, na zaidi ya hayo hufanya wakati kitanzi -
usio kitanzi wakati huo - kwamba tu anarudi thamani mara moja tumekuwa kweli
kujipatia nini sisi ilivyotarajiwa.
Hebu kutembea kwa njia hiyo.
>> Taarifa juu hapa kwanza, kitanzi wakati huanza.
Taarifa ijayo kwamba tuna mstari wa kanuni kwamba kweli wito GetString,
na maduka ya thamani kurudi katika variable, aitwaye line, kamba aina.
Sisi basi kufanya kidogo ya sanity kuangalia.
Kama line == null, kisha sisi ajabu kurudi INT_MAX.
>> Sasa zinageuka kuwa INT_MAX ni mara kwa mara maalum alitangaza mahali pengine
kwamba unasema mkubwa iwezekanavyo int kwamba unaweza kuwakilisha katika
mpango kama hii.
Sasa tumekuwa kiholela aliamua kurudi INT_MAX kama mwangalizi thamani ya
kila aina, moja kwamba tumekuwa zimehifadhiwa kama maana hitilafu imetokea.
Hivyo bei sisi kulipa, bila shaka, ni kwamba GetInt unaweza inaonekana si
kweli kurudi idadi kubwa kama INT_MAX, kwa sababu hata kama inataka,
kwamba thamani ya kurudi lazima kweli kutafsiriwa na mpigaji -
yeyote ni kwa kutumia GetInt -
kama makosa ya aina fulani.
>> Next, taarifa kwamba nimepata alitangaza int n na char c.
Katika line hii ya pili ya maadili ya, mimi wito kazi kuitwa sscanf, kupita katika
nne hoja.
line, ambayo ni kamba mtumiaji typed katika, "% i% c", ambayo ni format
kamba kwamba mimi nina wanatarajia user nguvu aina, ikifuatiwa na barua pepe ya
n, na barua pepe ya c.
Sasa sscanf kusudi katika maisha ni kweli Scan kamba kuangalia kwa
format fulani kwamba programu ina maalum kama hoja kuwa ya pili.
Katika kesi hiyo,% i ni katika huko, kama ni% c.
Hivyo kama sscanf atakutana na int katika pembejeo mtumiaji, kwamba int kuhifadhiwa
ndani ya variable kuitwa n, kwa sababu tuna zinazotolewa kama tatu
hoja ya sscanf ya barua pepe ya n.
Ambayo ina maana kwamba sscanf unaweza kweli kwenda huko, na update thamani humo.
>> Sasa, katika kesi aina ya mtumiaji katika kitu zaidi
ya tarakimu moja au zaidi -
kwa maneno mengine, char wa aina fulani -
kwamba pili variable c, ambaye anwani sisi kupita katika sscanf kama nne wake
hoja pia kuwa watu wengi.
Sasa suala la mafanikio ya kuangalia kwa tabia ya ziada kutoka kwa mtumiaji ni
kwamba, kama yeye au yeye hana kushirikiana, na aina katika zaidi ya int,
tutaweza kuwa na uwezo wa kuchunguza katika hii namna, kwa sababu katika kesi hiyo, sscanf
ni kwenda na kurudi 2, ikimaanisha kwamba zote za placeholders walijawa
na maadili.
Lakini sisi ni matumaini kwamba sscanf badala anarudi 1, ambayo ina maana user tu
zinazotolewa int.
>> Tufanye nini kama sscanf kweli anarudi 1?
Naam, sisi mara moja bure line kwamba user typed, na kisha sisi
mara moja kurudi n, kuwa kujipatia int.
Mwingine, kama sscanf haina kurudi 1, na user hiyo hawakuwa kushirikiana,
sisi bado bure line, lakini sisi sasa haraka mtumiaji tena.
Na kwa sababu bado tuko ndani ya kwamba vinginevyo usio kitanzi, mchakato
itaanza tena, na labda tena, na labda tena, mpaka user kweli
hutoa sisi int.