1 00:00:00,000 --> 00:00:07,810 2 00:00:07,810 --> 00:00:09,840 >> JASON Hirschhorn: Добре дошли, всички, до седмица 6. 3 00:00:09,840 --> 00:00:14,790 Щастлив съм да ви видя жив и здрав след Quiz 0, защото знам, че 4 00:00:14,790 --> 00:00:15,810 беше малко груб. 5 00:00:15,810 --> 00:00:18,370 Но за щастие, всичко, което Направих невероятно добре. 6 00:00:18,370 --> 00:00:21,680 И така, това е чудесно. 7 00:00:21,680 --> 00:00:25,840 Ако сте в моята секция, дадох най- от вас архивирате вашите викторини вече. 8 00:00:25,840 --> 00:00:28,050 >> A двойка на вас, аз имам среща след края на тренировката. 9 00:00:28,050 --> 00:00:32,360 И ако сте студент разширение и не сте получили вашия викторина обратно 10 00:00:32,360 --> 00:00:35,490 все пак, си TF е вероятно работи по него и класификация, и ще го върна 11 00:00:35,490 --> 00:00:36,490 до вас скоро. 12 00:00:36,490 --> 00:00:39,650 Така че моята удължители студенти, които са гледам точно сега - надявам се живее - 13 00:00:39,650 --> 00:00:42,880 Ще получите вашите викторини скоро, както добре. 14 00:00:42,880 --> 00:00:45,670 >> Нашият дневен ред за днес е, както следва. 15 00:00:45,670 --> 00:00:50,170 Първо, ние ще разгледаме някои ресурси, които CS50 ви предоставя. 16 00:00:50,170 --> 00:00:54,590 Отиваме да премине Quiz 0 следващия, и Аз ще отговоря на всички въпроси на никого 17 00:00:54,590 --> 00:00:57,360 има за конкретни проблеми. 18 00:00:57,360 --> 00:01:02,050 И след това, ние ще се случва през файл I / O и проблем комплект 5. 19 00:01:02,050 --> 00:01:07,360 Тези последните две теми ще вземат съставляват основната част от раздел днес. 20 00:01:07,360 --> 00:01:11,680 >> Сложих този списък до всяка седмица като напомняне за всички вас, но на ядрото 21 00:01:11,680 --> 00:01:14,650 раздел, ние имаме само 90 минути - ние не са в състояние да покрие всичко, което съм 22 00:01:14,650 --> 00:01:16,280 Ще се радвам да се покрие за вас, момчета. 23 00:01:16,280 --> 00:01:21,170 Но ние имаме тон на ресурси за да разчита и както можете да се знае 24 00:01:21,170 --> 00:01:24,000 материала и работата чрез проблема си задава. 25 00:01:24,000 --> 00:01:30,810 >> A напомняне, че имам онлайн текстов кутия, създадена за вас, за да попълните, ако 26 00:01:30,810 --> 00:01:33,250 имате отзиви за мен, както положителни, така и 27 00:01:33,250 --> 00:01:35,180 конструктивно, за раздел. 28 00:01:35,180 --> 00:01:38,600 Това URL се намира точно тук. 29 00:01:38,600 --> 00:01:43,250 Така че, моля, отделете малко време, ако имате някакви обратна връзка, независимо дали по време на секция, 30 00:01:43,250 --> 00:01:48,030 или след това, или след като гледате видеото онлайн, за да ми дадете вашето мнение. 31 00:01:48,030 --> 00:01:52,100 Аз наистина оценявам всички и всичко. 32 00:01:52,100 --> 00:01:55,730 >> Така че аз бях като малки разговори с много от моите 33 00:01:55,730 --> 00:01:59,350 студенти в цялата седмица - както аз ръка назад викторини, говорим за 34 00:01:59,350 --> 00:02:01,480 Разбира се, като видя как се справяте. 35 00:02:01,480 --> 00:02:05,120 И една тема излезе отново и над в говорим за - в 36 00:02:05,120 --> 00:02:05,660 специално - 37 00:02:05,660 --> 00:02:07,710 проблем поставя. 38 00:02:07,710 --> 00:02:13,090 И съм капсулиран тази тема на борда в момента. 39 00:02:13,090 --> 00:02:16,630 >> По същество, има разлика между превръща в нещо, което е 40 00:02:16,630 --> 00:02:19,590 направено правилно и нещо това е направено добре. 41 00:02:19,590 --> 00:02:22,920 Повечето хора са били прави фантастичен от гледна точка на коректност - 42 00:02:22,920 --> 00:02:25,460 5 или 4 по всички psets. 43 00:02:25,460 --> 00:02:27,930 Повечето хора стават тези през цялото време. 44 00:02:27,930 --> 00:02:31,150 >> Въпреки това, само защото сте направили нещо правилно не значи, че съм 45 00:02:31,150 --> 00:02:34,450 направил нещо както елегантно, или ефективно, или като чисто, колкото 46 00:02:34,450 --> 00:02:35,270 би могъл да го направи. 47 00:02:35,270 --> 00:02:36,790 И това е, което дизайнът - 48 00:02:36,790 --> 00:02:39,230 и в по-малка степен, стил - 49 00:02:39,230 --> 00:02:40,450 оси са за това. 50 00:02:40,450 --> 00:02:45,130 Така че аз съм всичко, което бутане, и други TFS се мъчим вас, момчета, не само от своя страна 51 00:02:45,130 --> 00:02:48,320 в неща, които са верни, но се обръщат в нещата, които са кодирани добре. 52 00:02:48,320 --> 00:02:53,060 >> Не прави ненужни за контури, не преизчисляване променливи ако 53 00:02:53,060 --> 00:02:53,800 не е нужно да. 54 00:02:53,800 --> 00:02:58,520 Например, гледайки назад към определен проблем 4, когато пускат тухли на на 55 00:02:58,520 --> 00:03:03,070 екрана, всеки ред - всяка тухла в даден ред има същата Y-координата - 56 00:03:03,070 --> 00:03:04,390 на същата височина координата. 57 00:03:04,390 --> 00:03:07,930 >> Така, че Y-координата не трябва да се изчислява вътре в интериора 58 00:03:07,930 --> 00:03:11,070 вложени за линия, която вероятно сте използвали да поставят тези тухли на екрана. 59 00:03:11,070 --> 00:03:14,030 Необходимо е само да се изчислява всеки път, когато замени на ред, или 60 00:03:14,030 --> 00:03:15,200 премества надолу един ред. 61 00:03:15,200 --> 00:03:19,760 Така че, ако се каже, че има 10 тухли в ред, всяка тухла може да имат едни и същи 62 00:03:19,760 --> 00:03:22,260 Y-координата, и че г-координира просто може да се изчисли 63 00:03:22,260 --> 00:03:23,550 веднъж за всички тях. 64 00:03:23,550 --> 00:03:27,810 >> Той не трябва да се изчислява 10 пъти, нито пък това изчисление нужда 65 00:03:27,810 --> 00:03:30,220 да се случи по отношение на реалното извикване на функция - 66 00:03:30,220 --> 00:03:33,020 новата gracked извикване на функция. 67 00:03:33,020 --> 00:03:37,820 Така че, ако това беше малко объркващо за вие, по-обширно, неща, които 68 00:03:37,820 --> 00:03:40,730 не е необходимо да се случи всеки път минете през за линия не трябва да бъде 69 00:03:40,730 --> 00:03:42,900 сложат примката ЗА, и не трябва да се случва всеки път, когато отидете 70 00:03:42,900 --> 00:03:44,080 през примката ЗА. 71 00:03:44,080 --> 00:03:49,270 >> Друг добър пример дизайн видяхме в Седмица 3 за 15, може да се запази 72 00:03:49,270 --> 00:03:50,500 следите на нула. 73 00:03:50,500 --> 00:03:53,600 Така че, когато се инициализира на борда, вие запишете - в условията на глобална променлива, може би - 74 00:03:53,600 --> 00:03:56,140 Х и Y-координата на нула. 75 00:03:56,140 --> 00:03:57,520 И тогава, когато - 76 00:03:57,520 --> 00:04:00,310 във вашата функция ход, всеки път, когато правите успешен ход, можете да актуализирате 77 00:04:00,310 --> 00:04:02,040 Местоположение на нула. 78 00:04:02,040 --> 00:04:06,240 >> Това ще ви спаси от налага да правя вложени ЗА линии да погледнете през 79 00:04:06,240 --> 00:04:10,700 качат всеки път във вашата функция ход и да намерят нулата, или да се намерят на плочката, 80 00:04:10,700 --> 00:04:12,460 и след това се провери какво е в непосредствена близост до него. 81 00:04:12,460 --> 00:04:16,329 Вместо това, вие трябва местоположението на нула, вие може просто да погледнете по-горе, долу, 82 00:04:16,329 --> 00:04:21,160 и вляво и вдясно от нея, за да намерите плочката, което търсите. 83 00:04:21,160 --> 00:04:24,970 >> Така че по отношение на програмите, ние сме писане, те никога не са достатъчно големи, 84 00:04:24,970 --> 00:04:28,580 че някои от тези дизайнерски решения наистина ще ви затрудни 85 00:04:28,580 --> 00:04:31,670 програма, или да го изпълним по-бавно, или може би дори изчерпване на паметта. 86 00:04:31,670 --> 00:04:35,030 Но ние все още ви бутане момчета да пиша като елегантен и 87 00:04:35,030 --> 00:04:36,450 ефективно код, колкото е възможно. 88 00:04:36,450 --> 00:04:39,910 >> Така че, ако го направите в крайна сметка писмено неща , които имат значително по-голям 89 00:04:39,910 --> 00:04:44,660 обхват, те ще бъдат написани с добра дизайн в допълнение към е правилен. 90 00:04:44,660 --> 00:04:46,300 Така редица имате донесе това. 91 00:04:46,300 --> 00:04:48,560 Това е нещо, което търсим - нещо, което ще продължи да 92 00:04:48,560 --> 00:04:49,840 натиснете момчета нататък. 93 00:04:49,840 --> 00:04:52,460 >> Ако някога имате някакви въпроси относно дизайн на вашата програма, не се колебайте 94 00:04:52,460 --> 00:04:56,870 да достигне до мен, и аз съм щастлив да ходи чрез вашата програма с вас, 95 00:04:56,870 --> 00:05:01,320 и изтъкват някои от дизайна решения, които сте направили, и ще ви даде някои 96 00:05:01,320 --> 00:05:06,240 предложения за това как да се направи дори и по-добри дизайнерски решения. 97 00:05:06,240 --> 00:05:08,870 >> Така че ние ще продължим да говорим за Quiz 0. 98 00:05:08,870 --> 00:05:11,300 Преди да направите това, има ли някой имате някакви въпроси за това какво 99 00:05:11,300 --> 00:05:14,252 Аз бях обхваната досега? 100 00:05:14,252 --> 00:05:21,500 >> [Шумолене NOISE] 101 00:05:21,500 --> 00:05:22,750 >> JASON Hirschhorn: Седем секунди. 102 00:05:22,750 --> 00:05:23,250 OK. 103 00:05:23,250 --> 00:05:24,970 Нека поговорим за Quiz 0 за малко. 104 00:05:24,970 --> 00:05:26,700 Повечето от вас са си Quiz 0 обратно. 105 00:05:26,700 --> 00:05:29,820 Ако не, да се надяваме си спомните малко. 106 00:05:29,820 --> 00:05:34,770 Но ако сте взели Quiz 0, тогава също така има достъп до PDF онлайн в 107 00:05:34,770 --> 00:05:35,890 разтворите проби. 108 00:05:35,890 --> 00:05:39,480 >> Дали някой има някакви въпроси, преди да ние скочи в материал на седмица за 109 00:05:39,480 --> 00:05:41,520 конкретен проблем на Quiz 0 - 110 00:05:41,520 --> 00:05:44,630 Затова отговорът е какво е то? 111 00:05:44,630 --> 00:05:47,255 Има ли някой объркан за нещо? 112 00:05:47,255 --> 00:05:50,230 Дори ако имаш проблем прав, но Просто бих искал аз да го обясня малко 113 00:05:50,230 --> 00:05:52,640 повече, аз съм щастлив да го направи сега. 114 00:05:52,640 --> 00:05:57,800 >> Така че аз помолих вие да са подготвени с някои 115 00:05:57,800 --> 00:05:59,440 мисли за Quiz 0. 116 00:05:59,440 --> 00:06:02,660 Така че, който би искал да ни започна с въпрос или 117 00:06:02,660 --> 00:06:04,655 коментирам Quiz 0? 118 00:06:04,655 --> 00:06:07,435 119 00:06:07,435 --> 00:06:10,410 >> [PAPER шумолене] 120 00:06:10,410 --> 00:06:11,470 >> JASON Hirschhorn: Не всеки Направих перфектно. 121 00:06:11,470 --> 00:06:12,720 Така че знам [смее се] 122 00:06:12,720 --> 00:06:15,950 трябва да има някои въпроси Quiz около 0. 123 00:06:15,950 --> 00:06:27,940 124 00:06:27,940 --> 00:06:28,590 OK. 125 00:06:28,590 --> 00:06:29,210 Да. 126 00:06:29,210 --> 00:06:29,600 Ompica. 127 00:06:29,600 --> 00:06:30,520 >> OMPICA: Номер 10. 128 00:06:30,520 --> 00:06:33,560 >> JASON Hirschhorn: Номер 10. 129 00:06:33,560 --> 00:06:35,400 Кой е номер 10? 130 00:06:35,400 --> 00:06:35,840 >> OMPICA: The - 131 00:06:35,840 --> 00:06:36,420 >> JASON Hirschhorn: I haven't - 132 00:06:36,420 --> 00:06:37,670 >> OMPICA: Включи - 133 00:06:37,670 --> 00:06:40,060 134 00:06:40,060 --> 00:06:42,180 >> JASON Hirschhorn: Номер 10 е осем до I - писмено осем да го правя? 135 00:06:42,180 --> 00:06:42,980 >> OMPICA: Да. 136 00:06:42,980 --> 00:06:43,630 >> JASON Hirschhorn: OK. 137 00:06:43,630 --> 00:06:47,390 Така че още един въпрос, който би могъл да има попита бе съм прозорлив? 138 00:06:47,390 --> 00:06:48,630 Отговорът е да. 139 00:06:48,630 --> 00:06:52,060 В раздел преди теста, аз попитах вие да кодекс, както и Sterling 140 00:06:52,060 --> 00:06:52,980 осем до аз. 141 00:06:52,980 --> 00:06:54,770 Двете от тях се е случило с се появи на теста. 142 00:06:54,770 --> 00:06:57,510 Така че, надявам се, сте платили внимание на това. 143 00:06:57,510 --> 00:07:02,520 >> И ако сте имали, тогава вие ще трябва вероятно се справили добре на тези двамата. 144 00:07:02,520 --> 00:07:06,030 Но осем до I, ние всъщност не код че в този клас, но е отново 145 00:07:06,030 --> 00:07:07,500 попита на теста. 146 00:07:07,500 --> 00:07:13,270 Така че няколко неща, за да вземат имайте предвид, когато кодирате осем до аз. 147 00:07:13,270 --> 00:07:17,320 Първото нещо, на въпроса, беше че ви е необходимо да се провери дали низа 148 00:07:17,320 --> 00:07:20,300 е равна на нула. 149 00:07:20,300 --> 00:07:28,060 >> Няколко души се опитаха да проверите по-късно в програмата, ако и аз бях скоба - 150 00:07:28,060 --> 00:07:30,940 толкова специфичен характер в тази низ - е равна на нула. 151 00:07:30,940 --> 00:07:35,600 Но не забравяйте, че нищожна е по същество - това е добре да се мисли за 152 00:07:35,600 --> 00:07:39,100 нищожна като показалка нула - указател към нула - 153 00:07:39,100 --> 00:07:40,920 някъде в паметта, където Вие никога не може да има достъп. 154 00:07:40,920 --> 00:07:44,730 >> Така че, ако нещо не е равна на нула, вие Знам, че това не е инициализиран, 155 00:07:44,730 --> 00:07:46,430 или там няма нищо. 156 00:07:46,430 --> 00:07:50,950 Така и е Чар звезда, S скоба и е Чар. 157 00:07:50,950 --> 00:07:57,410 Така че има смисъл да се сравни и с нула, но не и аз скоба за нула. 158 00:07:57,410 --> 00:07:59,390 Но отново - така че това е първото нещо, че е трябвало да се направи - 159 00:07:59,390 --> 00:08:03,510 проверка, за да се уверите, че сте в действителност Има реална низ. 160 00:08:03,510 --> 00:08:08,020 >> След това, което искаше да мине през всеки знак в низа. 161 00:08:08,020 --> 00:08:12,500 И така, това ще бъде като скоба и Аз, например, ако аз си е итератор. 162 00:08:12,500 --> 00:08:17,250 И вземи този характер, и получите действителната му стойност. 163 00:08:17,250 --> 00:08:21,800 Можете да го съхранява като знак, но Стойността на ASCII за нула - 164 00:08:21,800 --> 00:08:23,010 нула като характер - 165 00:08:23,010 --> 00:08:25,450 всъщност не е цяло число нула. 166 00:08:25,450 --> 00:08:28,700 Това е някакъв друг номер, който можете да погледни нагоре в таблицата на ASCII. 167 00:08:28,700 --> 00:08:30,790 >> Така един начин да се коригира, че - вероятно най-добрият начин да се коригира 168 00:08:30,790 --> 00:08:33,760 че - се изважда от него стойността характер - 169 00:08:33,760 --> 00:08:35,140 нула като характер. 170 00:08:35,140 --> 00:08:38,490 Така минус апостроф, нула, друг апостроф. 171 00:08:38,490 --> 00:08:44,620 Това ще отнеме независимо от броя имате като знак, и да се получи равна на 172 00:08:44,620 --> 00:08:46,720 броя и реално число. 173 00:08:46,720 --> 00:08:50,300 >> И това е много подобен на подхода много хора е предприела в съответния 174 00:08:50,300 --> 00:08:52,800 проблем комплект 2, с Caesar и Viginere - 175 00:08:52,800 --> 00:08:55,160 тези цифри, когато са ги върти. 176 00:08:55,160 --> 00:08:59,210 Така че, след като го има като номер от нула до девет, а след това - в зависимост от 177 00:08:59,210 --> 00:09:02,750 където тя отива в крайната броя - трябва да го умножете 178 00:09:02,750 --> 00:09:04,120 с мощност от 10. 179 00:09:04,120 --> 00:09:07,340 >> Някои хора се движеха от обратно към отпред, и умножено индивида 180 00:09:07,340 --> 00:09:08,940 номер с мощност от 10. 181 00:09:08,940 --> 00:09:11,160 Някои хора се преместват от на предната към задната - 182 00:09:11,160 --> 00:09:14,430 и така взе най-високите поредни номера първо - 183 00:09:14,430 --> 00:09:18,190 и ще спести тези в глобален брояч променлива. 184 00:09:18,190 --> 00:09:20,880 И след това всеки път, чрез FOR контур, умножете, че гигантска глобална 185 00:09:20,880 --> 00:09:25,640 противодействие на променлива от 10, за да се направи пространство за следващата Чар. 186 00:09:25,640 --> 00:09:28,750 >> Така че това е малко объркващо, без ми да я пиша на дъската. 187 00:09:28,750 --> 00:09:31,550 Но разтвора на пробата е достъпна за вас. 188 00:09:31,550 --> 00:09:32,870 Но тези, които са най-големите неща ние търсехме. 189 00:09:32,870 --> 00:09:36,400 Също така една проверка, за да се уверите, че всеки индивидуален характер наистина е 190 00:09:36,400 --> 00:09:39,780 характер между нула и девет, и не някакъв друг характер, като A, 191 00:09:39,780 --> 00:09:41,160 например. 192 00:09:41,160 --> 00:09:43,150 >> Това бяха нещата, които търсеха в този въпрос. 193 00:09:43,150 --> 00:09:46,510 194 00:09:46,510 --> 00:09:47,980 Това отговаря ли на въпроса ти? 195 00:09:47,980 --> 00:09:49,320 >> OMPICA: Да. 196 00:09:49,320 --> 00:09:50,240 >> JASON Hirschhorn: OK. 197 00:09:50,240 --> 00:09:53,940 Има ли някакви други въпроси Quiz около 0? 198 00:09:53,940 --> 00:09:55,440 Какво ще кажете за съставяне? 199 00:09:55,440 --> 00:09:56,740 Всички съставянето нали? 200 00:09:56,740 --> 00:09:58,370 Не. 201 00:09:58,370 --> 00:09:58,840 Имаше - 202 00:09:58,840 --> 00:10:01,010 [Смее се] 203 00:10:01,010 --> 00:10:03,265 Всякакви въпроси относно процес на компилация? 204 00:10:03,265 --> 00:10:06,050 205 00:10:06,050 --> 00:10:06,966 Wow. 206 00:10:06,966 --> 00:10:11,090 >> [PAPER шумолене] 207 00:10:11,090 --> 00:10:11,520 >> JASON Hirschhorn: Да. 208 00:10:11,520 --> 00:10:11,700 Майкъл. 209 00:10:11,700 --> 00:10:14,140 >> MICHAEL: е номер 7 - на случаен принцип? 210 00:10:14,140 --> 00:10:16,500 >> JASON Hirschhorn: Number 7. 211 00:10:16,500 --> 00:10:20,670 Номер 7 е получите случаен число. 212 00:10:20,670 --> 00:10:21,110 Отлично. 213 00:10:21,110 --> 00:10:25,630 Значи дадено цяло число е и б число, и искате случаен 214 00:10:25,630 --> 00:10:28,710 число между а и б. 215 00:10:28,710 --> 00:10:31,740 Ние всъщност може да напиша тази една на борда, защото това едно 216 00:10:31,740 --> 00:10:33,320 Беше един ред с код - 217 00:10:33,320 --> 00:10:34,390 един начин да го направя. 218 00:10:34,390 --> 00:10:37,810 >> Така че не ни дават drand като функция бихме могли да използваме. 219 00:10:37,810 --> 00:10:38,820 И какво прави drand - 220 00:10:38,820 --> 00:10:40,290 ако приемем, че е бил посят - 221 00:10:40,290 --> 00:10:42,316 какво drand върне? 222 00:10:42,316 --> 00:10:44,840 >> MICHAEL: A плувка между 0.0 и 1.0. 223 00:10:44,840 --> 00:10:45,530 >> JASON Hirschhorn: A номер - да. 224 00:10:45,530 --> 00:10:47,910 A число между 0 и 1. 225 00:10:47,910 --> 00:10:51,760 И така, ние сме В и А. 226 00:10:51,760 --> 00:10:55,480 И тогава ние имаме случайни числа между 0 и 1, предоставени ни от drand. 227 00:10:55,480 --> 00:11:01,480 228 00:11:01,480 --> 00:11:06,630 Някои хора се опитаха да издигнат б, или б минус а, или нещо вътре в тези 229 00:11:06,630 --> 00:11:07,960 скоби. 230 00:11:07,960 --> 00:11:11,210 Това би означавало, че те са аргументи за тази функция. 231 00:11:11,210 --> 00:11:13,450 >> drand не предприема каквито и да било аргументи - като getString прави 232 00:11:13,450 --> 00:11:14,330 Не приемайте никакви аргументи. 233 00:11:14,330 --> 00:11:16,600 Така че това е просто отворете Paren, близо Paren - и че се е 234 00:11:16,600 --> 00:11:17,330 извикване на функция. 235 00:11:17,330 --> 00:11:19,770 И това дава редица между 0 и 1. 236 00:11:19,770 --> 00:11:22,820 Разбира се, ние разполагаме с голям набор които номера могат да бъдат инча 237 00:11:22,820 --> 00:11:28,470 >> Кажете, ако б е 10 и е на 5, ние наистина Искам число с обхват от 5. 238 00:11:28,470 --> 00:11:36,940 Така че следващото нещо, което трябва да направите, е да умножи тази от диапазон б минус. 239 00:11:36,940 --> 00:11:40,380 Така че, ако се приеме, че е умножено. 240 00:11:40,380 --> 00:11:42,590 И това ще ни даде редица в рамките на определен обхват. 241 00:11:42,590 --> 00:11:46,610 И този специфичен диапазон се на разлика между б минус. 242 00:11:46,610 --> 00:11:50,030 >> И най-накрая, че само ще го дам от - казват диапазона между б минус 243 00:11:50,030 --> 00:11:52,520 е 5, това ще ни даде число от 0 до 5. 244 00:11:52,520 --> 00:11:56,000 Но ако в действителност е 5, ние трябва да се засили този диапазон до където е 245 00:11:56,000 --> 00:12:01,380 всъщност трябва да бъде, чрез добавяне на. 246 00:12:01,380 --> 00:12:02,580 Така че, който получава логика правото на. 247 00:12:02,580 --> 00:12:03,745 И след това, ще имате още един въпрос? 248 00:12:03,745 --> 00:12:04,547 >> MICHAEL: Не. 249 00:12:04,547 --> 00:12:06,010 Аз просто се чувствам наистина тъпо точно сега. 250 00:12:06,010 --> 00:12:06,405 [Смее се] 251 00:12:06,405 --> 00:12:06,730 >> JASON Hirschhorn: Не. 252 00:12:06,730 --> 00:12:08,640 Да не се чувстват наистина тъпо. 253 00:12:08,640 --> 00:12:10,560 А броят на хората се бореше с този въпрос. 254 00:12:10,560 --> 00:12:13,920 И след това, друг въпрос е, drand, ти каза, ти дава плувка - 255 00:12:13,920 --> 00:12:14,940 връща плувка. 256 00:12:14,940 --> 00:12:18,020 Но тази функция всъщност попита за цяло число, се връща. 257 00:12:18,020 --> 00:12:23,700 >> Не е нужно да се хвърли този изрично до цяло число, тъй като те 258 00:12:23,700 --> 00:12:29,090 операции ще го третира като всичко плаваш - като число с плаваща запетая. 259 00:12:29,090 --> 00:12:31,570 Подобно на тази воля - дори ако това е цяло число, това ще 260 00:12:31,570 --> 00:12:32,890 се умножава правилно. 261 00:12:32,890 --> 00:12:34,000 Всички размножаването ще работи. 262 00:12:34,000 --> 00:12:35,060 Вие не трябва да го хвърли тук. 263 00:12:35,060 --> 00:12:36,480 Всъщност, вие не трябва да го хвърли. 264 00:12:36,480 --> 00:12:37,310 >> Това би - 265 00:12:37,310 --> 00:12:40,750 ако искате да хвърли брой Това е между 0 и 1 - 266 00:12:40,750 --> 00:12:42,680 случайно число, плаваща точка - 267 00:12:42,680 --> 00:12:47,850 след това може да бъде или само 0 или 1, така че ще загубиш всичко това прецизност. 268 00:12:47,850 --> 00:12:50,120 Но в края на краищата, когато се върнете, той автоматично получава 269 00:12:50,120 --> 00:12:51,620 изпратен обратно като цяло число. 270 00:12:51,620 --> 00:12:56,870 Така че не е нужно да правите кастингът себе си. 271 00:12:56,870 --> 00:13:00,810 >> Така че това е отговорът на този въпрос, номер 7. 272 00:13:00,810 --> 00:13:02,190 Всякакви други въпроси, свързани с Quiz 0? 273 00:13:02,190 --> 00:13:03,300 Да, Ани. 274 00:13:03,300 --> 00:13:05,050 >> АНИ: Когато ние използваме рекурсивно - 275 00:13:05,050 --> 00:13:07,850 когато ние използваме итеративни цикли? 276 00:13:07,850 --> 00:13:10,210 >> JASON Hirschhorn: Когато използвате рекурсивни - толкова по-общ план, 277 00:13:10,210 --> 00:13:14,110 Плюсове и минуси на рекурсия срещу итеративен подход. 278 00:13:14,110 --> 00:13:17,110 Може ли някой да предложи про или против? 279 00:13:17,110 --> 00:13:19,460 Моля? 280 00:13:19,460 --> 00:13:20,140 Не мога никого. 281 00:13:20,140 --> 00:13:22,526 Кой може да предложи професионалист или мошеник? 282 00:13:22,526 --> 00:13:26,963 >> [PAPER шумолене] 283 00:13:26,963 --> 00:13:29,730 >> СТУДЕНТСКИ 1: Recursive е по-малко кодиране - по-малко писане? 284 00:13:29,730 --> 00:13:33,170 >> JASON Hirschhorn: Така че като цяло, рекурсия особено, функция - 285 00:13:33,170 --> 00:13:35,750 или алгоритъм, като се сливат вид - който се поддава 286 00:13:35,750 --> 00:13:37,300 да рекурсивен подход - 287 00:13:37,300 --> 00:13:40,710 може да бъде по-ясно за кодирането рекурсивно. 288 00:13:40,710 --> 00:13:43,940 И просто да има повече смисъл да го направи рекурсивно. 289 00:13:43,940 --> 00:13:46,230 Така че това ще бъде професионалист да рекурсия. 290 00:13:46,230 --> 00:13:46,610 Други? 291 00:13:46,610 --> 00:13:47,467 Да? 292 00:13:47,467 --> 00:13:49,240 >> STUDENT 2: Con да рекурсия - 293 00:13:49,240 --> 00:13:50,940 Той използва повече памет. 294 00:13:50,940 --> 00:13:52,200 >> JASON Hirschhorn: Значи точно така. 295 00:13:52,200 --> 00:13:55,720 A рекурсивна функция ще поддържа добавянето стак рамки до комина. 296 00:13:55,720 --> 00:13:59,690 Така че, ако сте работещи на много номера, и трябва да се обадя тази 297 00:13:59,690 --> 00:14:02,560 функционира много, тогава вие със сигурност ще заемат повече памет, докато 298 00:14:02,560 --> 00:14:05,810 итеративен подход само ще постави един стека кадър в стека, защото 299 00:14:05,810 --> 00:14:08,420 всичко това се случва в рамките на една функция. 300 00:14:08,420 --> 00:14:11,010 >> Всякакви други плюсове и минуси? 301 00:14:11,010 --> 00:14:11,500 Да. 302 00:14:11,500 --> 00:14:12,550 >> STUDENT 3: Плюсове за рекурсия. 303 00:14:12,550 --> 00:14:15,950 Вие не трябва да се определи в предварително колко пъти 304 00:14:15,950 --> 00:14:17,660 код трябва да се повтори. 305 00:14:17,660 --> 00:14:22,810 Вие може да има предварително определен брой пъти, че вие ​​трябва да превъртите, след това 306 00:14:22,810 --> 00:14:26,420 рекурсия е по-добре, защото е необходимо този резултат. 307 00:14:26,420 --> 00:14:27,780 >> JASON Hirschhorn: Мисля, че това е вярно. 308 00:14:27,780 --> 00:14:30,770 Но мисля, че и в двата случая Вие никога няма да - 309 00:14:30,770 --> 00:14:33,290 вие вероятно ще получите някои принос от страна на потребителя. 310 00:14:33,290 --> 00:14:35,990 Или тази функция ще има някакъв вход че ще определи колко пъти го 311 00:14:35,990 --> 00:14:36,730 би трябвало да работи. 312 00:14:36,730 --> 00:14:39,520 Така че, като цяло, може би не е трудно код - дори в един повтарящ се подход - как 313 00:14:39,520 --> 00:14:40,940 много пъти, че линия не трябва да се изпълнява. 314 00:14:40,940 --> 00:14:46,100 315 00:14:46,100 --> 00:14:48,670 >> Имали ли сте друг бяхте мисля за, Ани? 316 00:14:48,670 --> 00:14:49,330 OK. 317 00:14:49,330 --> 00:14:51,650 Така че тези, които са може би две - 318 00:14:51,650 --> 00:14:54,370 най-големият професионалист и най-големите CON да рекурсивно срещу 319 00:14:54,370 --> 00:14:57,080 итеративен подход. 320 00:14:57,080 --> 00:14:57,690 OK. 321 00:14:57,690 --> 00:14:59,465 Нещо друго Quiz 0? 322 00:14:59,465 --> 00:15:08,940 323 00:15:08,940 --> 00:15:09,920 >> Нека продължим. 324 00:15:09,920 --> 00:15:15,260 File I / O. Има чудесен краткотраен тази седмица на файл I / O, която се надяваме, 325 00:15:15,260 --> 00:15:19,270 сте гледали множествена пъти, и се възхищавал. 326 00:15:19,270 --> 00:15:22,910 A много работа отиде в това, и аз съм Чух, че е безумно полезно. 327 00:15:22,910 --> 00:15:25,740 Аз също се включват връзката на този кадър, в случай, че не са имали 328 00:15:25,740 --> 00:15:29,160 шанс да го гледам 10 пъти. 329 00:15:29,160 --> 00:15:35,280 >> Така че, ние ще накратко да разясни на Основните стъпки за отваряне и работа 330 00:15:35,280 --> 00:15:38,400 с файлове, и след това ние ще се потопите в проблем за кодиране преди 331 00:15:38,400 --> 00:15:40,400 разглеждането на снимачната площадка проблем. 332 00:15:40,400 --> 00:15:44,330 Така че отново, аз отивам да се сложи това нагоре по екрана, но аз няма да ви говоря за 333 00:15:44,330 --> 00:15:47,630 само за една минута за това, което сме правиш тук с файл I/O-- 334 00:15:47,630 --> 00:15:49,090 какво означава това? 335 00:15:49,090 --> 00:15:55,280 >> Това означава, че ние можем да създадем нашия програми, а след това са нашите програми 336 00:15:55,280 --> 00:16:00,370 изход, и не са направили никакво въздействие върху външния свят на нашата програма. 337 00:16:00,370 --> 00:16:04,630 Но когато започнем работа с файлове - както ги четете в и създаване на 338 00:16:04,630 --> 00:16:10,460 тях - ние можем да имаме някакъв ефект върху свят извън нашата програма. 339 00:16:10,460 --> 00:16:15,440 >> Точно както, ако Microsoft Word не можа да направи каквито и да било документи на Word, след това 340 00:16:15,440 --> 00:16:18,710 веднъж Microsoft Word се откажат, всички ваши работа ще се отиде, и би 341 00:16:18,710 --> 00:16:19,740 наистина е безполезен. 342 00:16:19,740 --> 00:16:23,620 В крайна сметка ние искаме да бъде в състояние да пишат програми, които могат да повлияят на 343 00:16:23,620 --> 00:16:31,350 свят около тях, както чрез предприемане на сложни входове - от гледна точка на файлове и 344 00:16:31,350 --> 00:16:37,080 чрез файлове, а също и създаване на интересен и непреодолими изходи - 345 00:16:37,080 --> 00:16:39,520 по отношение на различни видове файлове. 346 00:16:39,520 --> 00:16:43,730 >> Така че това е защо ние започваме да научите как да работите с файлове. 347 00:16:43,730 --> 00:16:47,080 По-конкретно, какво което правим, е както следва. 348 00:16:47,080 --> 00:16:47,680 Това е много проста. 349 00:16:47,680 --> 00:16:51,530 Има само няколко стъпки, и те са изброени тук, на този код. 350 00:16:51,530 --> 00:16:55,130 Така че ние ще да мине през този кодекс ред по ред. 351 00:16:55,130 --> 00:16:57,630 >> Първо, вие виждате подчерта - 352 00:16:57,630 --> 00:17:01,330 когато работите с файл, независимо от вида на файла, то е, 353 00:17:01,330 --> 00:17:02,670 трябва да го отворите. 354 00:17:02,670 --> 00:17:05,130 И това е с призив за Fopen - 355 00:17:05,130 --> 00:17:05,950 точно тук. 356 00:17:05,950 --> 00:17:07,980 Можете да включва името на файла. 357 00:17:07,980 --> 00:17:11,930 Ако файлът не е във вашия указател, или папката, където тази програма 358 00:17:11,930 --> 00:17:15,910 животи, тогава вие също трябва да се включат път до мястото, където този файл е. 359 00:17:15,910 --> 00:17:19,099 >> Отиваме да се предположи, че това файл, наречен "text.txt" - 360 00:17:19,099 --> 00:17:24,220 обикновен текстов документ - е в режим същата папка като тази програма е. 361 00:17:24,220 --> 00:17:26,859 Така че, това е друго нещо, за да се запази в предвид - че, ако искате да отворите файл 362 00:17:26,859 --> 00:17:30,050 някъде другаде, действително имате нужда да включва местоположението му. 363 00:17:30,050 --> 00:17:33,520 >> Второ, може да премине аргумент за FОтваряне на, и това е, което искате да направите, 364 00:17:33,520 --> 00:17:34,620 с файла. 365 00:17:34,620 --> 00:17:38,450 Има три основни доводи, че ти започваш да се премине към Fopen. 366 00:17:38,450 --> 00:17:40,060 Кой може да ми даде тези три? 367 00:17:40,060 --> 00:17:44,960 368 00:17:44,960 --> 00:17:47,130 Кой може да ми даде една от тях? 369 00:17:47,130 --> 00:17:48,130 Да. 370 00:17:48,130 --> 00:17:50,010 >> STUDENT 4: Името на файла? 371 00:17:50,010 --> 00:17:50,440 >> JASON Hirschhorn: Съжалявам. 372 00:17:50,440 --> 00:17:55,490 Три основни доводи можете да преминават като втори аргумент на Fopen. 373 00:17:55,490 --> 00:17:57,060 Прав си - името на файла е първият аргумент. 374 00:17:57,060 --> 00:18:01,620 Но на втория аргумент да Fopen са общо три струни, и - да. 375 00:18:01,620 --> 00:18:02,210 Aleja. 376 00:18:02,210 --> 00:18:03,490 >> Aleja: А за добавяне. 377 00:18:03,490 --> 00:18:06,840 >> JASON Hirschhorn: A, ако искате да добавите към файл, който вече съществува. 378 00:18:06,840 --> 00:18:07,810 >> STUDENT 5: R за четене. 379 00:18:07,810 --> 00:18:09,930 >> JASON Hirschhorn: R, ако Искам да се чете от файл. 380 00:18:09,930 --> 00:18:10,670 >> STUDENT 6: W за запис. 381 00:18:10,670 --> 00:18:12,840 >> JASON Hirschhorn: И w, ако искам да пиша във файл. 382 00:18:12,840 --> 00:18:17,570 Така че в този случай, ние пишеш до файла, така че ние имаме вата 383 00:18:17,570 --> 00:18:22,360 Можете да го отворите, вие също трябва да запишете подаде някъде, и това е с 384 00:18:22,360 --> 00:18:26,000 код към лявата страна на оператора за присвояване - 385 00:18:26,000 --> 00:18:31,220 Аз съм създаване указател към файл нарича, в този случай, файл. 386 00:18:31,220 --> 00:18:36,070 >> Ние няма да се притеснявате какво това всички капачки FILE нещо е. 387 00:18:36,070 --> 00:18:40,600 Достатъчно е да се каже, това е дълъг поток от нули и единици. 388 00:18:40,600 --> 00:18:44,970 И това е, как ние ще се го оперират и да го разбере. 389 00:18:44,970 --> 00:18:47,300 >> Следващото нещо, което трябва да направим - и това е изключително важно - 390 00:18:47,300 --> 00:18:49,070 всеки път, когато отворите файл - 391 00:18:49,070 --> 00:18:54,250 В действителност, всеки път, когато ти се обадя изчистване, за Например, и да получите някои памет и опитайте 392 00:18:54,250 --> 00:18:57,980 и да го запишете в указател, винаги искате да проверите за да сте сигурни, че това 393 00:18:57,980 --> 00:19:00,230 функция не се върне нулева. 394 00:19:00,230 --> 00:19:05,230 >> Така че в този случай, ние се проверка, за да се направи сигурни, че ние всъщност отвори 395 00:19:05,230 --> 00:19:10,230 подаде правилно, и имаше няма грешка в нашата програма. 396 00:19:10,230 --> 00:19:15,160 На следващо място, след като ние сме проверени, за да се уверите, че имаме работа файл, ние можем 397 00:19:15,160 --> 00:19:18,520 пишете, или се отчита, или да приложи към преписката. 398 00:19:18,520 --> 00:19:24,270 В този случай, аз съм просто печат една линия до този файл. 399 00:19:24,270 --> 00:19:25,450 >> Как мога да разбера това? 400 00:19:25,450 --> 00:19:27,990 Е, аз съм с помощта на тази функция наречен fprintf. 401 00:19:27,990 --> 00:19:30,970 Всички функции, които ще използват при писане на, или четене от, или 402 00:19:30,970 --> 00:19:34,950 манипулиране на файлове ще бъде подобна на функции, които сте виждали и преди, но 403 00:19:34,950 --> 00:19:38,420 започне с буквата F, престои файл. 404 00:19:38,420 --> 00:19:43,440 И fprintf, за разлика от нашия нормален печат ап, отнема един допълнителен аргумент, 405 00:19:43,440 --> 00:19:47,800 и това е файл, където можете искате да отпечатате тази линия, за да. 406 00:19:47,800 --> 00:19:50,640 >> Аз нямам нищо, за да правото на Ohai. 407 00:19:50,640 --> 00:19:52,860 Аз не разполагат с трети аргумент за ФОРМАТ - 408 00:19:52,860 --> 00:19:57,030 или втория аргумент да ФОРМАТ, на третият аргумент на fprintf, защото аз 409 00:19:57,030 --> 00:19:59,480 нямат никакви контейнери тук. 410 00:19:59,480 --> 00:20:01,070 Аз не съм включително всички променливи. 411 00:20:01,070 --> 00:20:06,070 Но отново, fprintf и всички тези файл функции, които работят с файлове 412 00:20:06,070 --> 00:20:09,820 обикновено ще се нуждаят файла , на която те са оперативни. 413 00:20:09,820 --> 00:20:15,960 >> И накрая, последната важното е да се направите, е да прекрати преписката, точно като 414 00:20:15,960 --> 00:20:19,530 с - всеки път, когато ние изчистване нещо, ние искаме да се освободи нещо, за да не 415 00:20:19,530 --> 00:20:22,730 има изтичане на памет - ние искаме да закрие нашия файл. 416 00:20:22,730 --> 00:20:28,180 Ако тази програма излезе без затваряне файла, шансовете са, нищо няма да отидете 417 00:20:28,180 --> 00:20:30,050 обърка, особено ако тя Беше малък файл. 418 00:20:30,050 --> 00:20:35,020 >> Но това със сигурност е добро кодиране стил и практика винаги да затворите файл 419 00:20:35,020 --> 00:20:38,050 , когато сте готови да я използвате. 420 00:20:38,050 --> 00:20:43,630 Така че това е на основите на файл I / O. Вие вероятно сте виждали преди, или 421 00:20:43,630 --> 00:20:45,710 го гледахме в тази фантастична кратко. 422 00:20:45,710 --> 00:20:48,410 Дали някой има някакви въпроси, преди да отиваме в някаква практика кодиране 423 00:20:48,410 --> 00:20:51,800 проблеми, около файл I / O или стъпки, аз току-що преминаха? 424 00:20:51,800 --> 00:21:00,198 425 00:21:00,198 --> 00:21:03,162 >> [ТИПИЗИРАНЕ SOUNDS] 426 00:21:03,162 --> 00:21:04,150 >> JASON Hirschhorn: ли имам един въпрос, Ави? 427 00:21:04,150 --> 00:21:04,660 >> AVI: Не. 428 00:21:04,660 --> 00:21:04,740 >> JASON Hirschhorn: OK. 429 00:21:04,740 --> 00:21:06,746 Отивам да се изчака още един седем секунди. 430 00:21:06,746 --> 00:21:07,590 [Смее се] 431 00:21:07,590 --> 00:21:08,620 Това е един наистина добър съвет. 432 00:21:08,620 --> 00:21:10,750 Вие, момчета, просто не обичат задаване на въпроси. 433 00:21:10,750 --> 00:21:11,660 Това е добре. 434 00:21:11,660 --> 00:21:12,330 OK. 435 00:21:12,330 --> 00:21:17,620 Така че нашият проблем първата практика е, ние сме няма да дублира функцията на 436 00:21:17,620 --> 00:21:22,330 командния ред инструмент, че най-вероятно използван преди - копие - 437 00:21:22,330 --> 00:21:23,500 функцията за копиране. 438 00:21:23,500 --> 00:21:28,050 Ако изпишете CP и след това да го давате две аргументи във вашия терминал, можете да 439 00:21:28,050 --> 00:21:28,980 копиране на файл. 440 00:21:28,980 --> 00:21:31,220 И това е, което ние ще да пиша точно сега. 441 00:21:31,220 --> 00:21:35,830 >> Така че отново, четене на разстояние от този слайд, бих можете да се напише програма, която се 442 00:21:35,830 --> 00:21:38,130 две и само две от командния ред аргументи - 443 00:21:38,130 --> 00:21:40,750 файл източник и файл местоназначение - 444 00:21:40,750 --> 00:21:44,590 и копия на съдържанието на източника файл към целевия файл 445 00:21:44,590 --> 00:21:46,960 един байт в даден момент. 446 00:21:46,960 --> 00:21:48,510 Така че това е много, за да поиска. 447 00:21:48,510 --> 00:21:52,200 >> Отново добър подход към това е да се не отиде направо в кода на C, но 448 00:21:52,200 --> 00:21:54,280 се раздели на няколко етапа. 449 00:21:54,280 --> 00:21:58,400 Първо, мисля, че за логиката - точно това, което аз ви моля да се направи - 450 00:21:58,400 --> 00:22:00,620 и да разберат всичко на стъпки на този проблем. 451 00:22:00,620 --> 00:22:04,410 Не е в C, само в някои pseudocode, или дори един мисловен модел на 452 00:22:04,410 --> 00:22:06,030 какво става. 453 00:22:06,030 --> 00:22:10,050 >> След това, след като имате pseudocode надолу, разбера как pseudocode 454 00:22:10,050 --> 00:22:14,600 карти върху инструменти и неща, с които сме се се научили да използват в C. 455 00:22:14,600 --> 00:22:19,070 >> И най-накрая, след като имате всичко, което заедно, можете да пишете на проблема. 456 00:22:19,070 --> 00:22:23,370 Вземете 5 до 10 минути, за да работим по този проблем. 457 00:22:23,370 --> 00:22:25,800 Ще сложа инструкциите обратно в секунда. 458 00:22:25,800 --> 00:22:27,990 И тогава ние ще отидем на pseudocode и код 459 00:22:27,990 --> 00:22:29,230 тя живее като група. 460 00:22:29,230 --> 00:22:31,640 >> Ако имате някакви въпроси, докато сте работи по този въпрос, не се колебайте да се повиши 461 00:22:31,640 --> 00:22:34,260 ръката си, и аз ще дойда около и отговори на тях. 462 00:22:34,260 --> 00:22:37,020 463 00:22:37,020 --> 00:22:39,330 >> STUDENT 7: Мога ли да тласнете парче хартия? 464 00:22:39,330 --> 00:22:41,537 >> JASON Hirschhorn: Какво става? 465 00:22:41,537 --> 00:26:46,047 466 00:26:46,047 --> 00:26:48,043 >> [ТИПИЗИРАНЕ SOUNDS] 467 00:26:48,043 --> 00:26:48,730 >> JASON Hirschhorn: OK. 468 00:26:48,730 --> 00:26:51,710 Нека да отидем на pseudocode първо, и тогава аз ще ви дам няколко по- 469 00:26:51,710 --> 00:26:52,960 минути, за да завърши кодиране. 470 00:26:52,960 --> 00:26:55,540 471 00:26:55,540 --> 00:26:58,650 >> Кой би искал да ме започнете с първа линия на 472 00:26:58,650 --> 00:27:00,030 pseudocode за тази функция? 473 00:27:00,030 --> 00:27:03,330 474 00:27:03,330 --> 00:27:05,740 >> STUDENT 8: Проверете, за да се уверите, че които са ти дадени два файла. 475 00:27:05,740 --> 00:27:06,990 >> JASON Hirschhorn: OK. 476 00:27:06,990 --> 00:27:21,270 477 00:27:21,270 --> 00:27:22,990 И ако ние не сме? 478 00:27:22,990 --> 00:27:25,974 >> STUDENT 8: Бих се върне 0. 479 00:27:25,974 --> 00:27:27,872 >> JASON Hirschhorn: Трябва ли да се върне 0? 480 00:27:27,872 --> 00:27:30,182 >> STUDENT 8: Връща - 481 00:27:30,182 --> 00:27:30,650 нулиране. 482 00:27:30,650 --> 00:27:30,850 Извинете. 483 00:27:30,850 --> 00:27:31,210 >> JASON Hirschhorn: Да. 484 00:27:31,210 --> 00:27:32,710 Вероятно не 0. 485 00:27:32,710 --> 00:27:34,680 Тъй като 0 означава, че всичко е добре. 486 00:27:34,680 --> 00:27:35,030 OK. 487 00:27:35,030 --> 00:27:36,730 Така че това е на първа линия на pseudocode. 488 00:27:36,730 --> 00:27:38,715 Кой е на втора линия на pseudocode? 489 00:27:38,715 --> 00:27:40,630 >> STUDENT 9: Open и на двата файла? 490 00:27:40,630 --> 00:27:41,880 >> JASON Hirschhorn: Отворете и двата файла. 491 00:27:41,880 --> 00:27:49,970 492 00:27:49,970 --> 00:27:50,920 OK? 493 00:27:50,920 --> 00:27:52,850 >> STUDENT 10: Проверете, за да видите ако файлът е NULL? 494 00:27:52,850 --> 00:28:10,906 495 00:28:10,906 --> 00:28:12,580 >> JASON Hirschhorn: Проверете, за да уверите, нито са NULL. 496 00:28:12,580 --> 00:28:15,800 Като настрана - 497 00:28:15,800 --> 00:28:17,540 наклонена черта 0 - 498 00:28:17,540 --> 00:28:18,887 е, че NULL? 499 00:28:18,887 --> 00:28:20,080 >> STUDENT 11: Не. 500 00:28:20,080 --> 00:28:21,190 >> JASON Hirschhorn: Това не е NULL. 501 00:28:21,190 --> 00:28:23,400 Това се нарича NULL терминатор. 502 00:28:23,400 --> 00:28:25,580 Това е всъщност написан само с един л. 503 00:28:25,580 --> 00:28:28,580 Така проверката нещо срещу това - че всъщност е характер - 504 00:28:28,580 --> 00:28:31,710 така проверка нещо срещу това е не е същото като проверка, за да се види дали 505 00:28:31,710 --> 00:28:32,690 се равнява на NULL. 506 00:28:32,690 --> 00:28:34,100 >> И някои хора - 507 00:28:34,100 --> 00:28:36,040 върху техните викторини и техен проблем комплекти - Получих 508 00:28:36,040 --> 00:28:36,890 две от тези объркани. 509 00:28:36,890 --> 00:28:38,830 Но две от тях са в действителност различни. 510 00:28:38,830 --> 00:28:40,220 Един свършва низ - 511 00:28:40,220 --> 00:28:43,210 едно е указател към 0. 512 00:28:43,210 --> 00:28:46,490 >> STUDENT 12: Защо не бихте се провери, за да уверете се, че файловете не са NULL 513 00:28:46,490 --> 00:28:48,670 преди да ги отворите? 514 00:28:48,670 --> 00:28:54,772 >> JASON Hirschhorn: Значи отворен спестява нещо в този файл. 515 00:28:54,772 --> 00:28:57,780 И ако се върнеш тук - 516 00:28:57,780 --> 00:28:59,520 така че тази линия - Fopen - 517 00:28:59,520 --> 00:29:05,300 Ще ви дам един адрес и магазин този адрес във файла, ако тя работи. 518 00:29:05,300 --> 00:29:07,650 Ако тя не работи, той ще съхранява NULL - 519 00:29:07,650 --> 00:29:08,020 >> STUDENT 12: Oh. 520 00:29:08,020 --> 00:29:08,180 OK. 521 00:29:08,180 --> 00:29:08,500 Хванах те. 522 00:29:08,500 --> 00:29:09,050 >> JASON Hirschhorn: В файл. 523 00:29:09,050 --> 00:29:11,990 Така че не може да се провери за NULL преди да сте ги отвори. 524 00:29:11,990 --> 00:29:13,520 NULL означава нещо, което не е направил работят правилно. 525 00:29:13,520 --> 00:29:18,030 526 00:29:18,030 --> 00:29:18,740 OK. 527 00:29:18,740 --> 00:29:22,590 Така че се уверете, нито е това? 528 00:29:22,590 --> 00:29:23,200 Или са? 529 00:29:23,200 --> 00:29:23,770 Какво ще кажеш? 530 00:29:23,770 --> 00:29:24,310 Ще отидем с това. 531 00:29:24,310 --> 00:29:24,520 >> STUDENT 13: Дали. 532 00:29:24,520 --> 00:29:25,020 >> JASON Hirschhorn: Дали? 533 00:29:25,020 --> 00:29:25,930 Нито е? 534 00:29:25,930 --> 00:29:26,350 >> STUDENT 13: Дали. 535 00:29:26,350 --> 00:29:26,390 >> JASON Hirschhorn: OK. 536 00:29:26,390 --> 00:29:28,510 Ние изглежда да има някои консенсус по този въпрос. 537 00:29:28,510 --> 00:29:30,520 Нито е NULL. 538 00:29:30,520 --> 00:29:32,250 OK, следващия ред на pseudocode. 539 00:29:32,250 --> 00:29:33,600 Кой не ми е дал линия все още? 540 00:29:33,600 --> 00:29:37,350 541 00:29:37,350 --> 00:29:38,295 Ние ще те чакам. 542 00:29:38,295 --> 00:29:39,020 Да. 543 00:29:39,020 --> 00:29:40,895 >> STUDENT 14: Трябва да се чете от първия файл? 544 00:29:40,895 --> 00:29:42,290 >> JASON Hirschhorn: OK. 545 00:29:42,290 --> 00:29:46,240 >> STUDENT 14: Или ние използваме fscanf или нещо подобно на първия файл? 546 00:29:46,240 --> 00:29:50,650 >> JASON Hirschhorn: Така че ние искаме да чете от първия файл и - 547 00:29:50,650 --> 00:29:51,900 нека да поставим това право тук. 548 00:29:51,900 --> 00:30:00,600 549 00:30:00,600 --> 00:30:01,880 Прочетете от файла източник. 550 00:30:01,880 --> 00:30:05,370 И тогава, какво ще правим след като сме чете от файла източник? 551 00:30:05,370 --> 00:30:06,620 Някой друг? 552 00:30:06,620 --> 00:30:09,150 553 00:30:09,150 --> 00:30:12,190 >> STUDENT 15: Напишете в целевия файл? 554 00:30:12,190 --> 00:30:22,080 555 00:30:22,080 --> 00:30:25,620 >> JASON Hirschhorn: Ние пишем за целевия файл, и - 556 00:30:25,620 --> 00:30:26,210 OK. 557 00:30:26,210 --> 00:30:30,030 Какво друго ни липсва? 558 00:30:30,030 --> 00:30:32,460 Някой друг, който не ми е дал ред код все пак - на pseudocode. 559 00:30:32,460 --> 00:30:33,510 Да. 560 00:30:33,510 --> 00:30:36,540 >> STUDENT 16: Може би винаги можете да проверите дали има нещо, което да се чете за, 561 00:30:36,540 --> 00:30:37,970 като на следващия ред? 562 00:30:37,970 --> 00:30:39,550 Това са като на следващия ред, виж, ако той съществува. 563 00:30:39,550 --> 00:30:40,660 >> [ELECTRONIC BEEP] 564 00:30:40,660 --> 00:30:41,095 >> JASON Hirschhorn: Oops. 565 00:30:41,095 --> 00:30:43,120 Това е моя журнал софтуер. 566 00:30:43,120 --> 00:30:43,580 Да? 567 00:30:43,580 --> 00:30:44,960 >> STUDENT 16: Да. 568 00:30:44,960 --> 00:30:48,940 >> JASON Hirschhorn: Така че давам ми го още веднъж. 569 00:30:48,940 --> 00:30:51,640 >> STUDENT 16: Проверете дали има още следващия ред от 570 00:30:51,640 --> 00:30:52,920 източник файл за четене. 571 00:30:52,920 --> 00:30:53,500 >> JASON Hirschhorn: OK. 572 00:30:53,500 --> 00:30:56,060 Така че ние не четете линии - четеше байта тук - 573 00:30:56,060 --> 00:30:57,590 но ти си правилно. 574 00:30:57,590 --> 00:31:00,040 Искаме да четат и пишат, докато Няма повече байта. 575 00:31:00,040 --> 00:31:11,430 576 00:31:11,430 --> 00:31:11,735 OK. 577 00:31:11,735 --> 00:31:16,940 И така, те трябва наистина да бъде разчленена малко, защото те са там отдолу. 578 00:31:16,940 --> 00:31:17,470 Нали така? 579 00:31:17,470 --> 00:31:20,620 Докато ние сме от байтове, ние ще чете от файла източник и пишат 580 00:31:20,620 --> 00:31:22,160 до файла местоназначение. 581 00:31:22,160 --> 00:31:24,510 >> И тогава, какво е последното линия на pseudocode? 582 00:31:24,510 --> 00:31:26,380 Някой, който не е дал ми нещо все още. 583 00:31:26,380 --> 00:31:29,270 584 00:31:29,270 --> 00:31:30,260 >> STUDENT 17: Затворете файловете? 585 00:31:30,260 --> 00:31:31,510 >> JASON Hirschhorn: Точно така. 586 00:31:31,510 --> 00:31:36,370 587 00:31:36,370 --> 00:31:37,450 Затворете файловете. 588 00:31:37,450 --> 00:31:38,400 Така че там е нашата pseudocode. 589 00:31:38,400 --> 00:31:41,870 Отивам да се постави в pseudocode Gedit, и след няколко минути ние 590 00:31:41,870 --> 00:31:44,626 ще се кодира това заедно. 591 00:31:44,626 --> 00:33:55,280 592 00:33:55,280 --> 00:33:56,000 >> OK. 593 00:33:56,000 --> 00:33:58,290 Нека да започнем като група. 594 00:33:58,290 --> 00:33:59,940 Nishant, имам моя нов файл. 595 00:33:59,940 --> 00:34:01,130 Току-що откри това. 596 00:34:01,130 --> 00:34:01,880 Untitled документ 1. 597 00:34:01,880 --> 00:34:05,490 Кое е първото нещо, което трябва да направя? 598 00:34:05,490 --> 00:34:07,040 >> Nishant: Включи библиотеки? 599 00:34:07,040 --> 00:34:08,219 >> JASON Hirschhorn: OK. 600 00:34:08,219 --> 00:34:11,070 Какво библиотеки? 601 00:34:11,070 --> 00:34:17,570 >> Nishant: stdio.h, stdlib.h, аз вярвам? 602 00:34:17,570 --> 00:34:18,000 >> JASON Hirschhorn: OK. 603 00:34:18,000 --> 00:34:21,592 Какво е stdlib за? 604 00:34:21,592 --> 00:34:23,010 >> Nishant: Забравих. 605 00:34:23,010 --> 00:34:23,219 >> JASON Hirschhorn: OK. 606 00:34:23,219 --> 00:34:24,179 Така че да включва stdio. 607 00:34:24,179 --> 00:34:28,630 Какво трябва да направя, дори преди Започвам кодиране? 608 00:34:28,630 --> 00:34:29,710 >> Nishant: Напиши заглавие? 609 00:34:29,710 --> 00:34:31,830 >> JASON Hirschhorn: Как мога да го оцветен? 610 00:34:31,830 --> 00:34:34,060 >> [вмъкване VOICES] 611 00:34:34,060 --> 00:34:35,040 >> Nishant: Как да го получите цвят? 612 00:34:35,040 --> 00:34:38,060 >> JASON Hirschhorn: Как мога цветово кодиране? 613 00:34:38,060 --> 00:34:38,570 >> Nishant: Не знам. 614 00:34:38,570 --> 00:34:38,830 Oh. 615 00:34:38,830 --> 00:34:39,389 Спестявате. 616 00:34:39,389 --> 00:34:39,929 >> JASON Hirschhorn: Запазване. 617 00:34:39,929 --> 00:34:40,270 Да. 618 00:34:40,270 --> 00:34:41,760 Аз трябва да го запишете като. C. 619 00:34:41,760 --> 00:34:46,239 Така че, да го запишете на десктопа като cp.c. 620 00:34:46,239 --> 00:34:47,280 Sweet. 621 00:34:47,280 --> 00:34:51,199 И ако искате да получите пълен стил точки, какво трябва да 622 00:34:51,199 --> 00:34:53,085 включва в горната? 623 00:34:53,085 --> 00:34:58,390 >> Nishant: Можете да напишете своето име, името на на програмата, и с цел 624 00:34:58,390 --> 00:34:59,640 на програмата, както и? 625 00:34:59,640 --> 00:35:08,400 626 00:35:08,400 --> 00:35:10,040 >> JASON Hirschhorn: Изглежда добре. 627 00:35:10,040 --> 00:35:10,470 Отлично. 628 00:35:10,470 --> 00:35:12,940 Значи вие сте ни започнаха перфектно. 629 00:35:12,940 --> 00:35:13,720 # Включват - 630 00:35:13,720 --> 00:35:15,365 ние също ще пиша - 631 00:35:15,365 --> 00:35:30,050 632 00:35:30,050 --> 00:35:30,870 OK. 633 00:35:30,870 --> 00:35:33,520 Така че аз мисля, че съм всичко е готово да отида. 634 00:35:33,520 --> 00:35:38,003 Кой е на първа линия на код за мен - или първите редове на код, който 635 00:35:38,003 --> 00:35:41,280 тя ще предприеме, за да отговарят на нашите първи коментира в pseudocode? 636 00:35:41,280 --> 00:35:41,985 You. 637 00:35:41,985 --> 00:35:48,780 >> STUDENT 18: Не трябва ли да е Int argc, и след това слага * ARGV? 638 00:35:48,780 --> 00:35:49,490 >> JASON Hirschhorn: Мисля, че прав си. 639 00:35:49,490 --> 00:35:56,270 Нека променим това да Int основни, отворени скоба, Int argc, запетая, Чар * ARGV? 640 00:35:56,270 --> 00:35:57,150 Подобно на това? 641 00:35:57,150 --> 00:35:57,410 >> STUDENT 18: скоби. 642 00:35:57,410 --> 00:35:58,260 >> JASON Hirschhorn: скоби. 643 00:35:58,260 --> 00:35:59,860 Open скоба, близо скоба, близо родител. 644 00:35:59,860 --> 00:36:00,240 Perfect. 645 00:36:00,240 --> 00:36:02,160 Сега мога да взема аргументи от командния ред. 646 00:36:02,160 --> 00:36:02,430 OK. 647 00:36:02,430 --> 00:36:04,250 Уверете се, не ни дават два файла. 648 00:36:04,250 --> 00:36:07,905 Вие може да ми даде това, както добре. 649 00:36:07,905 --> 00:36:09,180 >> STUDENT 18: Ако argc - 650 00:36:09,180 --> 00:36:11,060 това не е равен 3. 651 00:36:11,060 --> 00:36:14,360 >> JASON Hirschhorn: Ако отворени Paren argc не равно 3? 652 00:36:14,360 --> 00:36:16,970 >> STUDENT 18: Да, вие се върнете 1 или нищо. 653 00:36:16,970 --> 00:36:17,460 >> JASON Hirschhorn: Съжалявам. 654 00:36:17,460 --> 00:36:19,120 >> STUDENT 18: Върни една или нищо. 655 00:36:19,120 --> 00:36:20,270 >> JASON Hirschhorn: Завръщане 1. 656 00:36:20,270 --> 00:36:22,230 OK? 657 00:36:22,230 --> 00:36:22,970 Чудесно. 658 00:36:22,970 --> 00:36:24,290 Отворете и двата файла. 659 00:36:24,290 --> 00:36:26,160 Кой може да ми помогне да отворите двата файла? 660 00:36:26,160 --> 00:36:28,125 Кой не ми е дал код Все още? 661 00:36:28,125 --> 00:36:31,510 662 00:36:31,510 --> 00:36:32,320 Кърт? 663 00:36:32,320 --> 00:36:36,145 >> KURT: Значи всички капачки F-I-L-E източници звезда. 664 00:36:36,145 --> 00:36:39,390 665 00:36:39,390 --> 00:36:40,920 >> JASON Hirschhorn: Отивам за сключване на гласните. 666 00:36:40,920 --> 00:36:41,570 Тези, които са готини. 667 00:36:41,570 --> 00:36:42,716 Това е като Tumblr. 668 00:36:42,716 --> 00:36:44,610 >> STUDENT 18: равно FОтваряне на - 669 00:36:44,610 --> 00:36:46,612 >> JASON Hirschhorn: равно FОтваряне на? 670 00:36:46,612 --> 00:36:49,870 >> STUDENT 18: Отворени скоба, ARGV, отворена скоба. 671 00:36:49,870 --> 00:36:50,055 >> JASON Hirschhorn: Изчакайте. 672 00:36:50,055 --> 00:36:50,240 Извинете. 673 00:36:50,240 --> 00:36:51,050 Open скоба. 674 00:36:51,050 --> 00:36:51,456 OK. 675 00:36:51,456 --> 00:36:53,080 >> STUDENT 18: Да. 676 00:36:53,080 --> 00:36:55,110 ARGV под 1. 677 00:36:55,110 --> 00:36:55,860 >> JASON Hirschhorn: Sub 1? 678 00:36:55,860 --> 00:36:56,140 >> STUDENT 18: Да. 679 00:36:56,140 --> 00:36:58,540 ARGV отворена скоба 1 - 680 00:36:58,540 --> 00:36:59,730 Да. 681 00:36:59,730 --> 00:37:06,470 И тогава запетая, и след това отворете двойно цитат, R, двойни кавички, 682 00:37:06,470 --> 00:37:08,250 близки скоба, точка и запетая. 683 00:37:08,250 --> 00:37:09,450 >> JASON Hirschhorn: Sweet. 684 00:37:09,450 --> 00:37:10,950 А какво да кажем за другата? 685 00:37:10,950 --> 00:37:16,030 >> STUDENT 18: Много подобни, но вместо на S-R-C, че ще ти се обади г-S-T. 686 00:37:16,030 --> 00:37:17,060 >> JASON Hirschhorn: Oo! 687 00:37:17,060 --> 00:37:17,772 Това ми харесва. 688 00:37:17,772 --> 00:37:20,010 >> STUDENT 18: Just D-S-T. Да. 689 00:37:20,010 --> 00:37:23,057 И тогава ARGV, отворена скоба, 2. 690 00:37:23,057 --> 00:37:23,200 Да. 691 00:37:23,200 --> 00:37:26,720 И тогава w вместо R. 692 00:37:26,720 --> 00:37:27,620 Да. 693 00:37:27,620 --> 00:37:29,630 >> JASON Hirschhorn: Great. 694 00:37:29,630 --> 00:37:31,360 Следваща няколко линии. 695 00:37:31,360 --> 00:37:34,040 Също така, ако някой има неща, които да се добавят към линии, които сме правили, чувствайте се свободни да 696 00:37:34,040 --> 00:37:35,690 добавете тези, както добре. 697 00:37:35,690 --> 00:37:37,520 Проверете, за да се уверете, че нито е NULL. 698 00:37:37,520 --> 00:37:41,450 Кой може да ми даде кода трябва да увери, че линията на pseudocode? 699 00:37:41,450 --> 00:37:44,430 700 00:37:44,430 --> 00:37:45,870 Арчър. 701 00:37:45,870 --> 00:37:58,645 >> ARCHER: Ако SRC се равнява на равни NULL или DST равнява на равни 702 00:37:58,645 --> 00:38:04,590 NULL, тогава ще се върне - 703 00:38:04,590 --> 00:38:07,130 704 00:38:07,130 --> 00:38:07,976 >> JASON Hirschhorn: Какво? 705 00:38:07,976 --> 00:38:08,890 >> ARCHER: Завръщане 2? 706 00:38:08,890 --> 00:38:09,760 >> JASON Hirschhorn: Завръщане 2. 707 00:38:09,760 --> 00:38:14,400 Така че, ако са отворени Paren SRC се равнява на се равнява на NULL, или - 708 00:38:14,400 --> 00:38:15,590 каквото и да thing's - тръба? 709 00:38:15,590 --> 00:38:16,346 Pipe? 710 00:38:16,346 --> 00:38:17,140 Ще го наречем тръба. 711 00:38:17,140 --> 00:38:22,340 Pipe, тръба, DST равнява на равни NULL, върнете 2. 712 00:38:22,340 --> 00:38:23,900 OK? 713 00:38:23,900 --> 00:38:26,060 Докато ние сме от байтове - 714 00:38:26,060 --> 00:38:29,820 ние пропуснахме през този етап от на pseudocode част да ходим до тук. 715 00:38:29,820 --> 00:38:31,970 >> Но докато сме навън от байтове - какво означава този звук като? 716 00:38:31,970 --> 00:38:34,680 Какъв тип C структура - 717 00:38:34,680 --> 00:38:36,160 но аз не използвам думата структура, защото ние ще започнете да използвате 718 00:38:36,160 --> 00:38:37,350 че в други случаи - 719 00:38:37,350 --> 00:38:39,495 но C инструмент звучи като? 720 00:38:39,495 --> 00:38:39,970 >> STUDENT 19: A контур. 721 00:38:39,970 --> 00:38:40,980 >> JASON Hirschhorn: A контур. 722 00:38:40,980 --> 00:38:43,060 Звучи като примка. 723 00:38:43,060 --> 00:38:49,670 Така че, който може да ми даде първа линия от Кодекса на линия точно тук? 724 00:38:49,670 --> 00:38:56,320 725 00:38:56,320 --> 00:39:01,980 Можете също така да изберете какъв вид контур, което искате, ако ми дадете 726 00:39:01,980 --> 00:39:03,215 тази линия на код. 727 00:39:03,215 --> 00:39:04,150 Има три вида. 728 00:39:04,150 --> 00:39:06,530 Можете да получите, за да изберете. 729 00:39:06,530 --> 00:39:08,080 Бих предложил един от тези. 730 00:39:08,080 --> 00:39:08,410 Ави. 731 00:39:08,410 --> 00:39:09,230 Кой искаш? 732 00:39:09,230 --> 00:39:09,960 >> AVI: ЗА. 733 00:39:09,960 --> 00:39:11,460 >> JASON Hirschhorn: ЗА. 734 00:39:11,460 --> 00:39:15,180 >> AVI: INT аз се равнява на нула. 735 00:39:15,180 --> 00:39:17,360 >> JASON Hirschhorn: OK. 736 00:39:17,360 --> 00:39:18,570 >> AVI: Тази част аз не съм сигурен за. 737 00:39:18,570 --> 00:39:29,080 Но аз е по-малко от размера на на звезда източник? 738 00:39:29,080 --> 00:39:31,128 Аз не съм сигурен в това. 739 00:39:31,128 --> 00:39:32,580 >> JASON Hirschhorn: OK. 740 00:39:32,580 --> 00:39:35,870 >> AVI: Защото искате размер на файл, нали? 741 00:39:35,870 --> 00:39:41,090 >> JASON Hirschhorn: Така че това най-вероятно няма ни даде размера на действителното 742 00:39:41,090 --> 00:39:43,010 подаде в байтове. 743 00:39:43,010 --> 00:39:47,680 Така че какво друго можехме да направим? 744 00:39:47,680 --> 00:39:48,810 Какво е друг вид на цикъл? 745 00:39:48,810 --> 00:39:50,180 Или трябва да се придържате към примката ЗА? 746 00:39:50,180 --> 00:39:55,350 747 00:39:55,350 --> 00:39:57,900 >> STUDENT 20: Може ли да се направи линия, докато? 748 00:39:57,900 --> 00:40:01,350 И тогава, какво ще направиш е you'd - 749 00:40:01,350 --> 00:40:03,930 защото имаме Чар * за файла. 750 00:40:03,930 --> 00:40:07,950 Така че, ако ние просто продължавай увеличаване че докато ние ще намерите характер NULL в 751 00:40:07,950 --> 00:40:08,500 до края на това? 752 00:40:08,500 --> 00:40:11,130 Или не, е, че не колко файлове работят? 753 00:40:11,130 --> 00:40:14,300 >> JASON Hirschhorn: Значи можем да поддържаме увеличаване на Чар * 754 00:40:14,300 --> 00:40:16,340 докато не намерим NULL - 755 00:40:16,340 --> 00:40:18,580 >> STUDENT 20: По същество продължавай знак по знак, докато не удари 756 00:40:18,580 --> 00:40:21,250 на края на файла. 757 00:40:21,250 --> 00:40:21,600 >> JASON Hirschhorn: Да. 758 00:40:21,600 --> 00:40:22,560 Така че това е, което искаме да правим. 759 00:40:22,560 --> 00:40:24,545 Искаме да продължавайте да четете, характер по своя характер, докато не стигнем до 760 00:40:24,545 --> 00:40:25,080 на края на файла. 761 00:40:25,080 --> 00:40:25,375 >> STUDENT 20: Да. 762 00:40:25,375 --> 00:40:25,860 Намерете - 763 00:40:25,860 --> 00:40:28,540 какъв е края или знак стоп в края на текстов файл. 764 00:40:28,540 --> 00:40:28,620 >> JASON Hirschhorn: OK. 765 00:40:28,620 --> 00:40:30,140 Така че, когато ние стигнем до края на файла - как да знаем, че сме достигнали 766 00:40:30,140 --> 00:40:33,200 края на файл? 767 00:40:33,200 --> 00:40:34,710 Ако аз се обаждам - 768 00:40:34,710 --> 00:40:35,910 така че нека да се върнем назад. 769 00:40:35,910 --> 00:40:37,550 Какво е функция? 770 00:40:37,550 --> 00:40:39,360 Да отидем в този ред точно тук. 771 00:40:39,360 --> 00:40:40,630 Прочетете от файла източник. 772 00:40:40,630 --> 00:40:41,880 Кой може да ми даде тази линия на код? 773 00:40:41,880 --> 00:40:45,592 774 00:40:45,592 --> 00:40:47,590 >> STUDENT 21: Fscanf? 775 00:40:47,590 --> 00:40:49,110 >> JASON Hirschhorn: Fscanf. 776 00:40:49,110 --> 00:40:49,510 OK. 777 00:40:49,510 --> 00:40:52,240 Ами ако искам да чета, много по-специално, един байт? 778 00:40:52,240 --> 00:40:55,012 779 00:40:55,012 --> 00:40:56,860 >> STUDENT 21: Не знам. 780 00:40:56,860 --> 00:40:57,110 >> JASON Hirschhorn: OK. 781 00:40:57,110 --> 00:40:59,380 Дори по-просто, отколкото fscanf - какво е - 782 00:40:59,380 --> 00:41:01,890 Искам да се чете от файл източник? 783 00:41:01,890 --> 00:41:03,720 Прочетете от файл източник. 784 00:41:03,720 --> 00:41:04,850 Какво е функция - да. 785 00:41:04,850 --> 00:41:05,380 >> STUDENT 22: Това е fread? 786 00:41:05,380 --> 00:41:06,070 >> JASON Hirschhorn: Fread. 787 00:41:06,070 --> 00:41:07,550 Мисля, че нека да се придържаме с че едно за сега. 788 00:41:07,550 --> 00:41:10,380 789 00:41:10,380 --> 00:41:13,650 Какви аргументи fread се вземат? 790 00:41:13,650 --> 00:41:17,410 >> STUDENT 22: Вероятно типа на файла, и след това място в досието? 791 00:41:17,410 --> 00:41:19,550 >> JASON Hirschhorn: Какво мога да въведете тук да разбера какъв тип аргументи 792 00:41:19,550 --> 00:41:20,950 fread отнема? 793 00:41:20,950 --> 00:41:23,710 >> ПОВЕЧЕ ОТ УЧЕНИЦИ: Man fread. 794 00:41:23,710 --> 00:41:24,740 >> JASON Hirschhorn: Man fread и неуспешно. 795 00:41:24,740 --> 00:41:25,980 Изглежда, че те излизаш заедно. 796 00:41:25,980 --> 00:41:29,589 Така че fread отнема колко много аргументи? 797 00:41:29,589 --> 00:41:30,920 >> STUDENT 23: Four. 798 00:41:30,920 --> 00:41:32,690 >> JASON Hirschhorn: Отнема четири аргумента. 799 00:41:32,690 --> 00:41:41,100 Това отнема показалеца, размер, както и че нещо, което е странно, а някои файл. 800 00:41:41,100 --> 00:41:42,000 OK? 801 00:41:42,000 --> 00:41:43,990 Нека прочетем за това точно тук. 802 00:41:43,990 --> 00:41:49,370 "Fread Функцията чете н кор елементи на данни, всеки размер байта 803 00:41:49,370 --> 00:41:53,840 дълго, от потока, посочи от поток, съхранението им на мястото 804 00:41:53,840 --> 00:41:56,170 дадена от показалеца. " 805 00:41:56,170 --> 00:41:57,960 >> Така четири аргументи. 806 00:41:57,960 --> 00:42:04,510 Защо не мога просто да копирате това, и да го поставите точно тук. 807 00:42:04,510 --> 00:42:10,060 808 00:42:10,060 --> 00:42:10,770 OK. 809 00:42:10,770 --> 00:42:13,673 Така че, който може да започнете да попълвате тези аргументи за мен? 810 00:42:13,673 --> 00:42:15,840 Ави. 811 00:42:15,840 --> 00:42:17,720 >> AVI: Извадете празнотата. 812 00:42:17,720 --> 00:42:20,530 Казано просто SRC. 813 00:42:20,530 --> 00:42:23,142 Извадете показалеца и звездата. 814 00:42:23,142 --> 00:42:26,102 Сложете SRC. 815 00:42:26,102 --> 00:42:27,050 След това - 816 00:42:27,050 --> 00:42:28,500 >> JASON Hirschhorn: Така че аз отивам да се спре Там ли си, защото това е неправилно. 817 00:42:28,500 --> 00:42:32,590 818 00:42:32,590 --> 00:42:34,710 Прав си с SRC, но където трябва SRC отидете? 819 00:42:34,710 --> 00:42:35,960 >> [вмъкване VOICES] 820 00:42:35,960 --> 00:42:38,976 821 00:42:38,976 --> 00:42:41,610 >> JASON Hirschhorn: тя трябва да отидете тук. 822 00:42:41,610 --> 00:42:43,790 Това е КРБ - нашата SRC е вид. 823 00:42:43,790 --> 00:42:44,610 Нека да разгледаме тук. 824 00:42:44,610 --> 00:42:49,610 Това се пита за тип FILE *, ние всъщност обикновено ги виждаме така. 825 00:42:49,610 --> 00:42:57,630 Така че това се пита за аргумент на Тип на файла * нарича поток, който е SRC. 826 00:42:57,630 --> 00:42:58,480 OK? 827 00:42:58,480 --> 00:43:00,410 >> Какъв размер на неща правят ние искаме да се чете? 828 00:43:00,410 --> 00:43:03,340 Дадох ти това в описание на проблема. 829 00:43:03,340 --> 00:43:04,370 >> STUDENT 24: Един байт в даден момент. 830 00:43:04,370 --> 00:43:05,340 >> JASON Hirschhorn: Един байт. 831 00:43:05,340 --> 00:43:08,205 Колко голям е един байт? 832 00:43:08,205 --> 00:43:11,642 Нейният размер е в байта, така че това, което мога да сложа там? 833 00:43:11,642 --> 00:43:12,910 >> STUDENT 25: One. 834 00:43:12,910 --> 00:43:14,730 >> JASON Hirschhorn: One. 835 00:43:14,730 --> 00:43:17,020 Точно така. 836 00:43:17,020 --> 00:43:19,940 Нейният размер е в единична байт, така 1 е един байт. 837 00:43:19,940 --> 00:43:22,284 Колко искам да прочетете в даден момент. 838 00:43:22,284 --> 00:43:23,520 >> STUDENT 26: One? 839 00:43:23,520 --> 00:43:24,270 >> JASON Hirschhorn: Едно нещо. 840 00:43:24,270 --> 00:43:28,540 Искам да прочета нещо от размера на 1, една хапка в даден момент. 841 00:43:28,540 --> 00:43:32,110 И къде мога да го сложи, след като аз го прочете? 842 00:43:32,110 --> 00:43:35,050 843 00:43:35,050 --> 00:43:36,510 >> STUDENT 27: Дестинация? 844 00:43:36,510 --> 00:43:39,270 >> JASON Hirschhorn: Така че аз не мога да слагам това право в дестинация. 845 00:43:39,270 --> 00:43:40,800 >> STUDENT 28: Ще пут то в трета показалка? 846 00:43:40,800 --> 00:43:41,780 >> STUDENT 27: Към дестинация. 847 00:43:41,780 --> 00:43:42,270 >> JASON Hirschhorn: OK. 848 00:43:42,270 --> 00:43:42,630 Да. 849 00:43:42,630 --> 00:43:46,820 >> STUDENT 29: Можете да декларирате нещо, което да действа като временно съхранение по-рано. 850 00:43:46,820 --> 00:43:47,350 >> JASON Hirschhorn: OK. 851 00:43:47,350 --> 00:43:50,080 Дай ми това. 852 00:43:50,080 --> 00:43:53,930 >> STUDENT 29: Друга файл показалка, може би? 853 00:43:53,930 --> 00:43:54,220 >> JASON Hirschhorn: OK. 854 00:43:54,220 --> 00:43:55,585 Така че това е невалидна звезда - 855 00:43:55,585 --> 00:43:57,750 това е един вид празнота звезда, така че това не е така трябва да бъде файлов манипулатор. 856 00:43:57,750 --> 00:44:02,520 И ако аз съм четене на един байт, където ще бъде едно добро място 857 00:44:02,520 --> 00:44:03,850 да се съхранява един байт? 858 00:44:03,850 --> 00:44:04,660 >> STUDENT 29: An масив? 859 00:44:04,660 --> 00:44:05,770 >> JASON Hirschhorn: масив. 860 00:44:05,770 --> 00:44:07,730 OK. 861 00:44:07,730 --> 00:44:14,040 И какво друго е нещо, което е само размера, един байт? 862 00:44:14,040 --> 00:44:16,980 863 00:44:16,980 --> 00:44:18,060 >> STUDENT 30: A Чар *? 864 00:44:18,060 --> 00:44:18,530 >> STUDENT 29: Да. 865 00:44:18,530 --> 00:44:19,880 >> JASON Hirschhorn: A Чар * не е един байт. 866 00:44:19,880 --> 00:44:20,440 >> STUDENT 29: A Чар. 867 00:44:20,440 --> 00:44:21,810 >> JASON Hirschhorn: A Чар е един байт. 868 00:44:21,810 --> 00:44:22,920 Нали така? 869 00:44:22,920 --> 00:44:26,740 Така че нека наречем този буфер е генерично наименование, използвано за тези неща, за да се съхранява 870 00:44:26,740 --> 00:44:27,910 нещо временно. 871 00:44:27,910 --> 00:44:30,880 Така че аз се създаде буфер. 872 00:44:30,880 --> 00:44:31,150 Нали така? 873 00:44:31,150 --> 00:44:32,990 Но тя не взема празнота *. 874 00:44:32,990 --> 00:44:38,660 Така че може би сте прав, че тя трябва да бъде буфер с размер 0. 875 00:44:38,660 --> 00:44:41,070 Така че тя съхранява един - 876 00:44:41,070 --> 00:44:41,280 прав. 877 00:44:41,280 --> 00:44:43,560 >> Защото това тук - Чар буфер е характер, но 878 00:44:43,560 --> 00:44:45,110 това отнема нищожен * - 879 00:44:45,110 --> 00:44:45,870 указател. 880 00:44:45,870 --> 00:44:50,640 Така че мога да направя това и сега буфер е указател. 881 00:44:50,640 --> 00:44:53,214 Какво друго можех да направя? 882 00:44:53,214 --> 00:44:55,775 >> STUDENT 31: Сложете една звезда до Чар. 883 00:44:55,775 --> 00:44:58,380 >> JASON Hirschhorn: можех Създадохме го Чар *. 884 00:44:58,380 --> 00:45:00,216 OK. 885 00:45:00,216 --> 00:45:03,131 Какво е друго нещо, което можех да направя? 886 00:45:03,131 --> 00:45:04,050 Или да отидем с този един. 887 00:45:04,050 --> 00:45:05,740 Char * буфер, така че това, което да поставя тук? 888 00:45:05,740 --> 00:45:08,290 889 00:45:08,290 --> 00:45:09,310 >> STUDENT 31: Buffer. 890 00:45:09,310 --> 00:45:10,560 >> JASON Hirschhorn: Buffer. 891 00:45:10,560 --> 00:45:12,640 892 00:45:12,640 --> 00:45:14,500 Buffer е указател към Чар. 893 00:45:14,500 --> 00:45:19,480 И в това място, ние сме пускането един байт от нещо, което съм чел. 894 00:45:19,480 --> 00:45:19,980 Да. 895 00:45:19,980 --> 00:45:20,700 Ави. 896 00:45:20,700 --> 00:45:21,230 >> AVI: Само един бърз въпрос. 897 00:45:21,230 --> 00:45:24,440 Искате ли да изчистване буфер? 898 00:45:24,440 --> 00:45:25,930 >> JASON Hirschhorn: Кой може да отговори на този въпрос? 899 00:45:25,930 --> 00:45:30,210 >> STUDENT 32: Е, това наистина не точка за нещо точно сега, така че - 900 00:45:30,210 --> 00:45:32,610 >> JASON Hirschhorn: Но правя ние искаме да го изчистване? 901 00:45:32,610 --> 00:45:35,600 >> STUDENT 32: Ако ви се налага да го направя, че начин, предполагам, да, защото ще са ви нужни 902 00:45:35,600 --> 00:45:36,990 някое място, за да сочи към. 903 00:45:36,990 --> 00:45:38,350 >> JASON Hirschhorn: Обичате ние Трябва да го изчистване? 904 00:45:38,350 --> 00:45:40,580 >> STUDENT 33: Ако ти започваш да се го използвате извън контура. 905 00:45:40,580 --> 00:45:42,524 >> JASON Hirschhorn: Дали ще го използвате извън примката? 906 00:45:42,524 --> 00:45:44,392 >> STUDENT 34: Да. 907 00:45:44,392 --> 00:45:44,860 >> STUDENT 35: Изчакайте. 908 00:45:44,860 --> 00:45:46,980 Искаме ли да го декларира в течение отвъд? 909 00:45:46,980 --> 00:45:50,100 >> JASON Hirschhorn: Така че аз предполагам, че имаме някои псевдо линия, докато тук, че сме 910 00:45:50,100 --> 00:45:51,950 Опитвам се да разбера, че ние все още не са стигнали до. 911 00:45:51,950 --> 00:45:54,710 912 00:45:54,710 --> 00:45:56,010 Ние не трябва да го изчистване. 913 00:45:56,010 --> 00:45:59,310 Ние сме работещи в главната, тя само ще да се използва в този цикъл. 914 00:45:59,310 --> 00:46:00,540 Той не трябва да съществува извън това. 915 00:46:00,540 --> 00:46:02,340 >> Така че може да бъде локална променлива. 916 00:46:02,340 --> 00:46:03,925 Имате указател към локална променлива. 917 00:46:03,925 --> 00:46:07,984 918 00:46:07,984 --> 00:46:09,590 >> STUDENT 36: Но това не е сочещи към нищо. 919 00:46:09,590 --> 00:46:11,540 >> JASON Hirschhorn: Не, това не е инициализира с нищо. 920 00:46:11,540 --> 00:46:12,790 Но ние няма да го използвате също. 921 00:46:12,790 --> 00:46:15,300 Отиваме да се сложи нещо в тя за първи път го използвам. 922 00:46:15,300 --> 00:46:16,580 Така че изглежда OK. 923 00:46:16,580 --> 00:46:17,780 Така че ние не се нуждаем изчистване тук. 924 00:46:17,780 --> 00:46:19,360 И аз мисля, че е ОК, както е. 925 00:46:19,360 --> 00:46:24,350 926 00:46:24,350 --> 00:46:25,790 OK. 927 00:46:25,790 --> 00:46:27,190 Имаме fread линия. 928 00:46:27,190 --> 00:46:28,490 Нека да направим следващия ред. 929 00:46:28,490 --> 00:46:32,984 >> Ако искаме да пиша във файл, какво е добра функция, за да използвате, за да направите това? 930 00:46:32,984 --> 00:46:33,770 >> STUDENT 37: неуспешно? 931 00:46:33,770 --> 00:46:35,140 >> STUDENT 38: Fprintf? 932 00:46:35,140 --> 00:46:36,010 >> JASON Hirschhorn: Fprintf е едно. 933 00:46:36,010 --> 00:46:37,260 Какво е още една? 934 00:46:37,260 --> 00:46:37,680 >> STUDENT 39: неуспешно. 935 00:46:37,680 --> 00:46:38,510 >> JASON Hirschhorn: неуспешно. 936 00:46:38,510 --> 00:46:41,250 И за нашите цели, неуспешно, което видяхме тук, е 937 00:46:41,250 --> 00:46:42,500 вероятно по-добър избор. 938 00:46:42,500 --> 00:46:51,970 939 00:46:51,970 --> 00:46:53,950 Това отнема четири аргументи, както добре. 940 00:46:53,950 --> 00:46:57,570 Nishant, може да ви даде ми аргументи? 941 00:46:57,570 --> 00:47:00,570 >> Nishant: Първият милион става да бъде само буфер. 942 00:47:00,570 --> 00:47:02,210 >> JASON Hirschhorn: OK. 943 00:47:02,210 --> 00:47:06,752 >> Nishant: Вторият милиард години просто ще бъде един. 944 00:47:06,752 --> 00:47:09,510 Трето един ще бъде един. 945 00:47:09,510 --> 00:47:11,470 И четвъртият ще бъде DST. 946 00:47:11,470 --> 00:47:18,010 947 00:47:18,010 --> 00:47:19,550 >> JASON Hirschhorn: Дали някой има някакви въпроси относно тази линия? 948 00:47:19,550 --> 00:47:28,370 949 00:47:28,370 --> 00:47:29,130 Това изглежда добре. 950 00:47:29,130 --> 00:47:29,590 OK. 951 00:47:29,590 --> 00:47:34,250 Така че сега тя изглежда като едно нещо, ние сме липсва - всъщност, нека да напише 952 00:47:34,250 --> 00:47:35,090 тази последна линия. 953 00:47:35,090 --> 00:47:36,300 Затворете файловете. 954 00:47:36,300 --> 00:47:38,880 Кой може да ни довърши писане тези последните две линии? 955 00:47:38,880 --> 00:47:39,120 Да. 956 00:47:39,120 --> 00:47:39,850 Съжаляваме, какво е вашето име? 957 00:47:39,850 --> 00:47:40,580 >> LUCY: Lucy. 958 00:47:40,580 --> 00:47:41,580 >> JASON Hirschhorn: Lucy. 959 00:47:41,580 --> 00:47:47,560 >> LUCY: неуспешно SRC и след това неуспешно дестинация. 960 00:47:47,560 --> 00:47:52,430 >> JASON Hirschhorn: неуспешно, отворена скоба, SRC, близки скоба, точка и запетая. 961 00:47:52,430 --> 00:47:53,680 И неуспешно - 962 00:47:53,680 --> 00:47:57,560 963 00:47:57,560 --> 00:47:58,090 Така ли? 964 00:47:58,090 --> 00:48:01,710 >> LUCY: Open скоби, DST и след точка и запетая. 965 00:48:01,710 --> 00:48:02,520 >> JASON Hirschhorn: Great. 966 00:48:02,520 --> 00:48:04,338 И какво трябва да включва най-накрая? 967 00:48:04,338 --> 00:48:05,210 >> LUCY: Завръщане 0. 968 00:48:05,210 --> 00:48:05,570 >> JASON Hirschhorn: Завръщане 0. 969 00:48:05,570 --> 00:48:06,820 Трябва ли да се? 970 00:48:06,820 --> 00:48:10,560 971 00:48:10,560 --> 00:48:12,590 Само един въпрос. 972 00:48:12,590 --> 00:48:14,957 Трябва ли да включва връщането на 0? 973 00:48:14,957 --> 00:48:16,240 >> ПОВЕЧЕ ОТ УЧЕНИЦИ: Не. 974 00:48:16,240 --> 00:48:16,430 >> JASON Hirschhorn: Не. 975 00:48:16,430 --> 00:48:18,090 Главна прави това автоматично Ако стигнете до края. 976 00:48:18,090 --> 00:48:20,580 Но аз мисля, че е хубаво да се тя включва изрично. 977 00:48:20,580 --> 00:48:23,860 Особено, когато ние връщаме друга неща, по време на програмата. 978 00:48:23,860 --> 00:48:24,810 OK. 979 00:48:24,810 --> 00:48:26,230 Това е, което ни липсва - 980 00:48:26,230 --> 00:48:28,520 ДОКАТО какво? 981 00:48:28,520 --> 00:48:31,630 Кой може да се мисли за някои - 982 00:48:31,630 --> 00:48:35,240 има някакъв смисъл от това, което нещата може да отиде там? 983 00:48:35,240 --> 00:48:37,350 Дори ако това е само в някои pseudocode като език? 984 00:48:37,350 --> 00:48:41,330 >> Това, което ние сме наистина - какво искаме да отидем, докато? 985 00:48:41,330 --> 00:48:41,980 Да, Луси. 986 00:48:41,980 --> 00:48:43,240 >> LUCY: Краят на файла. 987 00:48:43,240 --> 00:48:44,990 >> JASON Hirschhorn: Краят на файла. 988 00:48:44,990 --> 00:48:49,280 И така, какво искаш да кажеш с края на файла? 989 00:48:49,280 --> 00:48:50,955 >> LUCY: След като стигнете до край на файла, спрете. 990 00:48:50,955 --> 00:48:51,240 >> JASON Hirschhorn: OK. 991 00:48:51,240 --> 00:48:53,460 Така че след като стигаме до края на файла. 992 00:48:53,460 --> 00:48:56,893 Откъде да знаем, когато сме постигнали на края на файла? 993 00:48:56,893 --> 00:48:59,900 >> STUDENT 40: Мисля, буфер ще бъде зададена на NULL. 994 00:48:59,900 --> 00:49:01,885 >> STUDENT 41: Buffer е обявена вътре в цикъла. 995 00:49:01,885 --> 00:49:03,670 >> JASON Hirschhorn: Значи мислиш, че буфер ще бъде зададена на NULL. 996 00:49:03,670 --> 00:49:05,850 Защо би буфер да бъде настроен на NULL? 997 00:49:05,850 --> 00:49:10,420 >> STUDENT 40: Защото, когато fread, което се опитвате да се сложи 998 00:49:10,420 --> 00:49:13,528 нищо в буфер. 999 00:49:13,528 --> 00:49:13,980 >> JASON Hirschhorn: OK. 1000 00:49:13,980 --> 00:49:15,550 Така си мислиш fread - 1001 00:49:15,550 --> 00:49:19,000 когато сте достигнали до края на файл, какво е fread смяташ да правиш? 1002 00:49:19,000 --> 00:49:21,230 Мисля, че това е въпросът ние трябва да разбера. 1003 00:49:21,230 --> 00:49:21,960 Какво означава fread направя? 1004 00:49:21,960 --> 00:49:25,640 Дали това се поставя НУЛЕВА в буфер, или няма да го направя нещо друго? 1005 00:49:25,640 --> 00:49:27,510 Как можем да разберем какво е това? 1006 00:49:27,510 --> 00:49:28,190 >> STUDENT 42: Man. 1007 00:49:28,190 --> 00:49:28,810 >> JASON Hirschhorn: Man. 1008 00:49:28,810 --> 00:49:32,280 Така че нека да погледнем тук. 1009 00:49:32,280 --> 00:49:34,000 Връщане стойност. 1010 00:49:34,000 --> 00:49:39,620 При успех, fread и неуспешно върне брой елементи прочетени или записани. 1011 00:49:39,620 --> 00:49:43,700 Този брой е равен на броя на байтовете прехвърлена само когато е размер 1. 1012 00:49:43,700 --> 00:49:47,780 Ако възникне грешка, или в края на файл е достигната, стойността на връщане е 1013 00:49:47,780 --> 00:49:51,490 кратко брой елемент или 0. 1014 00:49:51,490 --> 00:49:57,860 >> Така че за нашите цели, ако fread достига на края на файла, и чете от 1015 00:49:57,860 --> 00:50:02,100 в края на файла, там е останало нищо да се чете, какво върви да се върне? 1016 00:50:02,100 --> 00:50:03,290 >> STUDENT 43: Нула? 1017 00:50:03,290 --> 00:50:04,540 >> JASON Hirschhorn: Какво? 1018 00:50:04,540 --> 00:50:05,300 >> STUDENT 43: Нула? 1019 00:50:05,300 --> 00:50:05,690 >> JASON Hirschhorn: Нула. 1020 00:50:05,690 --> 00:50:06,940 Той ще се върне на нула. 1021 00:50:06,940 --> 00:50:09,360 1022 00:50:09,360 --> 00:50:13,010 Така че ние знаем, че fread, когато ние имаме достигнала края на файла, ще 1023 00:50:13,010 --> 00:50:13,690 да се върне на нула. 1024 00:50:13,690 --> 00:50:17,460 Как можем да използваме това в наша полза? 1025 00:50:17,460 --> 00:50:21,733 >> AVI: Можете да декларирате променлива извън на цикъла, наречен проверка. 1026 00:50:21,733 --> 00:50:27,040 Ако проверката се равнява - 1027 00:50:27,040 --> 00:50:28,190 за сега - един. 1028 00:50:28,190 --> 00:50:28,920 >> JASON Hirschhorn: OK. 1029 00:50:28,920 --> 00:50:38,050 >> AVI: И тогава може да се сложи IF изявление веднага след fread казвам, ако 1030 00:50:38,050 --> 00:50:42,600 fread равна на нула - 1031 00:50:42,600 --> 00:50:43,850 не. 1032 00:50:43,850 --> 00:50:46,002 1033 00:50:46,002 --> 00:50:47,252 >> JASON Hirschhorn: Кой може да помогне на Ави навън? 1034 00:50:47,252 --> 00:50:49,690 1035 00:50:49,690 --> 00:50:52,410 >> AVI: Каква е стойността върната от fread? 1036 00:50:52,410 --> 00:50:54,060 >> JASON Hirschhorn: Ние просто мина над това. 1037 00:50:54,060 --> 00:50:55,450 >> AVI: Как да я представлява? 1038 00:50:55,450 --> 00:50:57,190 >> JASON Hirschhorn: Така че той се връща - нека погледнете тук - тя връща 1039 00:50:57,190 --> 00:50:59,340 size_t, който е по същество цяло число. 1040 00:50:59,340 --> 00:51:02,240 1041 00:51:02,240 --> 00:51:03,410 Така че връща цяло число. 1042 00:51:03,410 --> 00:51:05,160 И в нашия случай, той ще върнете 1 или 0 - 1043 00:51:05,160 --> 00:51:08,760 1, ако го прочете едно нещо - един байт, и 0, ако сме достигнали до края. 1044 00:51:08,760 --> 00:51:13,560 1045 00:51:13,560 --> 00:51:16,450 Така че, ако fread - 1046 00:51:16,450 --> 00:51:16,855 Така ли? 1047 00:51:16,855 --> 00:51:20,330 >> STUDENT 45: Не можеш ли просто да постави в пълна fread (буфер, 1, 1, SRC) в 1048 00:51:20,330 --> 00:51:21,660 линия, докато? 1049 00:51:21,660 --> 00:51:26,510 >> JASON Hirschhorn: Значи вие предлагате Правейки това в там? 1050 00:51:26,510 --> 00:51:27,600 >> [вмъкване VOICES] 1051 00:51:27,600 --> 00:51:29,520 >> JASON Hirschhorn: Дръж се. 1052 00:51:29,520 --> 00:51:30,885 Така че ние сме избавяне от това. 1053 00:51:30,885 --> 00:51:33,300 Значи предложи пускането fread в там? 1054 00:51:33,300 --> 00:51:35,457 Какво трябва да се движат ако искате да направите това? 1055 00:51:35,457 --> 00:51:36,740 >> STUDENT 45: Буферът отвън. 1056 00:51:36,740 --> 00:51:38,110 >> JASON Hirschhorn: Ние трябва да също така да преместите този тук. 1057 00:51:38,110 --> 00:51:41,700 >> STUDENT 45: Но прави това постоянно тя се движи напред? 1058 00:51:41,700 --> 00:51:42,950 >> [вмъкване VOICES] 1059 00:51:42,950 --> 00:51:46,540 1060 00:51:46,540 --> 00:51:47,470 >> JASON Hirschhorn: OK. 1061 00:51:47,470 --> 00:51:50,570 Така че това е, което предлага Okshar. 1062 00:51:50,570 --> 00:51:51,930 Ние създаваме нашия буфер. 1063 00:51:51,930 --> 00:51:57,020 Ние ДОКАТО fread, тогава ние неуспешно. 1064 00:51:57,020 --> 00:51:59,760 Мисли за това? 1065 00:51:59,760 --> 00:52:04,050 >> STUDENT 46: Единственият ми въпрос е, ще тя всъщност изпълнява команда fread? 1066 00:52:04,050 --> 00:52:06,175 >> JASON Hirschhorn: Great въпрос. 1067 00:52:06,175 --> 00:52:11,050 Когато сте пускането извикване на функция във вътрешността на състояние, прави това 1068 00:52:11,050 --> 00:52:12,300 извикване на функция изпълнява? 1069 00:52:12,300 --> 00:52:15,760 1070 00:52:15,760 --> 00:52:17,770 Виждали сме примери за това преди. 1071 00:52:17,770 --> 00:52:24,900 1072 00:52:24,900 --> 00:52:25,660 Нали така? 1073 00:52:25,660 --> 00:52:26,125 >> STUDENT 46: OK. 1074 00:52:26,125 --> 00:52:26,590 Да. 1075 00:52:26,590 --> 00:52:30,140 Така че тя не изпълни. 1076 00:52:30,140 --> 00:52:31,790 >> JASON Hirschhorn: Видяхме неща като, че преди, когато имаме 1077 00:52:31,790 --> 00:52:33,550 извикване на функция във вътрешността на състояние. 1078 00:52:33,550 --> 00:52:35,540 Изпълни ли това, извикване на функция? 1079 00:52:35,540 --> 00:52:36,350 Да. 1080 00:52:36,350 --> 00:52:37,410 Така че отговорът е да. 1081 00:52:37,410 --> 00:52:41,010 Тази функция обаждане ще се изпълни. 1082 00:52:41,010 --> 00:52:42,418 Но отново, е, че това, което искаме? 1083 00:52:42,418 --> 00:52:49,250 1084 00:52:49,250 --> 00:52:52,204 >> Какво е един начин бихме могли да измислим , ако това е, което искаме? 1085 00:52:52,204 --> 00:52:53,470 >> ПОВЕЧЕ ОТ УЧЕНИЦИ: го изпълните? 1086 00:52:53,470 --> 00:52:54,460 >> JASON Hirschhorn: Бихме могли да го стартирате. 1087 00:52:54,460 --> 00:52:57,500 Но преди да направите това, бихме могли да също разсъждава през това. 1088 00:52:57,500 --> 00:52:57,920 Ако - 1089 00:52:57,920 --> 00:53:01,920 кажем, че имаме един байт в нашия подаде, ние ще стигнем до тук, 1090 00:53:01,920 --> 00:53:02,660 ние ще стигнем до този код. 1091 00:53:02,660 --> 00:53:03,620 Това ще се изпълнява. 1092 00:53:03,620 --> 00:53:07,780 fread ще се върне един байт и го съхранява в буфера. 1093 00:53:07,780 --> 00:53:11,290 И това ще оцени до 1, Добре, след като той се връща 1. 1094 00:53:11,290 --> 00:53:12,640 >> И така, докато един. 1095 00:53:12,640 --> 00:53:15,325 Това означава ли, кода вътре примката ДОКАТО ще изпълни? 1096 00:53:15,325 --> 00:53:15,453 >> STUDENT 47: Да. 1097 00:53:15,453 --> 00:53:16,040 Това е вярно. 1098 00:53:16,040 --> 00:53:16,290 >> JASON Hirschhorn: Да. 1099 00:53:16,290 --> 00:53:17,490 Едно е вярно. 1100 00:53:17,490 --> 00:53:18,240 Това не е 0. 1101 00:53:18,240 --> 00:53:20,360 Така кода вътре тук ще изпълни. 1102 00:53:20,360 --> 00:53:22,300 Така че ние ще напиша това. 1103 00:53:22,300 --> 00:53:25,340 Ние ще се върнем към този Онлайн отново. 1104 00:53:25,340 --> 00:53:26,850 Сега имаме - 1105 00:53:26,850 --> 00:53:28,550 ние сме в края на нашия файл. 1106 00:53:28,550 --> 00:53:30,980 Четем от края на нашия файл, защото имахме само един байт в него. 1107 00:53:30,980 --> 00:53:34,270 >> Fread връща 0, магазини нещо в буфер. 1108 00:53:34,270 --> 00:53:35,890 Аз честно казано не знам какво го съхранява в буфер. 1109 00:53:35,890 --> 00:53:38,380 Вероятно можем да потърсим за да видите какво прави той. 1110 00:53:38,380 --> 00:53:40,130 Че аз честно казано не знам. 1111 00:53:40,130 --> 00:53:43,090 Ние не знаем, кой му пука какво го съхранява в буфер? 1112 00:53:43,090 --> 00:53:44,010 Но тя не се върне 0. 1113 00:53:44,010 --> 00:53:45,440 И ще Докато 0 изпълни? 1114 00:53:45,440 --> 00:53:49,950 1115 00:53:49,950 --> 00:53:51,180 >> ДОКАТО 0 няма да се изпълни. 1116 00:53:51,180 --> 00:53:54,030 Така че след това ще се премести тук. 1117 00:53:54,030 --> 00:53:58,870 Така че нека се с вдигане на ръка, ако това е кодът, ние би трябвало да работи, или ако ние 1118 00:53:58,870 --> 00:54:00,140 трябва да направи промени на първо място. 1119 00:54:00,140 --> 00:54:02,180 Така че, ако мислиш - трябва да гласуват. 1120 00:54:02,180 --> 00:54:06,885 Ако мислите, че ние би трябвало да работи този код както е, моля да вдигнат ръка. 1121 00:54:06,885 --> 00:54:12,440 1122 00:54:12,440 --> 00:54:13,400 >> OK. 1123 00:54:13,400 --> 00:54:14,315 Има едно - 1124 00:54:14,315 --> 00:54:17,260 Имате ли въпрос, безпокойство? 1125 00:54:17,260 --> 00:54:18,080 Да. 1126 00:54:18,080 --> 00:54:21,240 >> STUDENT 48: След като ние се движат буфер извън на цикъла, което правим 1127 00:54:21,240 --> 00:54:22,670 Трябва да го изчистване? 1128 00:54:22,670 --> 00:54:23,310 >> JASON Hirschhorn: Great въпрос. 1129 00:54:23,310 --> 00:54:26,670 След като ние се движат буфер извън линия, ще трябва да го изчистване? 1130 00:54:26,670 --> 00:54:28,400 Това е въпрос обхват. 1131 00:54:28,400 --> 00:54:32,130 Ако ние се инициализира буфер извън на този цикъл, ще го съществува 1132 00:54:32,130 --> 00:54:33,534 във вътрешността на цикъла? 1133 00:54:33,534 --> 00:54:35,230 >> ПОВЕЧЕ ОТ УЧЕНИЦИ: Да. 1134 00:54:35,230 --> 00:54:35,580 >> JASON Hirschhorn: Да. 1135 00:54:35,580 --> 00:54:40,100 Нейният обхват покрива вътрешността на линия, и, наистина, всичко под него вътре 1136 00:54:40,100 --> 00:54:42,460 на този кодекс, включително нещата тук вътре. 1137 00:54:42,460 --> 00:54:43,930 Така че ние не трябва да го изчистване. 1138 00:54:43,930 --> 00:54:47,766 Това е локална променлива, и нейният обхват все още включва цикъла. 1139 00:54:47,766 --> 00:54:49,540 >> STUDENT 49: Трябва ли да го освободи? 1140 00:54:49,540 --> 00:54:51,770 >> JASON Hirschhorn: Обичате ние Трябва да безплатен буфер? 1141 00:54:51,770 --> 00:54:53,860 >> STUDENT 49: Да, ако не го направим изчистване. 1142 00:54:53,860 --> 00:54:55,750 >> JASON Hirschhorn: Обичате ние Трябва да безплатен буфер? 1143 00:54:55,750 --> 00:54:57,160 Ние не правим. 1144 00:54:57,160 --> 00:55:01,280 Отново, това е локална променлива, така че ние не трябва да го освободи. 1145 00:55:01,280 --> 00:55:02,170 OK. 1146 00:55:02,170 --> 00:55:03,480 Да видим какво ще стане. 1147 00:55:03,480 --> 00:55:17,290 1148 00:55:17,290 --> 00:55:18,220 Така че това е неинициализирана. 1149 00:55:18,220 --> 00:55:20,830 Това беше нещо, че това, което Marcus предложен по-рано. 1150 00:55:20,830 --> 00:55:25,340 Така че ние имаме тази грешка, променлива буфер е неинициализирана, когато се използва тук. 1151 00:55:25,340 --> 00:55:26,590 >> Как можем да поправя това? 1152 00:55:26,590 --> 00:55:29,460 1153 00:55:29,460 --> 00:55:30,960 >> STUDENT 50: това изчистване? 1154 00:55:30,960 --> 00:55:31,770 >> STUDENT 51: равно NULL? 1155 00:55:31,770 --> 00:55:33,000 >> STUDENT 52: Кажете буфер се равнява на NULL. 1156 00:55:33,000 --> 00:55:34,250 >> JASON Hirschhorn: OK. 1157 00:55:34,250 --> 00:55:40,040 1158 00:55:40,040 --> 00:55:40,770 Изглежда добре. 1159 00:55:40,770 --> 00:55:42,410 Ние го имаме сега. 1160 00:55:42,410 --> 00:55:45,630 Нека създадем нещо, което да се опита копиране. 1161 00:55:45,630 --> 00:56:08,990 1162 00:56:08,990 --> 00:56:10,490 Така че ние имаме нашия текстов файл. 1163 00:56:10,490 --> 00:56:11,740 Как можем да стартирате тази програма? 1164 00:56:11,740 --> 00:56:14,140 1165 00:56:14,140 --> 00:56:15,472 Да. 1166 00:56:15,472 --> 00:56:22,230 >> STUDENT 53: Можете да направите точка наклонена черта кп, test.txt. 1167 00:56:22,230 --> 00:56:25,140 И тогава може да назове друг файл която тя ще се съхранява в. 1168 00:56:25,140 --> 00:56:25,510 >> JASON Hirschhorn: OK. 1169 00:56:25,510 --> 00:56:27,380 Ще го наречем out.txt. 1170 00:56:27,380 --> 00:56:28,630 Cool? 1171 00:56:28,630 --> 00:56:31,700 1172 00:56:31,700 --> 00:56:34,320 Seg вина. 1173 00:56:34,320 --> 00:56:35,570 Мисли за вина на сегмента? 1174 00:56:35,570 --> 00:56:40,900 1175 00:56:40,900 --> 00:56:41,390 Това е страхотно. 1176 00:56:41,390 --> 00:56:45,040 Как можем да разберем къде неизправността на SEG е? 1177 00:56:45,040 --> 00:56:45,680 Какво? 1178 00:56:45,680 --> 00:56:45,990 >> STUDENT 54: GDB. 1179 00:56:45,990 --> 00:56:47,240 >> JASON Hirschhorn: GDB. 1180 00:56:47,240 --> 00:56:51,400 1181 00:56:51,400 --> 00:56:55,300 В момента тече GDB с написването GDB точка наклонена черта, на името на програмата. 1182 00:56:55,300 --> 00:56:57,020 Не аргументи там команден ред. 1183 00:56:57,020 --> 00:56:59,570 Отиваме да зададете граничните стойности в основния. 1184 00:56:59,570 --> 00:57:02,190 Ако искате да започнете GDB, какво да правя? 1185 00:57:02,190 --> 00:57:02,730 >> STUDENT 55: R. 1186 00:57:02,730 --> 00:57:08,910 >> JASON Hirschhorn: R. И после какво? 1187 00:57:08,910 --> 00:57:09,400 >> STUDENT 55: Аргументите? 1188 00:57:09,400 --> 00:57:10,650 >> JASON Hirschhorn: Тогава аргументи от командния ред. 1189 00:57:10,650 --> 00:57:15,890 1190 00:57:15,890 --> 00:57:17,120 Да се ​​разходим из. 1191 00:57:17,120 --> 00:57:19,090 N е просто ме водиш ред по ред. 1192 00:57:19,090 --> 00:57:21,450 Отивам да отидат до Получа моя сегмент виновен. 1193 00:57:21,450 --> 00:57:22,700 Ето го моят сегмент виновен. 1194 00:57:22,700 --> 00:57:24,960 1195 00:57:24,960 --> 00:57:27,875 Прилича fread причинена ми сегмента вина. 1196 00:57:27,875 --> 00:57:30,570 1197 00:57:30,570 --> 00:57:32,770 Знам fread причинени ми сегмента вина, защото това е 1198 00:57:32,770 --> 00:57:34,950 Онлайн ние просто екзекутиран. 1199 00:57:34,950 --> 00:57:36,530 >> И единственото нещо, което беше случва в тази линия - 1200 00:57:36,530 --> 00:57:37,520 две неща се случваха. 1201 00:57:37,520 --> 00:57:40,610 Fread отива, и тогава бяхме правят някои при проверка. 1202 00:57:40,610 --> 00:57:44,820 Аз съм готов да се обзаложа, че в същото време проверка не е причинявало ми SEG вина. 1203 00:57:44,820 --> 00:57:46,950 Най-вероятно, fread беше причинявайки ми сегмента вина. 1204 00:57:46,950 --> 00:57:49,260 Аз също виждам нещо тук, memcopy. 1205 00:57:49,260 --> 00:57:50,500 >> Копие Memory. 1206 00:57:50,500 --> 00:57:53,820 Звучи като се движат с памет от едно място до друго. 1207 00:57:53,820 --> 00:57:56,890 Звучи като нещо, което ще се случи, в fread, може би малко памет 1208 00:57:56,890 --> 00:57:58,910 движи от тук до тук. 1209 00:57:58,910 --> 00:58:01,740 1210 00:58:01,740 --> 00:58:03,860 Нека да мине през това отново. 1211 00:58:03,860 --> 00:58:06,900 Как мога да го започнем отначало и да го стартирате отново? 1212 00:58:06,900 --> 00:58:08,092 Да. 1213 00:58:08,092 --> 00:58:15,140 >> STUDENT 56: Смятате ли, трябва да поставите амперсанд преди буфер? 1214 00:58:15,140 --> 00:58:17,800 >> JASON Hirschhorn: Значи преди амперсанд буфер ще ми даде адреса на 1215 00:58:17,800 --> 00:58:22,330 буфер, който е знак *. 1216 00:58:22,330 --> 00:58:25,250 Нека да тече през това още един път. 1217 00:58:25,250 --> 00:58:28,248 Как да го стартирам през него още един път? 1218 00:58:28,248 --> 00:58:29,210 >> STUDENT 57: Може ли само въведете кандидатира отново? 1219 00:58:29,210 --> 00:58:32,050 >> JASON Hirschhorn: Просто напишете кандидатира отново. 1220 00:58:32,050 --> 00:58:33,415 Така че ние няма да изпълните тази линия. 1221 00:58:33,415 --> 00:58:36,250 1222 00:58:36,250 --> 00:58:39,240 Така буфер е нулев указател. 1223 00:58:39,240 --> 00:58:40,490 Вярно ли е? 1224 00:58:40,490 --> 00:58:45,870 1225 00:58:45,870 --> 00:58:47,060 Тя е насочена към - нека да видим. 1226 00:58:47,060 --> 00:58:48,500 Ако ние имаме - 1227 00:58:48,500 --> 00:58:50,430 направи бърза снимка на това. 1228 00:58:50,430 --> 00:58:53,500 Всеки ли може да се види дали Аз пиша тук? 1229 00:58:53,500 --> 00:59:02,890 >> Така в стека, ние имаме една местна променлива и тя се нарича буфер и 1230 00:59:02,890 --> 00:59:08,230 това е указател към Чар. 1231 00:59:08,230 --> 00:59:10,325 Какво адрес е този знак на? 1232 00:59:10,325 --> 00:59:12,550 >> STUDENT 58: 0x0. 1233 00:59:12,550 --> 00:59:13,400 >> JASON Hirschhorn: Точно така. 1234 00:59:13,400 --> 00:59:14,200 Това е, какво е това. 1235 00:59:14,200 --> 00:59:17,600 В тук, вътре в буфер, се съхранява 0x0. 1236 00:59:17,600 --> 00:59:20,480 Това е, което ние имаме - настройка имаме точно сега. 1237 00:59:20,480 --> 00:59:27,540 Така че тази линия, fread, слага нещо от източник, където? 1238 00:59:27,540 --> 00:59:30,560 В това поле или тази кутия? 1239 00:59:30,560 --> 00:59:31,060 Коя кутия? 1240 00:59:31,060 --> 00:59:33,290 Ляво или дясно кутия кутия? 1241 00:59:33,290 --> 00:59:34,750 Това право кутия. 1242 00:59:34,750 --> 00:59:38,440 >> От това следва, показалеца, и да го поставя тук. 1243 00:59:38,440 --> 00:59:42,620 Когато ние се опитваме и докосване памет място 0, какво ще се получи? 1244 00:59:42,620 --> 00:59:45,050 A сегментиране вина. 1245 00:59:45,050 --> 00:59:46,550 Това е грешката, ние имаме точно сега. 1246 00:59:46,550 --> 00:59:46,970 Да. 1247 00:59:46,970 --> 00:59:48,410 >> STUDENT 59: Нямаш ли да се сложи звезда буфер? 1248 00:59:48,410 --> 00:59:49,180 Или не? 1249 00:59:49,180 --> 00:59:50,050 За fread? 1250 00:59:50,050 --> 00:59:51,450 >> JASON Hirschhorn: Така fread Отнема показалка. 1251 00:59:51,450 --> 00:59:54,920 1252 00:59:54,920 --> 00:59:55,900 Така че тя преминава през буфер. 1253 00:59:55,900 --> 00:59:58,980 И тогава ще де-референтна го някъде вътре fread. 1254 00:59:58,980 --> 01:00:00,700 Но отново, видяхме, че отнема показалка. 1255 01:00:00,700 --> 01:00:02,560 Ние не трябва да го давате звезда буфер. 1256 01:00:02,560 --> 01:00:05,350 Това ще се минава го както е тук. 1257 01:00:05,350 --> 01:00:07,980 И това вероятно ще ни даде грешка защото ние сме го де-съотнасяне. 1258 01:00:07,980 --> 01:00:08,150 >> Нали така? 1259 01:00:08,150 --> 01:00:10,690 Когато ние де-референтна този указател, когато ние се опитваме да осъществите достъп до това място, 1260 01:00:10,690 --> 01:00:13,140 Махаме грешка - нашия сегментиране вина. 1261 01:00:13,140 --> 01:00:15,800 Така че - 1262 01:00:15,800 --> 01:00:16,690 Опа. 1263 01:00:16,690 --> 01:00:19,090 Отиваме да се откажат от GDB. 1264 01:00:19,090 --> 01:00:20,160 Нашата линия - 1265 01:00:20,160 --> 01:00:22,990 наш проблем - е прав тук, на тази линия. 1266 01:00:22,990 --> 01:00:26,410 И това е проблем, защото на тази линия. 1267 01:00:26,410 --> 01:00:31,780 >> Как можем да създадем една кутия, която е достъпна в fread. 1268 01:00:31,780 --> 01:00:31,980 Нали така? 1269 01:00:31,980 --> 01:00:35,190 Ние трябва да създадем една кутия, която е една байт голям, размерът на знак. 1270 01:00:35,190 --> 01:00:38,590 Но имаме нужда от тази кутия, за да бъде достъпен Когато тази функция се изпълнява. 1271 01:00:38,590 --> 01:00:39,390 Е, къде - 1272 01:00:39,390 --> 01:00:39,640 Да. 1273 01:00:39,640 --> 01:00:40,440 Някакви идеи? 1274 01:00:40,440 --> 01:00:43,615 >> STUDENT 60: Просто го зададете като всеки случаен характер. 1275 01:00:43,615 --> 01:00:49,150 1276 01:00:49,150 --> 01:00:51,640 Просто направи Чар буферни равни характера. 1277 01:00:51,640 --> 01:00:53,795 И тогава, когато сте буфер там - 1278 01:00:53,795 --> 01:00:54,110 >> JASON Hirschhorn: Изчакайте. 1279 01:00:54,110 --> 01:00:55,110 Char буфер? 1280 01:00:55,110 --> 01:00:55,880 Така че без звезди? 1281 01:00:55,880 --> 01:00:56,390 >> STUDENT 60: Да. 1282 01:00:56,390 --> 01:00:58,560 Извадете звездата. 1283 01:00:58,560 --> 01:01:00,690 Равно случаен характер. 1284 01:01:00,690 --> 01:01:01,460 >> JASON Hirschhorn: OK. 1285 01:01:01,460 --> 01:01:02,420 Така че, дайте ми един. 1286 01:01:02,420 --> 01:01:03,170 >> STUDENT 60: Като или нещо такова. 1287 01:01:03,170 --> 01:01:06,160 И тогава, когато имате буфер там, можете да използвате - 1288 01:01:06,160 --> 01:01:06,420 >> STUDENT 61: Star? 1289 01:01:06,420 --> 01:01:07,650 О, не, амперсанд. 1290 01:01:07,650 --> 01:01:09,000 >> STUDENT 60: Използвайте амперсанд. 1291 01:01:09,000 --> 01:01:09,470 >> JASON Hirschhorn: OK. 1292 01:01:09,470 --> 01:01:11,320 А какво да кажем в неуспешно? 1293 01:01:11,320 --> 01:01:14,150 >> STUDENT 60: Използвайте амперсант отново. 1294 01:01:14,150 --> 01:01:14,320 >> JASON Hirschhorn: Добре. 1295 01:01:14,320 --> 01:01:20,970 Така че вашата идея е, ние създаваме Чар и сложи нещо в нея, а след това 1296 01:01:20,970 --> 01:01:22,612 пишете, че Чар. 1297 01:01:22,612 --> 01:01:23,760 >> STUDENT 60: Да. 1298 01:01:23,760 --> 01:01:25,916 >> JASON Hirschhorn: Какво мислят хората? 1299 01:01:25,916 --> 01:01:27,770 >> STUDENT 62: Това е сложен. 1300 01:01:27,770 --> 01:01:28,460 >> JASON Hirschhorn: OK. 1301 01:01:28,460 --> 01:01:29,760 Нека да го извади. 1302 01:01:29,760 --> 01:01:35,720 Така че този път, аз отивам да се направи това в червено в стека тук, а след това ние 1303 01:01:35,720 --> 01:01:36,410 ще има - 1304 01:01:36,410 --> 01:01:36,822 ох! 1305 01:01:36,822 --> 01:01:38,060 Извинете. 1306 01:01:38,060 --> 01:01:45,930 Така че този път ние имаме нещо, наречено буфер, и това е в стека. 1307 01:01:45,930 --> 01:01:48,430 Вярно ли е? 1308 01:01:48,430 --> 01:01:51,520 И ние сме спестяване в него, първоначално. 1309 01:01:51,520 --> 01:01:53,830 >> Тогава ние имаме нашия призив да fread. 1310 01:01:53,830 --> 01:02:01,300 Какво fread се е тя да вземе байт от нашият файл и го слага някъде. 1311 01:02:01,300 --> 01:02:04,570 Това го поставя в каквато и на нещо, което да сочи на. 1312 01:02:04,570 --> 01:02:09,130 Е, преди имахме този адрес - 1313 01:02:09,130 --> 01:02:10,250 0x0. 1314 01:02:10,250 --> 01:02:13,349 Сега какъв адрес имаме? 1315 01:02:13,349 --> 01:02:14,650 >> STUDENT 63: Каквото адрес буфер е. 1316 01:02:14,650 --> 01:02:15,970 >> JASON Hirschhorn: Каквото адрес буфер е. 1317 01:02:15,970 --> 01:02:22,370 Тя вероятно ще бъде нещо подобно. 1318 01:02:22,370 --> 01:02:26,950 Вероятно ще започна с б и едно е, а след това да има шест други 1319 01:02:26,950 --> 01:02:27,970 шестнадесетични цифри. 1320 01:02:27,970 --> 01:02:28,480 Няма значение. 1321 01:02:28,480 --> 01:02:29,470 Някои адрес. 1322 01:02:29,470 --> 01:02:31,410 И ние мимоходом, че адрес инча 1323 01:02:31,410 --> 01:02:34,790 >> И ние ще поставим едно байт нещо на този адрес. 1324 01:02:34,790 --> 01:02:38,470 Така че ние ще поставим едно байт нещо тук вътре. 1325 01:02:38,470 --> 01:02:40,800 И тогава ние ще пиша от това, което някога е тук вътре. 1326 01:02:40,800 --> 01:02:43,425 1327 01:02:43,425 --> 01:02:45,380 Дали някой има някакви въпроси за това? 1328 01:02:45,380 --> 01:02:50,990 1329 01:02:50,990 --> 01:02:54,690 Кой мисли, че този код ще работи? 1330 01:02:54,690 --> 01:02:56,020 >> Вдигнете ръка, ако смятате този код ще работи. 1331 01:02:56,020 --> 01:02:57,270 Вие трябва да заеме позиция. 1332 01:02:57,270 --> 01:03:00,670 1333 01:03:00,670 --> 01:03:02,500 И който си мисли този код няма да работи? 1334 01:03:02,500 --> 01:03:04,610 Вдигнете ръка. 1335 01:03:04,610 --> 01:03:06,750 Всички останали трябва да бъде повишаване на ръката им. 1336 01:03:06,750 --> 01:03:07,670 OK. 1337 01:03:07,670 --> 01:03:09,390 Майкъл, къде стоиш? 1338 01:03:09,390 --> 01:03:10,680 >> MICHAEL: Не мога да реша. 1339 01:03:10,680 --> 01:03:12,070 Нещо по средата. 1340 01:03:12,070 --> 01:03:12,736 >> JASON Hirschhorn: Ти си в средата. 1341 01:03:12,736 --> 01:03:13,092 Вземете един. 1342 01:03:13,092 --> 01:03:14,400 >> MICHAEL: Ще имаме вяра и да кажа, че ще работи. 1343 01:03:14,400 --> 01:03:14,660 >> JASON Hirschhorn: OK. 1344 01:03:14,660 --> 01:03:16,047 Ще имате вяра и да кажа, че работи? 1345 01:03:16,047 --> 01:03:26,490 1346 01:03:26,490 --> 01:03:27,020 Какво се е случило? 1347 01:03:27,020 --> 01:03:28,270 >> [вмъкване VOICES] 1348 01:03:28,270 --> 01:03:35,170 1349 01:03:35,170 --> 01:03:35,950 >> JASON Hirschhorn: No сегмента вина. 1350 01:03:35,950 --> 01:03:40,320 Как можем да се провери, за да видите, ако две неща са равни? 1351 01:03:40,320 --> 01:03:42,060 Две файлове са равни. 1352 01:03:42,060 --> 01:03:43,300 >> STUDENT 64: Diff. 1353 01:03:43,300 --> 01:03:45,490 >> JASON Hirschhorn: Diff. 1354 01:03:45,490 --> 01:03:51,630 Разлика проверки за различията между два файла, и ако той се връща 1355 01:03:51,630 --> 01:03:52,890 нищо, те са идентични. 1356 01:03:52,890 --> 01:03:59,030 И ако ние се отвори, ще получите нашия файл. 1357 01:03:59,030 --> 01:04:00,490 Така че това е правилното решение. 1358 01:04:00,490 --> 01:04:01,780 Нека да погледнем назад към това още един път. 1359 01:04:01,780 --> 01:04:04,080 Ние всъщност дори не трябва да го инициализира. 1360 01:04:04,080 --> 01:04:05,520 >> Това вероятно ще изглежда малко чисти, ако не е пускал 1361 01:04:05,520 --> 01:04:07,680 нещо случаен там. 1362 01:04:07,680 --> 01:04:13,070 Въпросът е, ви е необходимо да се създаде малко пространство за съхранение на нещо от 1363 01:04:13,070 --> 01:04:15,530 fread и да вземат нещо от неуспешно. 1364 01:04:15,530 --> 01:04:18,400 И това нещо е трябвало да бъде местен променлива в стека - вие 1365 01:04:18,400 --> 01:04:19,890 Можеше да malloc'd малко пространство. 1366 01:04:19,890 --> 01:04:23,030 >> Така че ние всъщност може да има писмено изчистване тук, и 1367 01:04:23,030 --> 01:04:25,420 че би работил. 1368 01:04:25,420 --> 01:04:28,660 И тогава ние ще са съхраняване нашите неща някъде на куп. 1369 01:04:28,660 --> 01:04:31,940 Но това е всъщност, най-вероятно, най-елегантно решение. 1370 01:04:31,940 --> 01:04:34,490 Просто се създаде малко пространство в стека за тези неща, за да отида. 1371 01:04:34,490 --> 01:04:37,690 1372 01:04:37,690 --> 01:04:38,990 >> Щях да имам две други коментари. 1373 01:04:38,990 --> 01:04:44,650 Ако ви се налага да вземе завой в това, и след това се оценяват по това, моите коментари 1374 01:04:44,650 --> 01:04:47,400 ще бъде както следва. 1375 01:04:47,400 --> 01:04:54,300 Това едно е тук, до мен, гледам като магически числа. 1376 01:04:54,300 --> 01:04:56,860 Този 1, по отношение на fread, има смисъл. 1377 01:04:56,860 --> 01:04:59,580 Това е броя на нещата, да се чете и пише. 1378 01:04:59,580 --> 01:05:03,740 >> Но този един точно тук трябва да вероятно да е нещо друго. 1379 01:05:03,740 --> 01:05:05,180 Така че това, което е едно решение? 1380 01:05:05,180 --> 01:05:06,545 >> STUDENT 65: Размер на байт. 1381 01:05:06,545 --> 01:05:10,100 1382 01:05:10,100 --> 01:05:11,080 >> JASON Hirschhorn: Така ли? 1383 01:05:11,080 --> 01:05:13,130 >> STUDENT 65: Размер на Чар. 1384 01:05:13,130 --> 01:05:13,820 >> JASON Hirschhorn: Размер на Чар. 1385 01:05:13,820 --> 01:05:15,290 Да, байт не е вид. 1386 01:05:15,290 --> 01:05:16,320 Така размер на Чар произведения. 1387 01:05:16,320 --> 01:05:30,270 Може да има, в горната част на нашия код, # определено това. 1388 01:05:30,270 --> 01:05:33,410 Наречен нещо BYTE и това е наистина Чар. 1389 01:05:33,410 --> 01:05:37,675 Всъщност, още по-добър подход може да е това - 1390 01:05:37,675 --> 01:05:39,391 UINT. 1391 01:05:39,391 --> 01:05:40,780 Някой знае ли какво е това? 1392 01:05:40,780 --> 01:05:44,388 1393 01:05:44,388 --> 01:05:44,840 >> Извинете. 1394 01:05:44,840 --> 01:05:46,090 Аз го имам назад. 1395 01:05:46,090 --> 01:05:51,620 1396 01:05:51,620 --> 01:05:52,200 Чакай, не. 1397 01:05:52,200 --> 01:05:53,450 Накъде ли е отишло? 1398 01:05:53,450 --> 01:05:58,071 1399 01:05:58,071 --> 01:05:59,660 Някой знае ли какво е това? 1400 01:05:59,660 --> 01:06:00,950 Да. 1401 01:06:00,950 --> 01:06:05,650 >> STUDENT 67: Трябваше да помогне на стандартизиране през Системи неща, които 1402 01:06:05,650 --> 01:06:08,760 има - като неподписани числа че има 8 байта? 1403 01:06:08,760 --> 01:06:11,785 >> JASON Hirschhorn: Това е точно така. 1404 01:06:11,785 --> 01:06:14,310 На различни машини, размера на знак - 1405 01:06:14,310 --> 01:06:15,180 обикновено не е Чар. 1406 01:06:15,180 --> 01:06:16,100 Герой обикновено са един байт. 1407 01:06:16,100 --> 01:06:19,590 Но размерът на други типове данни са различни размери на 32-битова машина 1408 01:06:19,590 --> 01:06:21,370 в сравнение с 64-битова машина. 1409 01:06:21,370 --> 01:06:25,180 А uint8_t е винаги 8 бита - 1410 01:06:25,180 --> 01:06:27,210 винаги един байт. 1411 01:06:27,210 --> 01:06:29,580 >> И аз трябва да се включи, че стандартен файлов вътр отби. 1412 01:06:29,580 --> 01:06:35,040 Така че сега, това най-вероятно би била най-добрият начин да пиша този код. 1413 01:06:35,040 --> 01:06:40,160 1414 01:06:40,160 --> 01:06:41,450 Така че мога да се отърва от магически числа. 1415 01:06:41,450 --> 01:06:44,690 И аз също имам по-логично въведете за буфер. 1416 01:06:44,690 --> 01:06:49,450 Това не е просто знак, е един байт, което е това, което ние очакваме да бъде. 1417 01:06:49,450 --> 01:06:53,400 >> И тук, ние всъщност бил малко по-силен. 1418 01:06:53,400 --> 01:06:55,190 Ние не го наричаш Чар, който - 1419 01:06:55,190 --> 01:06:58,630 може би, кой знае - може да бъде различен размер на различни машини. 1420 01:06:58,630 --> 01:07:02,025 Ние всъщност се казва точно това е един байт, винаги, без значение какво. 1421 01:07:02,025 --> 01:07:05,810 И ако погледнем тук, ние правим CP. 1422 01:07:05,810 --> 01:07:08,340 О-о. 1423 01:07:08,340 --> 01:07:09,590 Какво се е случило? 1424 01:07:09,590 --> 01:07:14,470 1425 01:07:14,470 --> 01:07:16,170 >> STUDENT 68: Би могло да се включи. 1426 01:07:16,170 --> 01:07:17,880 >> JASON Hirschhorn: Какво? 1427 01:07:17,880 --> 01:07:19,130 >> STUDENT 69: Така ли? 1428 01:07:19,130 --> 01:07:21,940 1429 01:07:21,940 --> 01:07:25,080 >> STUDENT 70: Не си го определят като тип. 1430 01:07:25,080 --> 01:07:28,684 >> STUDENT 71: Но това трябва да бъдат определени в стандарт. 1431 01:07:28,684 --> 01:07:29,934 >> STUDENT 72: Какво става? 1432 01:07:29,934 --> 01:07:37,660 1433 01:07:37,660 --> 01:07:40,210 >> STUDENT 73: Трябва ли да се определи да бъде с главни букви? 1434 01:07:40,210 --> 01:07:41,370 >> JASON Hirschhorn: Така че това не е # определят. 1435 01:07:41,370 --> 01:07:45,490 Всъщност, в този случай, аз съм ще използваме typedef. 1436 01:07:45,490 --> 01:07:48,590 Защото ние го използвате като тип на едно място. 1437 01:07:48,590 --> 01:07:51,990 Така че в този случай, ние действително искаме да typedef като сме отпечатване на нов тип 1438 01:07:51,990 --> 01:07:54,490 байт, и е, по същество, това. 1439 01:07:54,490 --> 01:07:56,590 Това е малко по-различно, отколкото # определят. 1440 01:07:56,590 --> 01:08:02,740 >> И сега, нашият код работи перфектно. 1441 01:08:02,740 --> 01:08:05,230 Така че, отново, # определят отнема нещо, той замества навсякъде 1442 01:08:05,230 --> 01:08:06,780 с друго нещо. 1443 01:08:06,780 --> 01:08:07,920 Това е просто една макро - 1444 01:08:07,920 --> 01:08:09,420 стенограмите да се отървете от магически числа. 1445 01:08:09,420 --> 01:08:11,360 Но в този случай, защото ние сме да го използвате като вид - 1446 01:08:11,360 --> 01:08:12,180 точно тук - 1447 01:08:12,180 --> 01:08:19,880 За да може това да работят, ние трябва да typedef каквото е байт. 1448 01:08:19,880 --> 01:08:21,840 >> И ние сме го определяне точно тук. 1449 01:08:21,840 --> 01:08:24,750 Това не е структура, това е всъщност само положително цяло. 1450 01:08:24,750 --> 01:08:27,680 Това е дълъг един байт. 1451 01:08:27,680 --> 01:08:31,910 Този код ще бъде на разположение онлайн, както и всичко, което трябва да го има в момента. 1452 01:08:31,910 --> 01:08:33,830 >> Така че ние имаме - 1453 01:08:33,830 --> 01:08:34,250 перфектна - 1454 01:08:34,250 --> 01:08:41,359 13 минута, за да отиде над определен проблем 5. 1455 01:08:41,359 --> 01:08:44,270 Искам да ходя през резервното заедно, и след това ще говорим накратко 1456 01:08:44,270 --> 01:08:47,120 за други части на проблема избран. 1457 01:08:47,120 --> 01:08:48,899 Така че позволете ми да спра copy.c. 1458 01:08:48,899 --> 01:09:03,930 1459 01:09:03,930 --> 01:09:08,810 И готино нещо е, че ние всъщност вече написал много на този кодекс. 1460 01:09:08,810 --> 01:09:11,180 >> Кодът писахме буквално излезе от тук, когато бях на 1461 01:09:11,180 --> 01:09:13,120 пиша това на моята собствена. 1462 01:09:13,120 --> 01:09:16,990 Но това е резервното, образува основата за първите две части на 1463 01:09:16,990 --> 01:09:22,340 проблема, определен за whodunit.c, които Вие трябва да напишете, и resize.c. 1464 01:09:22,340 --> 01:09:27,050 Recover.c, която е третата и последна част от множеството проблеми, не е 1465 01:09:27,050 --> 01:09:29,529 на базата на разстояние от този файл. 1466 01:09:29,529 --> 01:09:32,200 >> Ще трябва да напишете този файл, ние ви даваме един шаблон за това 1467 01:09:32,200 --> 01:09:34,620 файл, но това няма нищо общо с copy.c. 1468 01:09:34,620 --> 01:09:38,675 Но тъй като резервното е основата за първите две части, отиваме 1469 01:09:38,675 --> 01:09:42,000 да минеш през нея сега, така че имате добро чувство за това, което прави. 1470 01:09:42,000 --> 01:09:43,640 >> И коментарите дават някои от тях далеч. 1471 01:09:43,640 --> 01:09:45,120 Ние вече съм писал някои от това. 1472 01:09:45,120 --> 01:09:49,220 Първо, ние сме като се уверите, получаваме три аргумента. 1473 01:09:49,220 --> 01:09:50,560 На следващо място, ние сме си спомни името на файла. 1474 01:09:50,560 --> 01:09:52,960 Така че ние пропуснат тази стъпка, когато ние кодирани ни нещо - 1475 01:09:52,960 --> 01:09:54,700 когато нашата CP. 1476 01:09:54,700 --> 01:09:56,750 Но тук, те правят го малко по-чист. 1477 01:09:56,750 --> 01:09:59,350 >> Те са проверка, за да се уверите, двата файла са добри, в 1478 01:09:59,350 --> 01:10:00,450 Освен отварянето им. 1479 01:10:00,450 --> 01:10:04,760 Писахме всичко това код точно сега, така че аз съм Няма да се спирам на този код. 1480 01:10:04,760 --> 01:10:09,670 След това е някои неща, които е специфична за типовете файлове, които използваме, които 1481 01:10:09,670 --> 01:10:12,240 са растерни файлове. 1482 01:10:12,240 --> 01:10:15,660 Растерни файлове имат някои метаданни свързани с тях. 1483 01:10:15,660 --> 01:10:20,190 >> Така че първите няколко байта ви разкажа за файла. 1484 01:10:20,190 --> 01:10:23,460 Те не са цветовете пиксел в изображението. 1485 01:10:23,460 --> 01:10:25,120 Те ще ви разкажа за файла. 1486 01:10:25,120 --> 01:10:28,220 И ако четете чрез набор проблем, ще имате много повече информация 1487 01:10:28,220 --> 01:10:33,100 на какви видове метаданни структури са включени с растерни изображения. 1488 01:10:33,100 --> 01:10:39,350 >> Но това е защо ние имаме тази първа комплект - този код точно тук. 1489 01:10:39,350 --> 01:10:42,490 Ние четат метаданните - 1490 01:10:42,490 --> 01:10:45,800 две парчета на метаданни - файлът горния и заглавието на информация. 1491 01:10:45,800 --> 01:10:51,030 И ние сме проверка на някои части от него, за да уверете се, че е вярно, растерна графика файл 1492 01:10:51,030 --> 01:10:52,420 преди да продължите. 1493 01:10:52,420 --> 01:10:55,470 >> И отново, това са подробности ние не е нужно да отидете в предприятието. 1494 01:10:55,470 --> 01:10:57,720 Ако четете чрез набор проблем, вие ще разберете това. 1495 01:10:57,720 --> 01:11:01,370 Дълга история кратко, те са просто казвам, Този файл е растерна графика, и 1496 01:11:01,370 --> 01:11:02,810 потвърждава, че. 1497 01:11:02,810 --> 01:11:05,180 >> На следващо място, ние пишем тези на вън файл. 1498 01:11:05,180 --> 01:11:05,660 Виждаме, че тук. 1499 01:11:05,660 --> 01:11:06,910 Пишем Ви, за извън показалеца. 1500 01:11:06,910 --> 01:11:09,260 1501 01:11:09,260 --> 01:11:11,320 На следващо място, ние сме определяне подложка. 1502 01:11:11,320 --> 01:11:15,240 Така че отново, както е особеност с файл с растерна графика, някои линии включват 1503 01:11:15,240 --> 01:11:16,840 подложка в края. 1504 01:11:16,840 --> 01:11:19,000 И ако четете чрез набор проблем, вие ще научите повече за подложка. 1505 01:11:19,000 --> 01:11:22,330 Това е формулата, за да намерите подложка. 1506 01:11:22,330 --> 01:11:23,610 >> Важно е да се помни - 1507 01:11:23,610 --> 01:11:29,720 , когато променяте размера на растерна графика подаде променя подложка. 1508 01:11:29,720 --> 01:11:31,970 Когато променяте размера на подаде променя подложка. 1509 01:11:31,970 --> 01:11:34,310 Тя никога няма да бъде по-голяма от 3 - 1510 01:11:34,310 --> 01:11:36,510 това ще бъде от 0 до 3, включително. 1511 01:11:36,510 --> 01:11:38,930 Но когато промените размера на нещо променя подложка. 1512 01:11:38,930 --> 01:11:47,100 >> Ако имам само един пиксел в този ред, аз нужда от три байта на подложка, защото 1513 01:11:47,100 --> 01:11:51,190 всеки ред трябва да бъдат кратни на четири байта, във файл растерна графика. 1514 01:11:51,190 --> 01:11:56,120 Но ако аз го удвои, за да се премине от един пиксел два пиксела, всеки от които, 1515 01:11:56,120 --> 01:11:59,510 нека да кажем, е един байт, след това имам нужда два байта на подложка, за да направят 1516 01:11:59,510 --> 01:12:00,970 който е равен на четири. 1517 01:12:00,970 --> 01:12:04,200 >> Така че, когато промените размера на нещо, Имам нужда да променя размера 1518 01:12:04,200 --> 01:12:06,551 на подложка, което имам. 1519 01:12:06,551 --> 01:12:08,100 Това прави ли смисъл да се всички? 1520 01:12:08,100 --> 01:12:12,020 1521 01:12:12,020 --> 01:12:18,720 На следващо място, ние обхождане на всеки ред, или чрез всички редове. 1522 01:12:18,720 --> 01:12:21,400 И тогава ние обхождане чрез всяка колона на всеки ред. 1523 01:12:21,400 --> 01:12:25,330 Ние лечение на това като растерна графика мрежа, като ние сме третирани 1524 01:12:25,330 --> 01:12:26,490 съвета в 15. 1525 01:12:26,490 --> 01:12:29,200 >> Както ние лекувахме тухлите, когато ние ги отпечатва на екрана. 1526 01:12:29,200 --> 01:12:31,350 A решетка от редове и колони. 1527 01:12:31,350 --> 01:12:32,350 След това - видяхме това. 1528 01:12:32,350 --> 01:12:33,840 Ние всъщност само кодирани това. 1529 01:12:33,840 --> 01:12:35,780 Ние създадохме някои временно складиране. 1530 01:12:35,780 --> 01:12:38,710 Четем в там, и след това ние го напиша. 1531 01:12:38,710 --> 01:12:42,680 Това е точно това, което току-що направих. 1532 01:12:42,680 --> 01:12:46,760 >> На следващо място, защото казах всяка линия завършва в някаква подплата, ние 1533 01:12:46,760 --> 01:12:48,260 прескачам, че подложка - 1534 01:12:48,260 --> 01:12:51,000 старата подложка. 1535 01:12:51,000 --> 01:12:52,630 И тогава можем да го добавите обратно. 1536 01:12:52,630 --> 01:12:55,140 В този случай, ние създаваме точно същата файла. 1537 01:12:55,140 --> 01:12:56,180 Ние просто го копирате. 1538 01:12:56,180 --> 01:12:57,700 Така че тази линия е някак глупаво. 1539 01:12:57,700 --> 01:12:59,660 Бихме могли буквално постави подложка инча 1540 01:12:59,660 --> 01:13:04,290 >> Но ако промените размера на файла, Все още ли искате тази линия? 1541 01:13:04,290 --> 01:13:08,510 1542 01:13:08,510 --> 01:13:11,560 Така че, ако искаме промяна на размера на файла, имаме все пак искате да пропуснете 1543 01:13:11,560 --> 01:13:12,810 над старата подложка? 1544 01:13:12,810 --> 01:13:15,170 1545 01:13:15,170 --> 01:13:15,970 >> STUDENT 74: Да. 1546 01:13:15,970 --> 01:13:17,090 >> JASON Hirschhorn: Така че ние правим. 1547 01:13:17,090 --> 01:13:19,290 Тъй като тази, отново, сделки с файла източник. 1548 01:13:19,290 --> 01:13:21,570 Ние не се грижи за пълнежа от файла източник. 1549 01:13:21,570 --> 01:13:23,410 Искаме да отидем на следващия ред. 1550 01:13:23,410 --> 01:13:28,850 Но ние не просто да сложи обратно стария размер на подложка. 1551 01:13:28,850 --> 01:13:31,540 Ние трябва да се постави обратно на нов размер на подложка. 1552 01:13:31,540 --> 01:13:35,810 >> Така че, когато ние сме промяна на размера на файл, ние все още искате да прескочат до 1553 01:13:35,810 --> 01:13:38,270 подложка в стария файл - какво четем в от. 1554 01:13:38,270 --> 01:13:40,370 Но това, което пишеш, за да, отиваме да се наложи да върнат някои различен 1555 01:13:40,370 --> 01:13:41,890 брой подложка, че сме преценили. 1556 01:13:41,890 --> 01:13:42,780 Да. 1557 01:13:42,780 --> 01:13:44,550 >> STUDENT 75: Редът на тези две линии няма значение, нали? 1558 01:13:44,550 --> 01:13:46,160 Защото си работа различни файлове. 1559 01:13:46,160 --> 01:13:46,620 >> JASON Hirschhorn: Точно така. 1560 01:13:46,620 --> 01:13:48,220 Редът на тези две линии Няма значение. 1561 01:13:48,220 --> 01:13:49,790 Пишем тази линия. 1562 01:13:49,790 --> 01:13:51,430 Това е тук за файла пишем да. 1563 01:13:51,430 --> 01:13:54,370 Това е важно, за да можем да получите правото размер на подложка. 1564 01:13:54,370 --> 01:13:57,560 Това трябва да се справят с в досието. 1565 01:13:57,560 --> 01:13:58,560 Искаме да пропуснете прав върху подложка. 1566 01:13:58,560 --> 01:13:59,470 >> Ние не искаме да се чете - 1567 01:13:59,470 --> 01:14:01,500 ако четеш един байт в даден момент, ние не се грижи за тези байтове за запълване. 1568 01:14:01,500 --> 01:14:04,070 Ние искаме да се премине към следващия ред. 1569 01:14:04,070 --> 01:14:11,800 Накрая точно като Люси даде за нас, ние затваряме файловете и да се върне 0. 1570 01:14:11,800 --> 01:14:13,890 Така че това е copy.c. 1571 01:14:13,890 --> 01:14:17,850 И ние всъщност е написал - ние прекарва голяма част от раздел пиша това, по същество. 1572 01:14:17,850 --> 01:14:18,740 >> Ти направи това. 1573 01:14:18,740 --> 01:14:22,440 Така че се надяваме, че имате добро чувство от това, което става тук. 1574 01:14:22,440 --> 01:14:25,890 Голямата разлика, честно казано, е само тази първа част, която се занимава с 1575 01:14:25,890 --> 01:14:29,970 особености на растерни файлове. 1576 01:14:29,970 --> 01:14:33,570 Така че аз имам като следващата ми слайд, какво трябва да направим? 1577 01:14:33,570 --> 01:14:35,510 Е, нека помислим за криминале. 1578 01:14:35,510 --> 01:14:38,080 >> И за някой, който чете през проблема зададен, какво правим 1579 01:14:38,080 --> 01:14:41,410 трябва да се направи в криминале? 1580 01:14:41,410 --> 01:14:42,080 Просто. 1581 01:14:42,080 --> 01:14:42,460 Aleja. 1582 01:14:42,460 --> 01:14:48,570 >> Aleja: Можете ли да извадите част на всеки пиксел, че означава червено. 1583 01:14:48,570 --> 01:14:49,730 И след това - 1584 01:14:49,730 --> 01:14:50,730 вид? 1585 01:14:50,730 --> 01:14:51,860 >> JASON Hirschhorn: OK. 1586 01:14:51,860 --> 01:14:54,460 Така че извадете част на всяка пиксел че означава червено. 1587 01:14:54,460 --> 01:14:57,234 Това е близо, но не всички от него. 1588 01:14:57,234 --> 01:14:59,780 >> STUDENT 76: Е, има различни начини, за да го направя. 1589 01:14:59,780 --> 01:14:59,870 >> JASON Hirschhorn: OK. 1590 01:14:59,870 --> 01:15:03,070 Дай ми един начин. 1591 01:15:03,070 --> 01:15:08,240 >> STUDENT 76: Извадете всички червени, и След това се наблегне на синьо и зелено. 1592 01:15:08,240 --> 01:15:10,010 >> JASON Hirschhorn: OK. 1593 01:15:10,010 --> 01:15:11,830 Така че при тези в двете посоки - 1594 01:15:11,830 --> 01:15:15,210 това звучи като ние я дам един пиксел, тя има червен, син и зелен ниво. 1595 01:15:15,210 --> 01:15:19,350 Ние искаме да се променят относителните нива на на червено, синьо, и зелено, в зависимост 1596 01:15:19,350 --> 01:15:20,740 по този пиксел. 1597 01:15:20,740 --> 01:15:28,380 Къде в този код трябва да се промени относителната червено, синьо, и зелено 1598 01:15:28,380 --> 01:15:29,720 нива на даден пиксел. 1599 01:15:29,720 --> 01:15:30,600 След като сме го прочетете - 1600 01:15:30,600 --> 01:15:32,520 преди да го напиша? 1601 01:15:32,520 --> 01:15:34,564 Дай ми номера на реда. 1602 01:15:34,564 --> 01:15:35,950 >> ПОВЕЧЕ ОТ УЧЕНИЦИ: 83. 1603 01:15:35,950 --> 01:15:37,320 >> JASON Hirschhorn: 83. 1604 01:15:37,320 --> 01:15:38,570 Така че точно тук. 1605 01:15:38,570 --> 01:15:40,830 1606 01:15:40,830 --> 01:15:45,710 За криминале, кодът трябва да пиша всичко трябва да отиде точно там. 1607 01:15:45,710 --> 01:15:47,640 И това е само код Вие трябва да напишете. 1608 01:15:47,640 --> 01:15:51,520 Защото, както чухме, всичко, което трябва да направите, е да промените тези относителни синьо, 1609 01:15:51,520 --> 01:15:54,420 червено и зелено нива от всеки пиксел. 1610 01:15:54,420 --> 01:15:58,250 >> Вие сте го четат, и сега си ще го напиша. 1611 01:15:58,250 --> 01:16:03,100 Как мога да получа - ако имам това нещо наречена тройна, точно тук, и това е от 1612 01:16:03,100 --> 01:16:04,570 въведете RGBTRIPLE - 1613 01:16:04,570 --> 01:16:08,650 добре, ако ние погледнахме в bmp.h, какво е RGBTRIPLE? 1614 01:16:08,650 --> 01:16:11,450 1615 01:16:11,450 --> 01:16:12,700 >> STUDENT 77: Това е една структура. 1616 01:16:12,700 --> 01:16:17,440 1617 01:16:17,440 --> 01:16:18,900 >> JASON Hirschhorn: RGBTRIPLE е структурата. 1618 01:16:18,900 --> 01:16:22,330 Ние виждаме, че чак тук. 1619 01:16:22,330 --> 01:16:26,600 И така, ако аз исках да има достъп, да речем, червено ниво на структурата, как да направя 1620 01:16:26,600 --> 01:16:30,005 достъп до червено ниво на тази структура? 1621 01:16:30,005 --> 01:16:37,280 >> [CLASS мърморене] 1622 01:16:37,280 --> 01:16:38,530 >> STUDENT 78: RGBTRIPLE.rgbtred? 1623 01:16:38,530 --> 01:16:47,250 1624 01:16:47,250 --> 01:16:48,856 >> JASON Hirschhorn: Вярно ли е? 1625 01:16:48,856 --> 01:16:53,040 >> STUDENT 79: Тя трябва да е тройна точка, вместо RGBTRIPLE точка? 1626 01:16:53,040 --> 01:16:54,120 >> JASON Hirschhorn: Triple. 1627 01:16:54,120 --> 01:16:56,700 Triple е локалната променлива, така че тук, няма указатели тук. 1628 01:16:56,700 --> 01:16:58,400 Така че ние просто използвайте нотация точка. 1629 01:16:58,400 --> 01:17:00,480 Това ще ми даде нивото на червено. 1630 01:17:00,480 --> 01:17:06,180 Ако искате да я промените, просто настроите то се равнява на нещо по-различно. 1631 01:17:06,180 --> 01:17:13,190 Така че отново, този ред код достъпва тази променлива вътре в тази структура, и 1632 01:17:13,190 --> 01:17:15,070 можем да го настроите да нещо ново. 1633 01:17:15,070 --> 01:17:20,040 >> Така криминале, отново, това е, По същество, това, което ние трябва да направим. 1634 01:17:20,040 --> 01:17:21,170 Много просто. 1635 01:17:21,170 --> 01:17:25,020 Просто промените някои относителни нива, и това е мястото, където този код отива. 1636 01:17:25,020 --> 01:17:27,720 Преоразмеряване, от друга страна, е малко по-особено. 1637 01:17:27,720 --> 01:17:30,900 В действителност, преоразмеряване е може би най- -трудната част от този проблем настроен. 1638 01:17:30,900 --> 01:17:32,720 Имаме три минути, за да отидат над него. 1639 01:17:32,720 --> 01:17:34,910 >> Но отново, ние сме вече написана голямата част от този код, така че ние 1640 01:17:34,910 --> 01:17:36,500 трябва да бъде доста познато. 1641 01:17:36,500 --> 01:17:40,750 Кои са някои от нещата, които искаме да направим в преоразмеряване, ако сте чели през 1642 01:17:40,750 --> 01:17:43,470 определен проблем? 1643 01:17:43,470 --> 01:17:45,290 Ако ги даде на мен, ние може да се говори за тях. 1644 01:17:45,290 --> 01:17:47,340 Кои са някои от нещата, които искаме да направим? 1645 01:17:47,340 --> 01:17:47,970 >> STUDENT 80: Вертикално - 1646 01:17:47,970 --> 01:17:52,360 така че трябва да го преоразмерите хоризонтално, но вертикално преоразмеряване, както и? 1647 01:17:52,360 --> 01:17:58,475 >> JASON Hirschhorn: Така че, ако ние сме даден пиксел, и ние искаме да я преоразмерите от 1648 01:17:58,475 --> 01:18:03,460 фактор на две, то сега трябва да бъде преоразмерява хоризонтално и преоразмерява 1649 01:18:03,460 --> 01:18:05,220 вертикално. 1650 01:18:05,220 --> 01:18:06,640 Това прави ли смисъл? 1651 01:18:06,640 --> 01:18:07,060 Да. 1652 01:18:07,060 --> 01:18:09,300 Така че това е може би най- най-голямото предизвикателство. 1653 01:18:09,300 --> 01:18:10,430 И ние ще говорим за това след малко. 1654 01:18:10,430 --> 01:18:11,065 Да. 1655 01:18:11,065 --> 01:18:15,270 >> STUDENT 81: Начинът, по който съм мислил за това беше ли необходимо печат го навън - 1656 01:18:15,270 --> 01:18:15,490 >> JASON Hirschhorn: Изчакайте. 1657 01:18:15,490 --> 01:18:17,580 Не ни кажеш какво си направил. 1658 01:18:17,580 --> 01:18:20,620 Ние ще говорим в логиката. 1659 01:18:20,620 --> 01:18:21,870 >> STUDENT 81: OK. 1660 01:18:21,870 --> 01:18:25,090 1661 01:18:25,090 --> 01:18:27,410 Какъв беше въпросът? 1662 01:18:27,410 --> 01:18:28,892 >> JASON Hirschhorn: Ти просто вдигна ръката си. 1663 01:18:28,892 --> 01:18:31,600 Нямаше никакво съмнение. 1664 01:18:31,600 --> 01:18:32,520 Нека да го представи. 1665 01:18:32,520 --> 01:18:34,560 Нека само да обсъдим това за кратко. 1666 01:18:34,560 --> 01:18:38,400 Така че ние имаме един пиксел, ние искаме да го репликира, както хоризонтално, така и 1667 01:18:38,400 --> 01:18:39,360 вертикално. 1668 01:18:39,360 --> 01:18:48,920 Така че в идеалния случай това, което правим тук, е, че ние прочетете в нашия пиксел, ние ще го напиша 1669 01:18:48,920 --> 01:18:51,690 обаче много пъти. 1670 01:18:51,690 --> 01:18:54,720 >> Но тогава ние имаме трик тук, защото След това ние искаме да прескочите до 1671 01:18:54,720 --> 01:18:57,660 следващия ред и ще го напиша в в началото на следващия ред. 1672 01:18:57,660 --> 01:19:02,960 Така че, ако искаме да се възпроизвеждат както хоризонтално и вертикално, което е 1673 01:19:02,960 --> 01:19:05,050 един добър начин да се направи това - 1674 01:19:05,050 --> 01:19:06,780 една добра макар и да направя това? 1675 01:19:06,780 --> 01:19:11,950 Така че ние не трябва постоянно да се стреми около нашия файл, за да поставите нещата. 1676 01:19:11,950 --> 01:19:14,360 >> Този въпрос не може да има имаше смисъл, но мисля, че едно 1677 01:19:14,360 --> 01:19:15,800 отговори на това ще ви помогне. 1678 01:19:15,800 --> 01:19:17,210 >> STUDENT 82: Създаване на масив? 1679 01:19:17,210 --> 01:19:20,090 >> JASON Hirschhorn: Така че нека да помислим на всеки файл като ред. 1680 01:19:20,090 --> 01:19:22,550 Нека да помислим по отношение на реда. 1681 01:19:22,550 --> 01:19:26,670 Ако имаме първата ни ред от нашата малка картина, можем да направим този ред 1682 01:19:26,670 --> 01:19:30,640 в голям ред от голяма картина, и след това се възпроизвеждат този ред обаче 1683 01:19:30,640 --> 01:19:34,250 Много пъти трябва да се повтори, а не става пиксел по пиксел, 1684 01:19:34,250 --> 01:19:37,260 която получава объркващо, когато занимаваща се с файлове. 1685 01:19:37,260 --> 01:19:38,730 >> Защото, ако имахме - 1686 01:19:38,730 --> 01:19:41,260 Бягам от космоса. 1687 01:19:41,260 --> 01:19:46,490 Ако това е нашият файл, а ние имаме, че един пиксел там, и ние искаме да го сложи 1688 01:19:46,490 --> 01:19:49,840 точно там, ние все още имаме някои неща че е необходимо да отида там, когато сме 1689 01:19:49,840 --> 01:19:51,450 писането и създаването на нашия нов файл - 1690 01:19:51,450 --> 01:19:53,250 нашият файл, който е два пъти по-голям. 1691 01:19:53,250 --> 01:19:56,820 >> Но това е наистина трудно с файлови функции , за да прескочите до около нови линии 1692 01:19:56,820 --> 01:20:00,260 ей така, и след това се върнете тук и постави нещата там. 1693 01:20:00,260 --> 01:20:04,500 Това е почти невъзможно да се направи нещо така, ако това има смисъл. 1694 01:20:04,500 --> 01:20:10,180 Така че, ако ние мислим по отношение на реда, ние можем заемем ред, а след това го поставя - 1695 01:20:10,180 --> 01:20:11,720 репликира редове вертикално. 1696 01:20:11,720 --> 01:20:15,860 >> И това е начина, по който се справят с преоразмеряване вертикално, а не хоризонтално. 1697 01:20:15,860 --> 01:20:18,810 Това е вид на бърз и малко объркващо. 1698 01:20:18,810 --> 01:20:22,375 За съжаление времето ни изтече. 1699 01:20:22,375 --> 01:20:27,340 Аз ще застана отвън за тези от вас, тук, които имат въпроси относно 1700 01:20:27,340 --> 01:20:30,500 проблем набор, включително възстанови. 1701 01:20:30,500 --> 01:20:32,320 >> Така че нека да се отложи за сега. 1702 01:20:32,320 --> 01:20:34,480 И отново, ако имате някакви въпроси, ние да говорите отвън. 1703 01:20:34,480 --> 01:20:38,294