>> СПІКЕР 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.