2 00:00:00,000 --> 00:00:01,860 >> ПРЕДСЕДНИК 1: Хајде да погледамо у ЦС50 библиотеци, 3 00:00:01,860 --> 00:00:05,190 посебно његова Затамњена функција. 4 00:00:05,190 --> 00:00:07,820 Овде имамо стварни извор код за Затамњена. 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 Приметимо да имамо следећу линију кода да заправо позива ГетСтринг, 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 Ако линија == нулл, онда ми радознало врати ИНТ_МАКС. 14 00:00:35,770 --> 00:00:40,140 >> Сада се испоставља да је ИНТ_МАКС Посебан константа проглашена другом месту 15 00:00:40,140 --> 00:00:44,030 да прецизира највећи могући инт да можете представљати у 16 00:00:44,030 --> 00:00:45,160 Програм овако. 17 00:00:45,160 --> 00:00:49,430 Сада смо произвољно смо одлучили да се врате ИНТ_МАКС као сентинел вредност 18 00:00:49,430 --> 00:00:53,120 врсте, онај који смо као задржана што значи Дошло је до грешке. 19 00:00:53,120 --> 00:00:56,230 Дакле, цена коју плаћамо, наравно, није Затамњена да може очигледно не 20 00:00:56,230 --> 00:01:01,440 заправо вратити број као велики као ИНТ_МАКС, јер чак и ако жели да, 21 00:01:01,440 --> 00:01:04,730 да повратак вредност треба стварно тумачити од стране позиваоца - 22 00:01:04,730 --> 00:01:06,260 ко је користећи Затамњена - 23 00:01:06,260 --> 00:01:09,340 као грешке од неке врсте. 24 00:01:09,340 --> 00:01:13,840 >> Даље, приметио да сам проглашен инт н и ц знак. 25 00:01:13,840 --> 00:01:18,030 У овом наредном линију кода, зовем функција зове ссцанф, пролази у 26 00:01:18,030 --> 00:01:18,970 четири аргумента. 27 00:01:18,970 --> 00:01:25,110 линија, која је ниска корисник је откуцан, "% и% ц", који је формат 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 Сада ссцанф је сврха у животу је заиста да скенира ниску тражите 31 00:01:34,860 --> 00:01:38,700 Посебно формат који програмер је наведено као тај други аргумент. 32 00:01:38,700 --> 00:01:42,020 У овом случају,% и је у постоји, као што је% ц. 33 00:01:42,020 --> 00:01:46,700 Дакле, ако наиђе на ссцанф инт у улаз корисника, који ће се чувати инт 34 00:01:46,700 --> 00:01:50,270 унутар променљиве зове н, јер обезбедили смо као трећи 35 00:01:50,270 --> 00:01:52,810 Аргумент да ссцанф адресу н. 36 00:01:52,810 --> 00:01:56,870 Што значи да ссцанф заиста може да иде тамо, и ажурирати вредност у њему. 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 да друга променљива Ц, чија адреса смо прошли у ссцанф као њен четврти 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 да ако он или она не сарађује, и врсте у више него само инт, 44 00:02:17,360 --> 00:02:20,530 ћемо моћи да га открије у овом начин, јер у том случају, ссцанф 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 Али, ми се надамо да ссцанф уместо враћа 1, што значи да само корисник 48 00:02:30,360 --> 00:02:31,630 обезбедио инт. 49 00:02:31,630 --> 00:02:34,480 >> Шта да радимо ако ссцанф заиста враћа 1? 50 00:02:34,480 --> 00:02:39,150 Па, ми смо одмах ослободи линију која корисник откуцао у, а онда смо 51 00:02:39,150 --> 00:02:42,670 одмах врати н, имајући стечен инт. 52 00:02:42,670 --> 00:02:47,180 Иначе, ако се не врати ссцанф 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 нам пружа инт. 57 00:03:01,500 --> 00:03:21,490