СПІКЕР 1: Давайце зірнем ў бібліятэцы CS50, у прыватнасці, яе функцыя GetInt. Тут мы маем фактычны крыніца код GetInt. І заўважце, што гэта не занадта доўга, і большасць з іх уяўляе нейкі час цыкла - бясконцы цыкл пры гэтым - што толькі вяртае значэнне, як толькі мы на самай справе атрымалі тое, што мы чакалі. Давайце ісці праз яго. Звярніце ўвагу, тут па-першае, у той час як пачынаецца цыкл. Звярніце ўвагу, у наступным, што ў нас ёсць радкі кода што на самой справе выклікае GetString, і захоўвае вяртаецца значэння ў зменная, званая лінія, тып радок. Затым мы робім трохі ёсць просты тэст. Калі лінія == NULL, то мы з цікаўнасцю вярнуцца INT_MAX. Цяпер аказваецца, што INT_MAX з'яўляецца спецыяльная канстанта аб'яўлена ў іншым месцы , Які вызначае максімальна магчымае Int, што можна прадставіць у Праграма так. Цяпер мы адвольна вырашыў вярнуцца INT_MAX як значэнне дазорнай з віды, той, які мы абаронены як гэта азначае, што адбылася памылка. Такім чынам, цана, якую мы плаціць, вядома, што GetInt відаць, не могуць на самай справе вяртаюць лік такога памеру, як INT_MAX, таму што нават калі яна хоча, што вяртаецца значэнне павінна сапраўды інтэрпрэтавацца якая выклікае - хто выкарыстоўвае GetInt - як памылка нейкі. Далей, звярніце ўвагу, што я абвясціў Int N і сімвал с. У гэтым наступным радку кода, я называю Функцыя называецца Sscanf, перадаючы чатыры аргументу. лінія, якая з'яўляецца радок карыстальніка ўвялі ў "% I% З", які з'яўляецца фарматам Радок, я чакаю элемент можа тып, за якім варта адрас п, а таксама адрас ст. Цяпер Sscanf'S мэта ў жыцці, сапраўды для сканавання радок шукаеце канкрэтны фармат, што праграміст удакладніў, як гэтага другога аргументу. У гэтым выпадку,% I знаходзіцца ў там, як% с. Так што калі Sscanf сустракае Int ў ўваход карыстальніка, што унутр будзе захоўвацца ўнутры зменнай называецца п, таму што мы забяспечылі як трэці Аргумент Sscanf адрас п. Гэта азначае, што Sscanf сапраўды можа пайсці там, і абнавіць значэнне ў ім. Зараз, у выпадку карыстач уводзіць ў нешта большае, чым адна або некалькі лічбаў - іншымі словамі, сімвал нейкі - што другая зменная з, чый адрас мы прайшлі ў Sscanf як чацвёрты аргумент таксама будзе заселеная. Зараз з ног праверак Дадатковы персанаж ад карыстальніка з'яўляецца што калі ён або яна не будзе супрацоўнічаць, і тыпы ў больш, чым проста Int, мы будзем у стане выявіць яго ў гэтым чынам, паколькі ў гэтым выпадку, Sscanf збіраецца вярнуцца 2, паказваючы, што абодва запаўняльнікаў былі запоўненыя са значэннямі. Але мы спадзяемся, што Sscanf замест вяртае 1, што азначае, толькі карыстачу прадаставіў Int. Што нам рабіць, калі Sscanf сапраўды вяртае 1? Ну, мы неадкладна вызваліць лінію, карыстач увёў у, і тады мы неадкладна вярнуцца п, якія маюць атрымаў ліст Int. У адваротным выпадку, калі Sscanf не вяртае 1, і карыстальнік таму не супрацоўнічаць, мы па-ранейшаму вызваліць лінію, але мы цяпер прапануе карыстачу паўтарыць. І таму, што мы ўсё яшчэ ўнутры, што у адваротным выпадку бясконцы цыкл, працэс пачнецца зноў, і, магчыма, зноў, і можа быць зноў, пакуль карыстальнік на самай справе дае нам Int.