SPEAKER 1: Ni rigardu ĉe la CS50 biblioteko, specife lia GetInt funkcio. Ĉi tie ni havos la reala fonto kodo por GetInt. Kaj rimarki ke ĝi ne estas tro longa, kaj plejparto de ĝi konstituas dum buklo - malfinia ciklo ĉe tio - ke nur redonas valoron unufoje ni reale alveninta kion ni atendis. Ni iru tra ĝi. Rimarku tien unue, la dum buklo komencas. Rimarku sekvanta ke ni havas linion de kodo ke efektive nomas GetString, kaj stokas la reveno valoron en variablo, nomata linio, de tipo kordo. Ni do faru iom de prudento ĉekon. Se linio == null, tiam ni scivoleme revenu INT_MAX. Nun ĝi rezultas ke INT_MAX estas speciala konstanta deklaris aliloke kiu specifas la plej granda ebla int ke vi povas reprezenti en programo kiel ĉi tio. Nun ni jam arbitre decidis reveni INT_MAX kiel sentinelo valoro de varojn, kiu jam rezervis kiel signifanta eraro okazis. Do la prezo ni pagas, kompreneble, estas ke GetInt povas ŝajne ne reale resendas numeron tiel granda kiel INT_MAX, ĉar eĉ se ĝi volas, ke reveno valoro devus vere esti interpretitaj de la telefonanto - Kiu estas uzanta GetInt - kiel eraro de iu varo. Venonta, rimarki, ke Mi jam deklaris an int n kaj char c. En ĉi sekva linio de kodo, mi nomas funkcio nomita sscanf, pasante en kvar argumentojn. linio, kiu estas la kordoj de la uzanto tajpitaj en "% i% c", kio estas formato kordo, ke mi atendis la uzanto forteco tipo, sekvis per la adreso de n, kaj la adreso de c. Nun sscanf La celo en la vivo estas ja skani ĉenon serĉante la aparta formato kiun la programisto specifis kiel tiu dua argumento. En ĉi tiu kazo,% i estas en tie, kiel estas% c. Do se sscanf renkontas _int_ en la uzanto enigo, ke int estos stokitaj ene de la variablo nomata n, ĉar Ni provizis kiel la tria argumento por sscanf la adreso de n. Kiu signifas ke sscanf povas ja iri tie, kaj ĝisdatigi la valoron tie. Nun, en tiu kazo la uzanto tajpas en iu pli ol unu aŭ pli da ciferoj - en aliaj vortoj, char de iu speco - ke dua variablo c, kies adreso ni pasis en sscanf kiel ĝia kvara argumento ankaŭ estos popolita. Nun la supra parto de kontrolanta por aldona karaktero de la uzanto estas ke se li aŭ ŝi ne kunlaboras, kaj tipoj en pli ol nura int, ni povos detekti ĝin en tiu maniero, ĉar en tiu kazo, sscanf tuj revenos 2, montrante, ke ambaŭ de la anstataŭiloj satiĝis per valoroj. Sed ni esperis, ke sscanf anstataŭ Revenas 1, kio signifas ke la uzanto nur havigis int. Kion ni faru se sscanf ja revenas 1? Nu, ni tuj liberigi la linio kiu la uzanto tajpas en, kaj tiam ni tuj revenos n, havanta alveninta an int. Alie, se sscanf ne revenos 1, kaj la uzanto por tio ne kunlaboras, ni ankoraŭ liberigi la linion, sed ni nun instigas la uzanton reprovi. Kaj ĉar ni estas ankoraŭ ene de tiu alie senfina ciklo, la procezo komenciĝos denove, kaj eble pli, kaj eble pli, ĝis la uzanto reale havigas al ni int.