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 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