2 00:00:00,000 --> 00:00:01,860 >> СПІКЕР 1: Давайце зірнем ў бібліятэцы CS50, 3 00:00:01,860 --> 00:00:05,190 у прыватнасці, яе функцыя GetInt. 4 00:00:05,190 --> 00:00:07,820 Тут мы маем фактычны крыніца код GetInt. 5 00:00:07,820 --> 00:00:12,050 І заўважце, што гэта не занадта доўга, і большасць з іх уяўляе нейкі час цыкла - 6 00:00:12,050 --> 00:00:15,620 бясконцы цыкл пры гэтым - што толькі вяртае значэнне, як толькі мы на самай справе 7 00:00:15,620 --> 00:00:17,400 атрымалі тое, што мы чакалі. 8 00:00:17,400 --> 00:00:18,700 Давайце ісці праз яго. 9 00:00:18,700 --> 00:00:21,650 >> Звярніце ўвагу, тут па-першае, у той час як пачынаецца цыкл. 10 00:00:21,650 --> 00:00:25,390 Звярніце ўвагу, у наступным, што ў нас ёсць радкі кода што на самой справе выклікае GetString, 11 00:00:25,390 --> 00:00:29,620 і захоўвае вяртаецца значэння ў зменная, званая лінія, тып радок. 12 00:00:29,620 --> 00:00:31,210 Затым мы робім трохі ёсць просты тэст. 13 00:00:31,210 --> 00:00:35,770 Калі лінія == NULL, то мы з цікаўнасцю вярнуцца INT_MAX. 14 00:00:35,770 --> 00:00:40,140 >> Цяпер аказваецца, што INT_MAX з'яўляецца спецыяльная канстанта аб'яўлена ў іншым месцы 15 00:00:40,140 --> 00:00:44,030 , Які вызначае максімальна магчымае Int, што можна прадставіць у 16 00:00:44,030 --> 00:00:45,160 Праграма так. 17 00:00:45,160 --> 00:00:49,430 Цяпер мы адвольна вырашыў вярнуцца INT_MAX як значэнне дазорнай з 18 00:00:49,430 --> 00:00:53,120 віды, той, які мы абаронены як гэта азначае, што адбылася памылка. 19 00:00:53,120 --> 00:00:56,230 Такім чынам, цана, якую мы плаціць, вядома, што GetInt відаць, не могуць 20 00:00:56,230 --> 00:01:01,440 на самай справе вяртаюць лік такога памеру, як INT_MAX, таму што нават калі яна хоча, 21 00:01:01,440 --> 00:01:04,730 што вяртаецца значэнне павінна сапраўды інтэрпрэтавацца якая выклікае - 22 00:01:04,730 --> 00:01:06,260 хто выкарыстоўвае GetInt - 23 00:01:06,260 --> 00:01:09,340 як памылка нейкі. 24 00:01:09,340 --> 00:01:13,840 >> Далей, звярніце ўвагу, што я абвясціў Int N і сімвал с. 25 00:01:13,840 --> 00:01:18,030 У гэтым наступным радку кода, я называю Функцыя называецца Sscanf, перадаючы 26 00:01:18,030 --> 00:01:18,970 чатыры аргументу. 27 00:01:18,970 --> 00:01:25,110 лінія, якая з'яўляецца радок карыстальніка ўвялі ў "% I% З", які з'яўляецца фарматам 28 00:01:25,110 --> 00:01:28,850 Радок, я чакаю элемент можа тып, за якім варта адрас 29 00:01:28,850 --> 00:01:30,920 п, а таксама адрас ст. 30 00:01:30,920 --> 00:01:34,860 Цяпер Sscanf'S мэта ў жыцці, сапраўды для сканавання радок шукаеце 31 00:01:34,860 --> 00:01:38,700 канкрэтны фармат, што праграміст удакладніў, як гэтага другога аргументу. 32 00:01:38,700 --> 00:01:42,020 У гэтым выпадку,% I знаходзіцца ў там, як% с. 33 00:01:42,020 --> 00:01:46,700 Так што калі Sscanf сустракае Int ў ўваход карыстальніка, што унутр будзе захоўвацца 34 00:01:46,700 --> 00:01:50,270 ўнутры зменнай называецца п, таму што мы забяспечылі як трэці 35 00:01:50,270 --> 00:01:52,810 Аргумент Sscanf адрас п. 36 00:01:52,810 --> 00:01:56,870 Гэта азначае, што Sscanf сапраўды можа пайсці там, і абнавіць значэнне ў ім. 37 00:01:56,870 --> 00:01:59,990 >> Зараз, у выпадку карыстач уводзіць ў нешта большае, 38 00:01:59,990 --> 00:02:01,220 чым адна або некалькі лічбаў - 39 00:02:01,220 --> 00:02:03,570 іншымі словамі, сімвал нейкі - 40 00:02:03,570 --> 00:02:07,940 што другая зменная з, чый адрас мы прайшлі ў Sscanf як чацвёрты 41 00:02:07,940 --> 00:02:10,560 аргумент таксама будзе заселеная. 42 00:02:10,560 --> 00:02:14,220 Зараз з ног праверак Дадатковы персанаж ад карыстальніка з'яўляецца 43 00:02:14,220 --> 00:02:17,360 што калі ён або яна не будзе супрацоўнічаць, і тыпы ў больш, чым проста Int, 44 00:02:17,360 --> 00:02:20,530 мы будзем у стане выявіць яго ў гэтым чынам, паколькі ў гэтым выпадку, Sscanf 45 00:02:20,530 --> 00:02:24,860 збіраецца вярнуцца 2, паказваючы, што абодва запаўняльнікаў былі запоўненыя 46 00:02:24,860 --> 00:02:25,600 са значэннямі. 47 00:02:25,600 --> 00:02:30,360 Але мы спадзяемся, што Sscanf замест вяртае 1, што азначае, толькі карыстачу 48 00:02:30,360 --> 00:02:31,630 прадаставіў Int. 49 00:02:31,630 --> 00:02:34,480 >> Што нам рабіць, калі Sscanf сапраўды вяртае 1? 50 00:02:34,480 --> 00:02:39,150 Ну, мы неадкладна вызваліць лінію, карыстач увёў у, і тады мы 51 00:02:39,150 --> 00:02:42,670 неадкладна вярнуцца п, якія маюць атрымаў ліст Int. 52 00:02:42,670 --> 00:02:47,180 У адваротным выпадку, калі Sscanf не вяртае 1, і карыстальнік таму не супрацоўнічаць, 53 00:02:47,180 --> 00:02:51,470 мы па-ранейшаму вызваліць лінію, але мы цяпер прапануе карыстачу паўтарыць. 54 00:02:51,470 --> 00:02:55,390 І таму, што мы ўсё яшчэ ўнутры, што у адваротным выпадку бясконцы цыкл, працэс 55 00:02:55,390 --> 00:03:00,190 пачнецца зноў, і, магчыма, зноў, і можа быць зноў, пакуль карыстальнік на самай справе 56 00:03:00,190 --> 00:03:01,500 дае нам Int. 57 00:03:01,500 --> 00:03:21,490