1 00:00:00,000 --> 00:00:07,810 2 00:00:07,810 --> 00:00:09,840 >> Джейсон Хіршхорна: Ласкаво просимо, все, щоб Тиждень 6. 3 00:00:09,840 --> 00:00:14,790 Я щасливий бачити вас усіх живий і здоровий після Вікторина 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 >> Пару вас, у мене зустріч після занять. 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 Ми збираємося перейти Вікторина 0 наступний, і Я відповім на будь-які питання нікого 17 00:00:54,590 --> 00:00:57,360 має про конкретних проблем. 18 00:00:57,360 --> 00:01:02,050 І потім, ми будемо йти по файловий ввід / вивід і проблема встановити 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 >> Нагадаємо, що у мене є онлайн текст коробка, створений для вас, щоб заповнити, якщо ви 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 Так Я штовхаю вас всіх, та інших ТФ штовхають вас, хлопці, щоб не тільки свою чергу 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 екран, кожен рядок - кожна цеглина в даний рядок має той же координати у - 56 00:03:03,070 --> 00:03:04,390 однакову висоту координат. 57 00:03:04,390 --> 00:03:07,930 >> Так що у-координату не потрібно розраховується в інтер'єрі 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 у-координату, і що координати у може просто бути розрахована 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 покласти всередині циклу FOR, і не повинні відбувається кожного разу, коли ви йдете 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 х і у-координату нулю. 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 >> Так що ми збираємося рухатися далі до розмови про вікторині 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 >> [Шерех] 101 00:05:21,500 --> 00:05:22,750 >> Джейсон Хіршхорна: Сім секунд. 102 00:05:22,750 --> 00:05:23,250 ОК. 103 00:05:23,250 --> 00:05:24,970 Давайте поговоримо про вікторину 0 небагато. 104 00:05:24,970 --> 00:05:26,700 Більшість з вас є свій Вікторина 0 повернувся. 105 00:05:26,700 --> 00:05:29,820 Якщо ви цього не зробите, ми сподіваємося, Ви пам'ятаєте його небагато. 106 00:05:29,820 --> 00:05:34,770 Але якщо ви взяли Вікторина 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 думки про вікторині 0. 116 00:05:59,440 --> 00:06:02,660 Так, хто хотів би отримати нас почав з питання або 117 00:06:02,660 --> 00:06:04,655 прокоментувати про вікторині 0? 118 00:06:04,655 --> 00:06:07,435 119 00:06:07,435 --> 00:06:10,410 >> [ПАПЕРИ шелест] 120 00:06:10,410 --> 00:06:11,470 >> Джейсон Хіршхорна: Не всі зробив відмінно. 121 00:06:11,470 --> 00:06:12,720 Так що я знаю [сміється] 122 00:06:12,720 --> 00:06:15,950 там повинні бути деякі питання про вікторині 0. 123 00:06:15,950 --> 00:06:27,940 124 00:06:27,940 --> 00:06:28,590 ОК. 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 >> Джейсон Хіршхорна: номер 10. 129 00:06:33,560 --> 00:06:35,400 Який з них був номер 10? 130 00:06:35,400 --> 00:06:35,840 >> OMPICA: - 131 00:06:35,840 --> 00:06:36,420 >> Джейсон Хіршхорна: Я 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 >> Джейсон Хіршхорна: номер 10 було вісім в I - писати від восьми до I? 135 00:06:42,180 --> 00:06:42,980 >> OMPICA: Так. 136 00:06:42,980 --> 00:06:43,630 >> Джейсон Хіршхорна: ОК. 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 У розділі перед вікторини, я запитав ви, хлопці, код Як стерлінгів і 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 Але від восьми до мене, ми насправді не код це в класі, але це було, знову ж таки, 145 00:07:06,030 --> 00:07:07,500 запитав на вікторині. 146 00:07:07,500 --> 00:07:13,270 Так пару речей, щоб прийняти Відзначимо при кодуванні від восьми до I. 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 Так с є символ зірки, и Кронштейн я це символ. 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, з Цезарем і 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 характер між нулем і дев'ять, і не якийсь інший символ, як А, 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 >> Джейсон Хіршхорна: ОК. 197 00:09:50,240 --> 00:09:53,940 Чи є інші питання про вікторині 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 Нічого собі. 206 00:10:06,966 --> 00:10:11,090 >> [ПАПЕРИ шелест] 207 00:10:11,090 --> 00:10:11,520 >> Джейсон Хіршхорна: Так. 208 00:10:11,520 --> 00:10:11,700 Майкл. 209 00:10:11,700 --> 00:10:14,140 >> Майкл: Це число 7 - випадкова? 210 00:10:14,140 --> 00:10:16,500 >> Джейсон Хіршхорна: номер 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 >> Майкл: поплавок між 0.0 і 1.0. 223 00:10:44,840 --> 00:10:45,530 >> Джейсон Хіршхорна: число - так. 224 00:10:45,530 --> 00:10:47,910 Число між 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 Так що це просто відкрити дужка, недалеко Хлопець - і що, само по собі, є 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 >> Майкл: Ні. 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 >> Джейсон Хіршхорна: Ні. 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 Будь-які інші питання про вікторині 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 >> Джейсон Хіршхорна: Коли ви використовуєте рекурсивна - так більш загально, 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 >> [ПАПЕРИ шелест] 283 00:13:26,963 --> 00:13:29,730 >> СТУДЕНТ 1: Рекурсивні менше кодування - менше набирати? 284 00:13:29,730 --> 00:13:33,170 >> Джейсон Хіршхорна: Так взагалі, рекурсія особливо, функція - 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 >> СТУДЕНТ 2: Con рекурсії - 293 00:13:49,240 --> 00:13:50,940 Він використовує більше пам'яті. 294 00:13:50,940 --> 00:13:52,200 >> Джейсон Хіршхорна: Так точно. 295 00:13:52,200 --> 00:13:55,720 Рекурсивна функція буде продовжувати додавати стек кадрів в стек. 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 >> СТУДЕНТ 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 >> Джейсон Хіршхорна: Я думаю, що це правда. 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 ОК. 317 00:14:49,330 --> 00:14:51,650 Отже, це, мабуть, два - 318 00:14:51,650 --> 00:14:54,370 найбільший за і найбільший кон, щоб рекурсивний проти 319 00:14:54,370 --> 00:14:57,080 ітеративний підхід. 320 00:14:57,080 --> 00:14:57,690 ОК. 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 Файл введення / виведення Існує чудовий коротка На цьому тижні на файл вводу / виводу, що, ми сподіваємося, 325 00:15:15,260 --> 00:15:19,270 ви дивилися кратне раз, і захоплювався. 326 00:15:19,270 --> 00:15:22,910 Багато роботи увійшли в це, і у мене є почув, що це шалено корисно. 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 не зміг робити будь-які документи слово, то 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 >> По-друге, ви можете передати аргумент на Еореп, і ось що ви хочете зробити 364 00:17:33,520 --> 00:17:34,620 з файлом. 365 00:17:34,620 --> 00:17:38,450 Є три основних аргументи, що Ви збираєтеся перейти на Еореп. 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 >> СТУДЕНТ 4: Файл? 371 00:17:50,010 --> 00:17:50,440 >> Джейсон Хіршхорна: Вибачте. 372 00:17:50,440 --> 00:17:55,490 Три основних аргументи можна передати як другий аргумент Еореп. 373 00:17:55,490 --> 00:17:57,060 Ви праві - ім'я файлу є першим аргументом. 374 00:17:57,060 --> 00:18:01,620 Але другий аргумент Еореп є як правило, три струни, і - так. 375 00:18:01,620 --> 00:18:02,210 Алея. 376 00:18:02,210 --> 00:18:03,490 >> ALEJA: для додавання. 377 00:18:03,490 --> 00:18:06,840 >> Джейсон Хіршхорна:, якщо ви хочете додати у файл, який вже існує. 378 00:18:06,840 --> 00:18:07,810 >> СТУДЕНТ 5: R для читання. 379 00:18:07,810 --> 00:18:09,930 >> Джейсон Хіршхорна: R, якщо ви хочете читати з файлу. 380 00:18:09,930 --> 00:18:10,670 >> СТУДЕНТ 6: Вт для запису. 381 00:18:10,670 --> 00:18:12,840 >> Джейсон Хіршхорна: А ж, якщо ви хочете написати в файл. 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 >> Ми не збираємося турбуватися, що це все заголовні Фото річ. 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 с - всякий раз, коли ми Malloc щось, ми хочемо звільнити щось, щоб не 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 Так що це основи файлового введення / 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 проблеми, про фото введення / виводу або кроки, які я просто підійшов? 424 00:20:51,800 --> 00:21:00,198 425 00:21:00,198 --> 00:21:03,162 >> [Машинці ЗВУКИ] 426 00:21:03,162 --> 00:21:04,150 >> Джейсон Хіршхорна: Чи подобається вам є питання, AVI? 427 00:21:04,150 --> 00:21:04,660 >> AVI: Ні. 428 00:21:04,660 --> 00:21:04,740 >> Джейсон Хіршхорна: ОК. 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 ОК. 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 Якщо ви введете ф а потім передати його два Аргументи на вашому терміналі, ви можете 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 Не в С, просто в якийсь псевдокоде, або навіть ментальна модель 452 00:22:04,410 --> 00:22:06,030 що відбувається. 453 00:22:06,030 --> 00:22:10,050 >> Далі, коли у вас є псевдокод вниз, з'ясувати, як псевдокод 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 А потім ми збираємося перейти псевдокод, і код 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 >> СТУДЕНТ 7: Чи можу я проведіть папірець? 464 00:22:39,330 --> 00:22:41,537 >> Джейсон Хіршхорна: У чому справа? 465 00:22:41,537 --> 00:26:46,047 466 00:26:46,047 --> 00:26:48,043 >> [Машинці ЗВУКИ] 467 00:26:48,043 --> 00:26:48,730 >> Джейсон Хіршхорна: ОК. 468 00:26:48,730 --> 00:26:51,710 Давайте розглянемо псевдокоде першим, і тоді я дам тобі ще пару 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 псевдокод для цієї функції? 473 00:27:00,030 --> 00:27:03,330 474 00:27:03,330 --> 00:27:05,740 >> СТУДЕНТ 8: Переконайтеся, що Вам дали два файли. 475 00:27:05,740 --> 00:27:06,990 >> Джейсон Хіршхорна: ОК. 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 >> СТУДЕНТ 8: я повернуся 0. 479 00:27:25,974 --> 00:27:27,872 >> Джейсон Хіршхорна: Чи повинні ми повернути 0? 480 00:27:27,872 --> 00:27:30,182 >> СТУДЕНТ 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 >> Джейсон Хіршхорна: Так. 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 ОК. 487 00:27:35,030 --> 00:27:36,730 Так ось перша лінія псевдокоду. 488 00:27:36,730 --> 00:27:38,715 Хто має другу лінію псевдокоде? 489 00:27:38,715 --> 00:27:40,630 >> СТУДЕНТ 9: Відкрити обидві файли? 490 00:27:40,630 --> 00:27:41,880 >> Джейсон Хіршхорна: Відкрийте обидва файли. 491 00:27:41,880 --> 00:27:49,970 492 00:27:49,970 --> 00:27:50,920 ОК? 493 00:27:50,920 --> 00:27:52,850 >> СТУДЕНТ 10: Перевірте, якщо файл NULL? 494 00:27:52,850 --> 00:28:10,906 495 00:28:10,906 --> 00:28:12,580 >> Джейсон Хіршхорна: Перевірте, впевнений ні один не 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 >> СТУДЕНТ 11: Ні. 500 00:28:20,080 --> 00:28:21,190 >> Джейсон Хіршхорна: Це не 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 >> СТУДЕНТ 12: Чому б вам не перевірити, переконайтеся, що файли NULL 513 00:28:46,490 --> 00:28:48,670 перш ніж відкрити їх? 514 00:28:48,670 --> 00:28:54,772 >> Джейсон Хіршхорна: Так відкритим економить щось в цьому файлі. 515 00:28:54,772 --> 00:28:57,780 І якщо ви йдете сюди - 516 00:28:57,780 --> 00:28:59,520 так ця лінія - Еореп - 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 >> СТУДЕНТ 12: Ох. 520 00:29:08,020 --> 00:29:08,180 ОК. 521 00:29:08,180 --> 00:29:08,500 Попався. 522 00:29:08,500 --> 00:29:09,050 >> Джейсон Хіршхорна: У файлі. 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 ОК. 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 >> СТУДЕНТ 13: Чи є. 532 00:29:24,520 --> 00:29:25,020 >> Джейсон Хіршхорна: Чи є? 533 00:29:25,020 --> 00:29:25,930 Жоден не? 534 00:29:25,930 --> 00:29:26,350 >> СТУДЕНТ 13: Чи є. 535 00:29:26,350 --> 00:29:26,390 >> Джейсон Хіршхорна: ОК. 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 Добре, наступний рядок псевдокоду. 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 >> СТУДЕНТ 14: Ви повинні прочитати з першого файлу? 544 00:29:40,895 --> 00:29:42,290 >> Джейсон Хіршхорна: ОК. 545 00:29:42,290 --> 00:29:46,240 >> СТУДЕНТ 14: Або ми використовуємо fscanf або щось на зразок цього першого файлу? 546 00:29:46,240 --> 00:29:50,650 >> Джейсон Хіршхорна: Тому ми хочемо читати з першого файлу і - 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 >> СТУДЕНТ 15: Написати в кінцевий файл? 554 00:30:12,190 --> 00:30:22,080 555 00:30:22,080 --> 00:30:25,620 >> Джейсон Хіршхорна: Ми пишемо, щоб кінцевий файл, і - 556 00:30:25,620 --> 00:30:26,210 ОК. 557 00:30:26,210 --> 00:30:30,030 Що ще нам не вистачає? 558 00:30:30,030 --> 00:30:32,460 Хтось, хто не дав мені рядок коду ще - псевдокоду. 559 00:30:32,460 --> 00:30:33,510 Так. 560 00:30:33,510 --> 00:30:36,540 >> СТУДЕНТ 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 >> [Електронний звуковий сигнал] 564 00:30:40,660 --> 00:30:41,095 >> Джейсон Хіршхорна: Ой. 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 >> СТУДЕНТ 16: Так. 568 00:30:44,960 --> 00:30:48,940 >> Джейсон Хіршхорна: Так дайте він мені ще один раз. 569 00:30:48,940 --> 00:30:51,640 >> СТУДЕНТ 16: Перевірте, чи правильно там ще наступна рядок з 570 00:30:51,640 --> 00:30:52,920 Вихідний файл для читання. 571 00:30:52,920 --> 00:30:53,500 >> Джейсон Хіршхорна: ОК. 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 ОК. 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 >> І потім, що це останній лінія псевдокоде? 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 >> СТУДЕНТ 17: Закрийте файли? 585 00:31:30,260 --> 00:31:31,510 >> Джейсон Хіршхорна: Абсолютно вірно. 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 Так що наш псевдокод. 589 00:31:38,400 --> 00:31:41,870 Я збираюся поставити псевдокод в 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 >> ОК. 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 Без назви документа 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 >> Джейсон Хіршхорна: ОК. 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 >> Джейсон Хіршхорна: ОК. 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 >> Джейсон Хіршхорна: ОК. 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 >> Джейсон Хіршхорна: Як я отримую це кольоровий? 610 00:34:31,830 --> 00:34:34,060 >> [Вставляючи ГОЛОСИ] 611 00:34:34,060 --> 00:34:35,040 >> Nishant: Як ви отримуєте це кольори? 612 00:34:35,040 --> 00:34:38,060 >> Джейсон Хіршхорна: Як я колірне кодування? 613 00:34:38,060 --> 00:34:38,570 >> Nishant: Я не знаю. 614 00:34:38,570 --> 00:34:38,830 О. 615 00:34:38,830 --> 00:34:39,389 Зберегти. 616 00:34:39,389 --> 00:34:39,929 >> Джейсон Хіршхорна: Save. 617 00:34:39,929 --> 00:34:40,270 Так. 618 00:34:40,270 --> 00:34:41,760 Я повинен зберегти його як. С. 619 00:34:41,760 --> 00:34:46,239 Так збережіть його на робочому столі як cp.c. 620 00:34:46,239 --> 00:34:47,280 Солодкий. 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 >> Джейсон Хіршхорна: Виглядає добре. 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 ОК. 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 буде потрібно, щоб задовольнити наш перший коментувати псевдокоде? 636 00:35:41,280 --> 00:35:41,985 Ви. 637 00:35:41,985 --> 00:35:48,780 >> СТУДЕНТ 18: вона не повинна бути внутр агдс, а потім символ * агду? 638 00:35:48,780 --> 00:35:49,490 >> Джейсон Хіршхорна: Я думаю, ви праві. 639 00:35:49,490 --> 00:35:56,270 Давайте змінимо це в ціле основні, відкриті дужка, внутр агдс, кома, символ * агду? 640 00:35:56,270 --> 00:35:57,150 Як це? 641 00:35:57,150 --> 00:35:57,410 >> СТУДЕНТ 18: Кронштейни. 642 00:35:57,410 --> 00:35:58,260 >> Джейсон Хіршхорна: Кронштейни. 643 00:35:58,260 --> 00:35:59,860 Відкрити кронштейн, закриває дужка, близько батьків. 644 00:35:59,860 --> 00:36:00,240 Прекрасно. 645 00:36:00,240 --> 00:36:02,160 Тепер я можу взяти аргументи командного рядка. 646 00:36:02,160 --> 00:36:02,430 ОК. 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 >> СТУДЕНТ 18: Якщо агдс - 650 00:36:09,180 --> 00:36:11,060 на цей раз не рівнятися 3. 651 00:36:11,060 --> 00:36:14,360 >> Джейсон Хіршхорна: Якщо відкриті дужка агдс не дорівнює 3? 652 00:36:14,360 --> 00:36:16,970 >> СТУДЕНТ 18: Так, ви повернетеся 1 або що-небудь. 653 00:36:16,970 --> 00:36:17,460 >> Джейсон Хіршхорна: Вибачте. 654 00:36:17,460 --> 00:36:19,120 >> СТУДЕНТ 18: Повернення 1 або що-небудь. 655 00:36:19,120 --> 00:36:20,270 >> Джейсон Хіршхорна: Повернення 1. 656 00:36:20,270 --> 00:36:22,230 ОК? 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 >> Курт: Так все заголовні F-I-L-E зірки-джерела. 664 00:36:36,145 --> 00:36:39,390 665 00:36:39,390 --> 00:36:40,920 >> Джейсон Хіршхорна: Я збираюся вийняти голосні. 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 >> СТУДЕНТ 18: Так само FOPEN - 669 00:36:44,610 --> 00:36:46,612 >> Джейсон Хіршхорна: Так само FOPEN? 670 00:36:46,612 --> 00:36:49,870 >> СТУДЕНТ 18: Відкриті дужка, агду, відкриває дужка. 671 00:36:49,870 --> 00:36:50,055 >> Джейсон Хіршхорна: Почекайте. 672 00:36:50,055 --> 00:36:50,240 Вибачте. 673 00:36:50,240 --> 00:36:51,050 Відкрити дужка. 674 00:36:51,050 --> 00:36:51,456 ОК. 675 00:36:51,456 --> 00:36:53,080 >> СТУДЕНТ 18: Так. 676 00:36:53,080 --> 00:36:55,110 Argv 1 до півдня. 677 00:36:55,110 --> 00:36:55,860 >> Джейсон Хіршхорна: Sub 1? 678 00:36:55,860 --> 00:36:56,140 >> СТУДЕНТ 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 А потім кома, а потім відкритий подвійний цитата, г, подвійні лапки, 682 00:37:06,470 --> 00:37:08,250 близькі дужка, крапка з комою. 683 00:37:08,250 --> 00:37:09,450 >> Джейсон Хіршхорна: Солодкий. 684 00:37:09,450 --> 00:37:10,950 А як щодо іншого? 685 00:37:10,950 --> 00:37:16,030 >> СТУДЕНТ 18: Дуже схоже, але замість з S-R-C, ви б назвав це D-S-Т. 686 00:37:16,030 --> 00:37:17,060 >> Джейсон Хіршхорна: Оо! 687 00:37:17,060 --> 00:37:17,772 Мені це подобається. 688 00:37:17,772 --> 00:37:20,010 >> СТУДЕНТ 18: Просто D-S-Т. Так. 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 І то ш замість р. 692 00:37:26,720 --> 00:37:27,620 Так. 693 00:37:27,620 --> 00:37:29,630 >> Джейсон Хіршхорна: Відмінно. 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 Хто може дати мені код, мені потрібно, щоб задовольнити цю лінію псевдокоде? 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: Якщо враженнями дорівнює рівних 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 >> Джейсон Хіршхорна: Що? 705 00:38:07,976 --> 00:38:08,890 >> ARCHER: Return 2? 706 00:38:08,890 --> 00:38:09,760 >> Джейсон Хіршхорна: Return 2. 707 00:38:09,760 --> 00:38:14,400 Так що, якщо відкрита дужка враженнями одно одно NULL, або - 708 00:38:14,400 --> 00:38:15,590 що б це не thing's - труба? 709 00:38:15,590 --> 00:38:16,346 Труба? 710 00:38:16,346 --> 00:38:17,140 Ми будемо називати його труби. 711 00:38:17,140 --> 00:38:22,340 Труба, труби, DST складає рівних NULL, повернутися 2. 712 00:38:22,340 --> 00:38:23,900 ОК? 713 00:38:23,900 --> 00:38:26,060 Поки ми не перебуваєте поза байт - 714 00:38:26,060 --> 00:38:29,820 ми начебто пропустив цей крок з псевдокод частина йти, щоб тут. 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 але З інструментом це звучить як? 720 00:38:39,495 --> 00:38:39,970 >> СТУДЕНТ 19: петля. 721 00:38:39,970 --> 00:38:40,980 >> Джейсон Хіршхорна: петля. 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 >> Джейсон Хіршхорна: ДЛЯ. 734 00:39:11,460 --> 00:39:15,180 >> AVI: Int я дорівнює нулю. 735 00:39:15,180 --> 00:39:17,360 >> Джейсон Хіршхорна: ОК. 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 >> Джейсон Хіршхорна: ОК. 740 00:39:32,580 --> 00:39:35,870 >> AVI: Тому що ви хочете розмір файлу, чи не так? 741 00:39:35,870 --> 00:39:41,090 >> Джейсон Хіршхорна: Так що це, ймовірно, не буде дати нам розмір фактична 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 >> СТУДЕНТ 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 Так що, якщо ми просто продовжуємо збільшуючи, що поки ми не знайшли б нульового символу в 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 >> Джейсон Хіршхорна: Так ми можемо тримати збільшуючи символ * 754 00:40:14,300 --> 00:40:16,340 поки ми не знайдемо NULL - 755 00:40:16,340 --> 00:40:18,580 >> СТУДЕНТ 20: По суті продовжувати посимвольний, поки ми потрапили 756 00:40:18,580 --> 00:40:21,250 кінця файлу. 757 00:40:21,250 --> 00:40:21,600 >> Джейсон Хіршхорна: Так. 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 >> СТУДЕНТ 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 >> Джейсон Хіршхорна: ОК. 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 >> СТУДЕНТ 21: Fscanf? 775 00:40:47,590 --> 00:40:49,110 >> Джейсон Хіршхорна: Fscanf. 776 00:40:49,110 --> 00:40:49,510 ОК. 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 >> СТУДЕНТ 21: Я не знаю. 780 00:40:56,860 --> 00:40:57,110 >> Джейсон Хіршхорна: ОК. 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 >> СТУДЕНТ 22: Це FREAD? 786 00:41:05,380 --> 00:41:06,070 >> Джейсон Хіршхорна: 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 >> СТУДЕНТ 22: Ймовірно, тип файлу, а потім розташування у файлі? 791 00:41:17,410 --> 00:41:19,550 >> Джейсон Хіршхорна: Що я можу ввести тут щоб з'ясувати, який тип аргументів 792 00:41:19,550 --> 00:41:20,950 FREAD приймає? 793 00:41:20,950 --> 00:41:23,710 >> КІЛЬКА СТУДЕНТИ: людина FREAD. 794 00:41:23,710 --> 00:41:24,740 >> Джейсон Хіршхорна: Людина FREAD і FWRITE. 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 >> СТУДЕНТ 23: Чотири. 798 00:41:30,920 --> 00:41:32,690 >> Джейсон Хіршхорна: вона займає чотири аргументи. 799 00:41:32,690 --> 00:41:41,100 Він приймає покажчик, розмір, і що річ, що дивно, а деякі файл. 800 00:41:41,100 --> 00:41:42,000 ОК? 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 ОК. 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 >> Джейсон Хіршхорна: Так що я збираюся припинити Ви там, тому що це неправильно. 817 00:42:28,500 --> 00:42:32,590 818 00:42:32,590 --> 00:42:34,710 Ви праві з SRC, але де Перебування повинні піти? 819 00:42:34,710 --> 00:42:35,960 >> [Вставляючи ГОЛОСИ] 820 00:42:35,960 --> 00:42:38,976 821 00:42:38,976 --> 00:42:41,610 >> Джейсон Хіршхорна: Він повинен йти сюди. 822 00:42:41,610 --> 00:42:43,790 Це враженнями - наш враженнями тип. 823 00:42:43,790 --> 00:42:44,610 Давайте подивимося тут. 824 00:42:44,610 --> 00:42:49,610 Це просить тип файлу *, ми насправді, як правило, побачити їх так. 825 00:42:49,610 --> 00:42:57,630 Так що це просить аргументом тип файлу * під назвою потік, який враженнями. 826 00:42:57,630 --> 00:42:58,480 ОК? 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 >> СТУДЕНТ 24: Один байт за один раз. 830 00:43:04,370 --> 00:43:05,340 >> Джейсон Хіршхорна: Один байт. 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 >> СТУДЕНТ 25: Один. 834 00:43:12,910 --> 00:43:14,730 >> Джейсон Хіршхорна: Один. 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 >> СТУДЕНТ 26: Один? 839 00:43:23,520 --> 00:43:24,270 >> Джейсон Хіршхорна: Одна річ. 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 >> СТУДЕНТ 27: Пункт призначення? 844 00:43:36,510 --> 00:43:39,270 >> Джейсон Хіршхорна: Так я не можу поставити це прямо в місце призначення. 845 00:43:39,270 --> 00:43:40,800 >> СТУДЕНТ 28: Ти збираєшся покласти це в третій покажчик? 846 00:43:40,800 --> 00:43:41,780 >> СТУДЕНТ 27: Для призначення. 847 00:43:41,780 --> 00:43:42,270 >> Джейсон Хіршхорна: ОК. 848 00:43:42,270 --> 00:43:42,630 Так. 849 00:43:42,630 --> 00:43:46,820 >> СТУДЕНТ 29: Ви можете оголосити щось діяти як тимчасове зберігання раніше. 850 00:43:46,820 --> 00:43:47,350 >> Джейсон Хіршхорна: ОК. 851 00:43:47,350 --> 00:43:50,080 Дай мені це. 852 00:43:50,080 --> 00:43:53,930 >> СТУДЕНТ 29: Ще один файл покажчик, може бути? 853 00:43:53,930 --> 00:43:54,220 >> Джейсон Хіршхорна: ОК. 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 >> СТУДЕНТ 29: масив? 859 00:44:04,660 --> 00:44:05,770 >> Джейсон Хіршхорна: масив. 860 00:44:05,770 --> 00:44:07,730 ОК. 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 >> СТУДЕНТ 30: символ *? 864 00:44:18,060 --> 00:44:18,530 >> СТУДЕНТ 29: Так. 865 00:44:18,530 --> 00:44:19,880 >> Джейсон Хіршхорна: символ * не один байт. 866 00:44:19,880 --> 00:44:20,440 >> СТУДЕНТ 29: символ. 867 00:44:20,440 --> 00:44:21,810 >> Джейсон Хіршхорна: символ займає один байт. 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 >> СТУДЕНТ 31: Покладіть зірку наступний на персонаж. 883 00:44:55,775 --> 00:44:58,380 >> Джейсон Хіршхорна: я міг створили це символ *. 884 00:44:58,380 --> 00:45:00,216 ОК. 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 Чар * буфер, так що я можу перевести сюди? 888 00:45:05,740 --> 00:45:08,290 889 00:45:08,290 --> 00:45:09,310 >> СТУДЕНТ 31: Буфер. 890 00:45:09,310 --> 00:45:10,560 >> Джейсон Хіршхорна: Буфер. 891 00:45:10,560 --> 00:45:12,640 892 00:45:12,640 --> 00:45:14,500 Буфер є покажчиком на символ. 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 Хочете Malloc буфер? 898 00:45:24,440 --> 00:45:25,930 >> Джейсон Хіршхорна: Хто може відповісти на це питання? 899 00:45:25,930 --> 00:45:30,210 >> СТУДЕНТ 32: Ну, це насправді не точка до чого прямо зараз, так - 900 00:45:30,210 --> 00:45:32,610 >> Джейсон Хіршхорна: Але робити ми хочемо Malloc це? 901 00:45:32,610 --> 00:45:35,600 >> СТУДЕНТ 32: Якщо ви повинні були зробити його, що спосіб, я думаю, так, тому що ви повинні були б 902 00:45:35,600 --> 00:45:36,990 деяке місце для того, щоб вказати на. 903 00:45:36,990 --> 00:45:38,350 >> Джейсон Хіршхорна: Чи є у нас повинні Malloc це? 904 00:45:38,350 --> 00:45:40,580 >> СТУДЕНТ 33: Якщо ви збираєтеся використовувати його поза циклу. 905 00:45:40,580 --> 00:45:42,524 >> Джейсон Хіршхорна: Ми збираємося використовувати його поза циклом? 906 00:45:42,524 --> 00:45:44,392 >> СТУДЕНТ 34: Так. 907 00:45:44,392 --> 00:45:44,860 >> СТУДЕНТ 35: Почекайте. 908 00:45:44,860 --> 00:45:46,980 Чи хочемо ми оголосимо його в петлі в потойбічному? 909 00:45:46,980 --> 00:45:50,100 >> Джейсон Хіршхорна: Так що я думаю, ми повинні деякі псевдо той час як цикл тут, що ми 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 Нам не потрібно, щоб Malloc його. 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 >> СТУДЕНТ 36: Але це не вказуючи ні до чого. 919 00:46:09,590 --> 00:46:11,540 >> Джейсон Хіршхорна: Ні, це не ініціалізації ні до чого. 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 Так що, здається, в порядку. 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 ОК. 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 >> СТУДЕНТ 37: FWRITE? 931 00:46:33,770 --> 00:46:35,140 >> СТУДЕНТ 38: Fprintf? 932 00:46:35,140 --> 00:46:36,010 >> Джейсон Хіршхорна: Fprintf є одним. 933 00:46:36,010 --> 00:46:37,260 Що ще один? 934 00:46:37,260 --> 00:46:37,680 >> СТУДЕНТ 39: FWRITE. 935 00:46:37,680 --> 00:46:38,510 >> Джейсон Хіршхорна: FWRITE. 936 00:46:38,510 --> 00:46:41,250 І для наших цілей, FWRITE, які ми бачили тут, 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 >> Джейсон Хіршхорна: ОК. 943 00:47:02,210 --> 00:47:06,752 >> Nishant: Другий'S просто буде 1. 944 00:47:06,752 --> 00:47:09,510 По-третє один буде 1. 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 >> Джейсон Хіршхорна: Хто-небудь є всі питання про ту лінію? 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 ОК. 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 >> Люсі: Люсі. 958 00:47:40,580 --> 00:47:41,580 >> Джейсон Хіршхорна: Люсі. 959 00:47:41,580 --> 00:47:47,560 >> ЛЮСІ: Fclose враженнями, а потім FClose призначення. 960 00:47:47,560 --> 00:47:52,430 >> Джейсон Хіршхорна: Fclose, відкрита дужка, Спочатку, близькі дужка, крапка з комою. 961 00:47:52,430 --> 00:47:53,680 І FClose - 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 >> ЛЮСІ: Відкрити дужки, DST а потім з комою. 965 00:48:01,710 --> 00:48:02,520 >> Джейсон Хіршхорна: Відмінно. 966 00:48:02,520 --> 00:48:04,338 І що я повинен включити в кінці? 967 00:48:04,338 --> 00:48:05,210 >> ЛЮСІ: Повертає 0. 968 00:48:05,210 --> 00:48:05,570 >> Джейсон Хіршхорна: Повертає 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 >> Джейсон Хіршхорна: Ні. 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 ОК. 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 Навіть якщо це всього лише в деякому псевдокоде як і мова? 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 >> ЛЮСІ: кінець файлу. 987 00:48:43,240 --> 00:48:44,990 >> Джейсон Хіршхорна: кінець файлу. 988 00:48:44,990 --> 00:48:49,280 Так що ви розумієте під кінець файлу? 989 00:48:49,280 --> 00:48:50,955 >> ЛЮСІ: Як тільки ви досягаєте кінець файлу, зупинитися. 990 00:48:50,955 --> 00:48:51,240 >> Джейсон Хіршхорна: ОК. 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 >> СТУДЕНТ 40: Я думаю, що буфер буде встановлений в NULL. 994 00:48:59,900 --> 00:49:01,885 >> СТУДЕНТ 41: Буфер оголошений всередині циклу. 995 00:49:01,885 --> 00:49:03,670 >> Джейсон Хіршхорна: Так ви думаєте, буфер буде встановлений в NULL. 996 00:49:03,670 --> 00:49:05,850 Навіщо буфер бути встановлений в NULL? 997 00:49:05,850 --> 00:49:10,420 >> СТУДЕНТ 40: Тому що, коли ви FREAD, ви намагаєтеся поставити 998 00:49:10,420 --> 00:49:13,528 нічого в буфер. 999 00:49:13,528 --> 00:49:13,980 >> Джейсон Хіршхорна: ОК. 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 Чи означає це поставити NULL в буфері, або він робить щось ще? 1005 00:49:25,640 --> 00:49:27,510 Як ми можемо зрозуміти, що це? 1006 00:49:27,510 --> 00:49:28,190 >> СТУДЕНТ 42: Людина. 1007 00:49:28,190 --> 00:49:28,810 >> Джейсон Хіршхорна: Людина. 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 і FWRITE повернутися кількість елементів зчитані або записані. 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 >> СТУДЕНТ 43: Нульова? 1017 00:50:03,290 --> 00:50:04,540 >> Джейсон Хіршхорна: Що? 1018 00:50:04,540 --> 00:50:05,300 >> СТУДЕНТ 43: Нульова? 1019 00:50:05,300 --> 00:50:05,690 >> Джейсон Хіршхорна: Нуль. 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 >> Джейсон Хіршхорна: ОК. 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 >> Джейсон Хіршхорна: Хто може допомогти Аві не вдома? 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 >> Джейсон Хіршхорна: Ми просто пішов з цього приводу. 1037 00:50:54,060 --> 00:50:55,450 >> AVI: Як ви уявляєте це? 1038 00:50:55,450 --> 00:50:57,190 >> Джейсон Хіршхорна: Так вона повертає - давайте подивитися тут - вона повертає 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 >> СТУДЕНТ 45: А ви не можете просто покласти повною FREAD (буфер, 1, 1, SRC) в 1048 00:51:20,330 --> 00:51:21,660 в той час як цикл? 1049 00:51:21,660 --> 00:51:26,510 >> Джейсон Хіршхорна: Так ви пропонуєте Роблячи це в там? 1050 00:51:26,510 --> 00:51:27,600 >> [Вставляючи ГОЛОСИ] 1051 00:51:27,600 --> 00:51:29,520 >> Джейсон Хіршхорна: Почекай. 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 >> СТУДЕНТ 45: Буфер зовні. 1056 00:51:36,740 --> 00:51:38,110 >> Джейсон Хіршхорна: Ми повинні також рухатися в цьому тут. 1057 00:51:38,110 --> 00:51:41,700 >> СТУДЕНТ 45: Але робить це постійно перемістити його вперед? 1058 00:51:41,700 --> 00:51:42,950 >> [Вставляючи ГОЛОСИ] 1059 00:51:42,950 --> 00:51:46,540 1060 00:51:46,540 --> 00:51:47,470 >> Джейсон Хіршхорна: ОК. 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, то ми FWRITE. 1064 00:51:57,020 --> 00:51:59,760 Думки з цього приводу? 1065 00:51:59,760 --> 00:52:04,050 >> СТУДЕНТ 46: Мій єдиний питання, буде він насправді виконати команду FREAD? 1066 00:52:04,050 --> 00:52:06,175 >> Джейсон Хіршхорна: Хороше питання. 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 >> СТУДЕНТ 46: ОК. 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 >> Джейсон Хіршхорна: Ми бачили речі ні раніше, де у нас є 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 >> Джейсон Хіршхорна: Ми могли б запустити його. 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 >> Таким чином, хоча 1. 1095 00:53:12,640 --> 00:53:15,325 Чи означає це, код всередині Тоді як цикл буде виконуватися? 1096 00:53:15,325 --> 00:53:15,453 >> СТУДЕНТ 47: Так. 1097 00:53:15,453 --> 00:53:16,040 Це правда. 1098 00:53:16,040 --> 00:53:16,290 >> Джейсон Хіршхорна: Так. 1099 00:53:16,290 --> 00:53:17,490 1 вірно. 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 >> ОК. 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 >> СТУДЕНТ 48: Після того як ми рухатися буфер поза циклом, ми 1127 00:54:21,240 --> 00:54:22,670 повинні Malloc це? 1128 00:54:22,670 --> 00:54:23,310 >> Джейсон Хіршхорна: Хороше питання. 1129 00:54:23,310 --> 00:54:26,670 Після того як ми рухатися буфер межами цикл, ми повинні Malloc це? 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 >> Джейсон Хіршхорна: Так. 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 Таким чином, ми не повинні Malloc його. 1138 00:54:43,930 --> 00:54:47,766 Це локальна змінна, і її масштаби раніше включає цикл. 1139 00:54:47,766 --> 00:54:49,540 >> СТУДЕНТ 49: Чи потрібно нам, щоб звільнити її? 1140 00:54:49,540 --> 00:54:51,770 >> Джейсон Хіршхорна: Чи є у нас потрібно вільного буфера? 1141 00:54:51,770 --> 00:54:53,860 >> СТУДЕНТ 49: Так, якщо ми не Танос. 1142 00:54:53,860 --> 00:54:55,750 >> Джейсон Хіршхорна: Чи є у нас потрібно вільного буфера? 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 ОК. 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 Це було те, що те, що Маркус запропонував раніше. 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 >> СТУДЕНТ 50: Malloc це? 1154 00:55:30,960 --> 00:55:31,770 >> СТУДЕНТ 51: Так само NULL? 1155 00:55:31,770 --> 00:55:33,000 >> СТУДЕНТ 52: Скажіть буфера дорівнює NULL. 1156 00:55:33,000 --> 00:55:34,250 >> Джейсон Хіршхорна: ОК. 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 >> СТУДЕНТ 53: Ви можете зробити точку слеш CP, test.txt. 1167 00:56:22,230 --> 00:56:25,140 І тоді ви можете назвати ще один файл які він буде зберігати в. 1168 00:56:25,140 --> 00:56:25,510 >> Джейсон Хіршхорна: ОК. 1169 00:56:25,510 --> 00:56:27,380 Ми будемо називати його out.txt. 1170 00:56:27,380 --> 00:56:28,630 Круто? 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 Як ми можемо дізнатися, де несправність сегмент є? 1177 00:56:45,040 --> 00:56:45,680 Що? 1178 00:56:45,680 --> 00:56:45,990 >> СТУДЕНТ 54: GDB. 1179 00:56:45,990 --> 00:56:47,240 >> Джейсон Хіршхорна: 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 >> СТУДЕНТ 55: Р. 1186 00:57:02,730 --> 00:57:08,910 >> Джейсон Хіршхорна: Р. А що потім? 1187 00:57:08,910 --> 00:57:09,400 >> СТУДЕНТ 55: Аргументи? 1188 00:57:09,400 --> 00:57:10,650 >> Джейсон Хіршхорна: Тоді аргументи командного рядка. 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 Я готовий закластися, що ПОКИ перевірки не є причиною мого сегм несправність. 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 >> Копія пам'яті. 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 >> СТУДЕНТ 56: Ви повинні поставити амперсанд перед буфера? 1214 00:58:15,140 --> 00:58:17,800 >> Джейсон Хіршхорна: Так амперсанд перед буфер дасть мені адресу 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 >> СТУДЕНТ 57: Може ви просто введіть запустити знову? 1219 00:58:29,210 --> 00:58:32,050 >> Джейсон Хіршхорна: Просто введіть працювати знову. 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 Так буфера є покажчиком NULL. 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 >> СТУДЕНТ 58: 0x0. 1233 00:59:12,550 --> 00:59:13,400 >> Джейсон Хіршхорна: Вірно. 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 Сегментація вина. 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 >> СТУДЕНТ 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 >> Джейсон Хіршхорна: Так 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 >> СТУДЕНТ 60: Просто встановити його в якості будь-який випадковий характер. 1275 01:00:43,615 --> 01:00:49,150 1276 01:00:49,150 --> 01:00:51,640 Просто робити Char буфера дорівнює характер. 1277 01:00:51,640 --> 01:00:53,795 А потім, коли ви буфер там - 1278 01:00:53,795 --> 01:00:54,110 >> Джейсон Хіршхорна: Почекайте. 1279 01:00:54,110 --> 01:00:55,110 Чар буфер? 1280 01:00:55,110 --> 01:00:55,880 Так ні зірки? 1281 01:00:55,880 --> 01:00:56,390 >> СТУДЕНТ 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 >> Джейсон Хіршхорна: ОК. 1285 01:01:01,460 --> 01:01:02,420 Так дайте мені один. 1286 01:01:02,420 --> 01:01:03,170 >> СТУДЕНТ 60: Як або щось. 1287 01:01:03,170 --> 01:01:06,160 А потім, коли у вас є буфер там, ви використовуєте - 1288 01:01:06,160 --> 01:01:06,420 >> СТУДЕНТ 61: Звезда? 1289 01:01:06,420 --> 01:01:07,650 О ні, амперсанд. 1290 01:01:07,650 --> 01:01:09,000 >> СТУДЕНТ 60: Використовуйте амперсанд. 1291 01:01:09,000 --> 01:01:09,470 >> Джейсон Хіршхорна: ОК. 1292 01:01:09,470 --> 01:01:11,320 А як щодо в FWRITE? 1293 01:01:11,320 --> 01:01:14,150 >> СТУДЕНТ 60: Використовуйте амперсанд знову. 1294 01:01:14,150 --> 01:01:14,320 >> Джейсон Хіршхорна: Добре. 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 >> СТУДЕНТ 60: Так. 1298 01:01:23,760 --> 01:01:25,916 >> Джейсон Хіршхорна: Що люди думають? 1299 01:01:25,916 --> 01:01:27,770 >> СТУДЕНТ 62: Це заплутаним. 1300 01:01:27,770 --> 01:01:28,460 >> Джейсон Хіршхорна: ОК. 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 >> СТУДЕНТ 63: Незалежно адреса буфера. 1316 01:02:14,650 --> 01:02:15,970 >> Джейсон Хіршхорна: Незалежно адреса буфера. 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 ОК. 1337 01:03:07,670 --> 01:03:09,390 Майкл, де ти стоїш? 1338 01:03:09,390 --> 01:03:10,680 >> Майкл: Я не можу вирішити. 1339 01:03:10,680 --> 01:03:12,070 Вид в середині. 1340 01:03:12,070 --> 01:03:12,736 >> Джейсон Хіршхорна: Ти в середині. 1341 01:03:12,736 --> 01:03:13,092 Виберіть один. 1342 01:03:13,092 --> 01:03:14,400 >> Майкл: Я буду мати віру і кажуть, що це буде працювати. 1343 01:03:14,400 --> 01:03:14,660 >> Джейсон Хіршхорна: ОК. 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 >> [Вставляючи ГОЛОСИ] 1348 01:03:28,270 --> 01:03:35,170 1349 01:03:35,170 --> 01:03:35,950 >> Джейсон Хіршхорна: Ні сегмент вина. 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 >> СТУДЕНТ 64: Різниця. 1353 01:03:43,300 --> 01:03:45,490 >> Джейсон Хіршхорна: Різниця. 1354 01:03:45,490 --> 01:03:51,630 Diff перевіряє відмінностей між два файли, і якщо вона повертає 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 і взяти щось з FWRITE. 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 Ці 1 тут, зі мною, з нетерпінням як магічних чисел. 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 >> СТУДЕНТ 65: Розмір байта. 1381 01:05:06,545 --> 01:05:10,100 1382 01:05:10,100 --> 01:05:11,080 >> Джейсон Хіршхорна: Як що? 1383 01:05:11,080 --> 01:05:13,130 >> СТУДЕНТ 65: Розмір символ. 1384 01:05:13,130 --> 01:05:13,820 >> Джейсон Хіршхорна: Розмір символ. 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 >> СТУДЕНТ 67: Передбачуваний, щоб допомогти стандартизувати через системи речей, які 1402 01:06:05,650 --> 01:06:08,760 є - як цілі числа без знака що є 8 байт? 1403 01:06:08,760 --> 01:06:11,785 >> Джейсон Хіршхорна: Це Абсолютно вірно. 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 І якщо ми подивимося тут, ми робимо СР 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 >> СТУДЕНТ 68: Це може бути включений. 1426 01:07:16,170 --> 01:07:17,880 >> Джейсон Хіршхорна: Що? 1427 01:07:17,880 --> 01:07:19,130 >> СТУДЕНТ 69: Чи є це? 1428 01:07:19,130 --> 01:07:21,940 1429 01:07:21,940 --> 01:07:25,080 >> СТУДЕНТ 70: Ви не зробили визначити його як типу. 1430 01:07:25,080 --> 01:07:28,684 >> СТУДЕНТ 71: Але він повинен бути визначені в стандарті. 1431 01:07:28,684 --> 01:07:29,934 >> СТУДЕНТ 72: Що відбувається? 1432 01:07:29,934 --> 01:07:37,660 1433 01:07:37,660 --> 01:07:40,210 >> СТУДЕНТ 73: Якщо визначити бути все заголовні? 1434 01:07:40,210 --> 01:07:41,370 >> Джейсон Хіршхорна: Так що це не # визначити. 1435 01:07:41,370 --> 01:07:45,490 Насправді, в цьому випадку, я збираєтеся використовувати ЬурейеЕ. 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 Я хочу, щоб йти через copy.c разом, і тоді ми будемо коротко говорити 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 Але це copy.c, формує основу протягом перших двох частинах 1463 01:09:16,990 --> 01:09:22,340 проблема встановлений для whodunit.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 Але оскільки copy.c є основою для перші дві частини, ми збираємося 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 коли наша ср 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 Сітка з рядків і стовпців. 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 >> СТУДЕНТ 74: Так. 1546 01:13:15,970 --> 01:13:17,090 >> Джейсон Хіршхорна: Так ми робимо. 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 >> СТУДЕНТ 75: Порядок цих двох лінії не має значення, чи не так? 1558 01:13:44,550 --> 01:13:46,160 Тому що ви обробки різні файли. 1559 01:13:46,160 --> 01:13:46,620 >> Джейсон Хіршхорна: Абсолютно вірно. 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 Алея. 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 >> Джейсон Хіршхорна: ОК. 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 >> СТУДЕНТ 76: Ну, є різних способів зробити це. 1589 01:14:59,780 --> 01:14:59,870 >> Джейсон Хіршхорна: ОК. 1590 01:14:59,870 --> 01:15:03,070 Дайте мені одну сторону. 1591 01:15:03,070 --> 01:15:08,240 >> СТУДЕНТ 76: Вийміть всі червоні, і потім підкреслити синій і зелений. 1592 01:15:08,240 --> 01:15:10,010 >> Джейсон Хіршхорна: ОК. 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 >> Джейсон Хіршхорна: 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 >> СТУДЕНТ 77: Це структура. 1616 01:16:12,700 --> 01:16:17,440 1617 01:16:17,440 --> 01:16:18,900 >> Джейсон Хіршхорна: 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 >> [КЛАС бурмоче] 1622 01:16:37,280 --> 01:16:38,530 >> СТУДЕНТ 78: RGBTRIPLE.rgbtred? 1623 01:16:38,530 --> 01:16:47,250 1624 01:16:47,250 --> 01:16:48,856 >> Джейсон Хіршхорна: Це правильно? 1625 01:16:48,856 --> 01:16:53,040 >> СТУДЕНТ 79: Вона повинна бути потрійна точка, а RGBTRIPLE точкою? 1626 01:16:53,040 --> 01:16:54,120 >> Джейсон Хіршхорна: Тримісний. 1627 01:16:54,120 --> 01:16:56,700 Тримісний є локальної змінної, тому тут, немає ніяких покажчиків тут. 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 >> СТУДЕНТ 80: Вертикально - 1646 01:17:47,970 --> 01:17:52,360 так що вам доведеться по горизонталі змінити його розмір, але вертикально змінити її розмір, а? 1647 01:17:52,360 --> 01:17:58,475 >> Джейсон Хіршхорна: Так що, якщо нам дають піксель, і ми хочемо змінити його, 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 >> СТУДЕНТ 81: Те, як я думав про це був вам потрібно роздрукувати його - 1656 01:18:15,270 --> 01:18:15,490 >> Джейсон Хіршхорна: Почекайте. 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 >> СТУДЕНТ 81: ОК. 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 >> Джейсон Хіршхорна: Ви тільки що підняв руку. 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 >> СТУДЕНТ 82: Створення масиву? 1679 01:19:17,210 --> 01:19:20,090 >> Джейсон Хіршхорна: Так що давайте думати кожного файлу як підряд. 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