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.