1 00:00:00,000 --> 00:00:07,810 2 00:00:07,810 --> 00:00:09,840 >> JASON Hirschhorn: Witamy, wszyscy, do tygodnia. 6. 3 00:00:09,840 --> 00:00:14,790 Jestem szczęśliwy widząc was żyje i dobrze po Quiz 0, bo wiem, że 4 00:00:14,790 --> 00:00:15,810 był nieco szorstki. 5 00:00:15,810 --> 00:00:18,370 Ale na szczęście, wszyscy zrobił bardzo dobrze. 6 00:00:18,370 --> 00:00:21,680 I tak, że jest wspaniały. 7 00:00:21,680 --> 00:00:25,840 Jeśli jesteś w moim dziale, dałem najbardziej z Tobą swoje quizy już. 8 00:00:25,840 --> 00:00:28,050 >> Kilka z was, mam spotkanie po zajęciach. 9 00:00:28,050 --> 00:00:32,360 A jeśli jesteś studentem i rozszerzenie nie otrzymali quiz powrotem 10 00:00:32,360 --> 00:00:35,490 Jeszcze, twój TF jest prawdopodobnie pracuje nad nim i klasyfikowania go i będzie go z powrotem 11 00:00:35,490 --> 00:00:36,490 z Państwem wkrótce. 12 00:00:36,490 --> 00:00:39,650 Tak więc moi studenci, którzy są przedłużające ogląda teraz - mam nadzieję, że żyje - 13 00:00:39,650 --> 00:00:42,880 Dostanę swoje quizy wkrótce także. 14 00:00:42,880 --> 00:00:45,670 >> Nasz program na dziś jest następujący. 15 00:00:45,670 --> 00:00:50,170 Po pierwsze, mamy zamiar przejść przez niektóre zasoby, które CS50 zapewnia do Ciebie. 16 00:00:50,170 --> 00:00:54,590 Zamierzamy przejść Quiz 0 następny, i Odpowiem na wszelkie pytania kogokolwiek 17 00:00:54,590 --> 00:00:57,360 ma o konkretnych problemach. 18 00:00:57,360 --> 00:01:02,050 A następnie, że będzie się działo w ciągu Plik I / O i problemem zestaw 5. 19 00:01:02,050 --> 00:01:07,360 Te dwa ostatnie tematy odbędzie stanowią większość sekcji dzisiaj. 20 00:01:07,360 --> 00:01:11,680 >> Umieścić tę listę w górę, jak w każdym tygodniu przypomnieniem dla was wszystkich, ale z rdzeniem 21 00:01:11,680 --> 00:01:14,650 rozdział, mamy tylko 90 minut - mamy nie są w stanie pokryć wszystko, co 22 00:01:14,650 --> 00:01:16,280 chciałbym na pokrycie dla was. 23 00:01:16,280 --> 00:01:21,170 Ale mamy mnóstwo środków na Ci czerpać jak poznać 24 00:01:21,170 --> 00:01:24,000 Materiał i pracy poprzez Twój problem ustawia. 25 00:01:24,000 --> 00:01:30,810 >> Przypominamy, że mam w Internecie tekstu okno, ustawić się na ciebie, aby wypełnić, jeśli 26 00:01:30,810 --> 00:01:33,250 masz jakieś uwagi do mnie, zarówno pozytywne jak i 27 00:01:33,250 --> 00:01:35,180 konstruktywne, o sekcji. 28 00:01:35,180 --> 00:01:38,600 Że adres URL znajduje się aż tutaj. 29 00:01:38,600 --> 00:01:43,250 Więc proszę, poświęć chwilę, jeśli masz jakiekolwiek opinie, czy w czasie sekcji, 30 00:01:43,250 --> 00:01:48,030 lub po, lub po oglądać wideo w trybie online, aby dać mi swoją opinię. 31 00:01:48,030 --> 00:01:52,100 Naprawdę doceniam każdego i wszystko. 32 00:01:52,100 --> 00:01:55,730 >> Więc już o małych rozmowy z wielu moich 33 00:01:55,730 --> 00:01:59,350 studentów przez cały tydzień - jak przekazać Powrót quizy, mówisz 34 00:01:59,350 --> 00:02:01,480 Oczywiście, widząc, jak robisz. 35 00:02:01,480 --> 00:02:05,120 I jeden temat ma pochodzić nad i na mówienie o - w 36 00:02:05,120 --> 00:02:05,660 szczególności - 37 00:02:05,660 --> 00:02:07,710 Problem ustawia. 38 00:02:07,710 --> 00:02:13,090 I mam zamknięte, że motyw na pokładzie teraz. 39 00:02:13,090 --> 00:02:16,630 >> Zasadniczo, jest to różnica między obracając w coś, co jest 40 00:02:16,630 --> 00:02:19,590 wykonane prawidłowo i coś że jest dobrze. 41 00:02:19,590 --> 00:02:22,920 Większość ludzi robi fantastyczne pod względem poprawności - 42 00:02:22,920 --> 00:02:25,460 4 lub 5 jest na wszelkie psets. 43 00:02:25,460 --> 00:02:27,930 Większość ludzi są coraz wszystkich osób czasu. 44 00:02:27,930 --> 00:02:31,150 >> Jednak tylko dlatego, że zrobiłeś coś w prawo nie oznacza, że ​​mam 45 00:02:31,150 --> 00:02:34,450 zrobić coś tak elegancko, lub efektywnie, lub w sposób jak ty 46 00:02:34,450 --> 00:02:35,270 mógł to zrobić. 47 00:02:35,270 --> 00:02:36,790 I to jest to, co projekt - 48 00:02:36,790 --> 00:02:39,230 oraz, w mniejszym stopniu, styl - 49 00:02:39,230 --> 00:02:40,450 osie są za. 50 00:02:40,450 --> 00:02:45,130 Więc ja pcha was wszystkich, i inne TF pchają chłopaki, nie tylko kolei 51 00:02:45,130 --> 00:02:48,320 w rzeczy, które są prawdziwe, ale z kolei w rzeczy, które są zakodowane dobrze. 52 00:02:48,320 --> 00:02:53,060 >> Nie robi niepotrzebnych pętli FOR, razie nie przeliczania zmiennych 53 00:02:53,060 --> 00:02:53,800 nie musisz. 54 00:02:53,800 --> 00:02:58,520 Na przykład, patrząc z powrotem do problemu ustawić 4, gdy umieszczenie cegieł na 55 00:02:58,520 --> 00:03:03,070 ekran, każdy rząd - każda cegła w dany wiersz ma sama współrzędna y - 56 00:03:03,070 --> 00:03:04,390 współrzędnych tej samej wysokości. 57 00:03:04,390 --> 00:03:07,930 >> Tak, że współrzędna y nie muszą oblicza się w środku wnętrza 58 00:03:07,930 --> 00:03:11,070 zagnieżdżonych pętli FOR, które prawdopodobnie używane umieścić te klocki na ekranie. 59 00:03:11,070 --> 00:03:14,030 Musi tylko być obliczana każdego czas przełączenia wiersz, lub 60 00:03:14,030 --> 00:03:15,200 przesunęła się w dół wiersz. 61 00:03:15,200 --> 00:03:19,760 Tak więc stwierdzić, czy znajduje się w 10 cegły wiersz, każda cegła może mieć taki sam 62 00:03:19,760 --> 00:03:22,260 współrzędna y, a współrzędna y może po prostu być obliczona 63 00:03:22,260 --> 00:03:23,550 raz dla wszystkich tych. 64 00:03:23,550 --> 00:03:27,810 >> Nie muszą być obliczane 10 razy, ani też, że obliczenia potrzeba 65 00:03:27,810 --> 00:03:30,220 wydarzy się w rzeczywisty Wywołanie funkcji - 66 00:03:30,220 --> 00:03:33,020 Nowy gracked wywołanie funkcji. 67 00:03:33,020 --> 00:03:37,820 Więc jeśli to było trochę mylące dla Ci, bardziej ogólnie, rzeczy, które 68 00:03:37,820 --> 00:03:40,730 nie trzeba za każdym razem się stało przejść przez pętlę, że nie powinno być 69 00:03:40,730 --> 00:03:42,900 umieścić wewnątrz pętli FOR, i nie powinny stanie za każdym razem iść 70 00:03:42,900 --> 00:03:44,080 przez pętlę FOR. 71 00:03:44,080 --> 00:03:49,270 >> Innym dobrym przykładem projektu widzieliśmy w tygodniu 3 do 15, można zachować 72 00:03:49,270 --> 00:03:50,500 utwór na zero. 73 00:03:50,500 --> 00:03:53,600 Więc kiedy zainicjować płytę, ty zapisać - w zmiennej globalnej, być może - 74 00:03:53,600 --> 00:03:56,140 X i Y-współrzędna zera. 75 00:03:56,140 --> 00:03:57,520 A potem, kiedy tylko - 76 00:03:57,520 --> 00:04:00,310 w funkcji ruchu, w dowolnym momencie dokonać udane posunięcie, zaktualizować 77 00:04:00,310 --> 00:04:02,040 Położenie zerowej. 78 00:04:02,040 --> 00:04:06,240 >> To by zaoszczędzić od konieczności wykonywania zagnieżdżonych pętli FOR, aby przejrzeć 79 00:04:06,240 --> 00:04:10,700 wsiąść za każdym razem w funkcji ruchu i znaleźć zera, lub znaleźć płytki, 80 00:04:10,700 --> 00:04:12,460 a następnie sprawdzić, co jest obok niego. 81 00:04:12,460 --> 00:04:16,329 Zamiast tego masz lokalizację zero, można po prostu spojrzeć poniżej, powyżej, 82 00:04:16,329 --> 00:04:21,160 i na lewo i na prawo od niego, aby znaleźć dachówka, czego szukasz. 83 00:04:21,160 --> 00:04:24,970 >> Zatem w odniesieniu do programów, że przebywa pisząc, że nigdy nie jesteś wystarczająco duży 84 00:04:24,970 --> 00:04:28,580 że niektóre z tych decyzji projektowych są naprawdę będzie utrudniać 85 00:04:28,580 --> 00:04:31,670 Program, lub zrobić to działać wolniej, lub może nawet zabraknąć pamięci. 86 00:04:31,670 --> 00:04:35,030 Ale my wciąż pcha was pisać jako elegancki i 87 00:04:35,030 --> 00:04:36,450 wydajny kod, jak to możliwe. 88 00:04:36,450 --> 00:04:39,910 >> Tak więc, jeśli nie kończy się pisanie rzeczy które mają znacznie większe 89 00:04:39,910 --> 00:04:44,660 zakres, będą one napisane dobry Projektujemy oprócz ich prawidłowe. 90 00:04:44,660 --> 00:04:46,300 Więc liczba masz przyniósł to. 91 00:04:46,300 --> 00:04:48,560 To jest coś, czego szukasz - coś będziemy nadal 92 00:04:48,560 --> 00:04:49,840 wcisnąć wam na. 93 00:04:49,840 --> 00:04:52,460 >> Jeśli kiedykolwiek jakieś pytania dotyczące Konstrukcja programu, tutaj 94 00:04:52,460 --> 00:04:56,870 aby dotrzeć do mnie, a ja jestem szczęśliwy, spacer po programie z tobą, 95 00:04:56,870 --> 00:05:01,320 i wskazać niektóre z projektu decyzje dokonane, i podać kilka 96 00:05:01,320 --> 00:05:06,240 sugestie na temat, aby jeszcze lepsze decyzje projektowe. 97 00:05:06,240 --> 00:05:08,870 >> Więc mamy zamiar przejść aby mówić o Quiz 0. 98 00:05:08,870 --> 00:05:11,300 Zanim to zrobimy, czy ktoś Wszelkie pytania dotyczące tego, co 99 00:05:11,300 --> 00:05:14,252 Mam objęte do tej pory? 100 00:05:14,252 --> 00:05:21,500 >> [Szelest] 101 00:05:21,500 --> 00:05:22,750 >> JASON Hirschhorn: Siedem sekund. 102 00:05:22,750 --> 00:05:23,250 OK. 103 00:05:23,250 --> 00:05:24,970 Porozmawiajmy o Quiz 0 na trochę. 104 00:05:24,970 --> 00:05:26,700 Większość z was ma swój Quiz 0 wrócił. 105 00:05:26,700 --> 00:05:29,820 Jeśli nie, mam nadzieję, Pamiętasz to trochę. 106 00:05:29,820 --> 00:05:34,770 Ale jeśli już podjęte Quiz 0, to również dostęp do pliku PDF online 107 00:05:34,770 --> 00:05:35,890 roztwory próbek. 108 00:05:35,890 --> 00:05:39,480 >> Czy ktoś ma jakieś pytania przed skaczemy do tygodniowego materiału o 109 00:05:39,480 --> 00:05:41,520 Szczególnym problemem na Quiz 0 - 110 00:05:41,520 --> 00:05:44,630 Dlatego odpowiedź brzmi, co to jest? 111 00:05:44,630 --> 00:05:47,255 Czy ktoś zna coś? 112 00:05:47,255 --> 00:05:50,230 Nawet jeśli masz problem, prawda, ale po prostu chciałby, żebym mu wyjaśnić co nieco 113 00:05:50,230 --> 00:05:52,640 więcej, cieszę się, zrób to teraz. 114 00:05:52,640 --> 00:05:57,800 >> Więc mam pytanie, żebyście przygotowana z niektórymi 115 00:05:57,800 --> 00:05:59,440 myśli o Quiz 0. 116 00:05:59,440 --> 00:06:02,660 Więc, którzy chcieliby dostać się nam Zaczęło się od pytania lub 117 00:06:02,660 --> 00:06:04,655 komentarz na temat Quiz 0? 118 00:06:04,655 --> 00:06:07,435 119 00:06:07,435 --> 00:06:10,410 >> [PAPIER szelest] 120 00:06:10,410 --> 00:06:11,470 >> JASON Hirschhorn: Nie wszyscy nie doskonale. 121 00:06:11,470 --> 00:06:12,720 Więc wiem [śmiech] 122 00:06:12,720 --> 00:06:15,950 muszą istnieć pewne pytania o Quiz 0. 123 00:06:15,950 --> 00:06:27,940 124 00:06:27,940 --> 00:06:28,590 OK. 125 00:06:28,590 --> 00:06:29,210 Tak. 126 00:06:29,210 --> 00:06:29,600 Ompica. 127 00:06:29,600 --> 00:06:30,520 >> OMPICA: Numer 10. 128 00:06:30,520 --> 00:06:33,560 >> JASON Hirschhorn: Numer 10. 129 00:06:33,560 --> 00:06:35,400 Który z nich miał numer 10? 130 00:06:35,400 --> 00:06:35,840 >> OMPICA: - 131 00:06:35,840 --> 00:06:36,420 >> JASON Hirschhorn: I haven't - 132 00:06:36,420 --> 00:06:37,670 >> OMPICA: m.in. - 133 00:06:37,670 --> 00:06:40,060 134 00:06:40,060 --> 00:06:42,180 >> JASON Hirschhorn: Numer 10 było osiem I - pisanie ośmiu do I? 135 00:06:42,180 --> 00:06:42,980 >> OMPICA: Tak. 136 00:06:42,980 --> 00:06:43,630 >> JASON Hirschhorn: OK. 137 00:06:43,630 --> 00:06:47,390 Więc kolejne pytanie, można mieć zapytał był ja przewidujący? 138 00:06:47,390 --> 00:06:48,630 Odpowiedź brzmi: tak. 139 00:06:48,630 --> 00:06:52,060 W sekcji przed quizu, poprosiłem wy do kodu zarówno szterling i 140 00:06:52,060 --> 00:06:52,980 osiem do ja. 141 00:06:52,980 --> 00:06:54,770 Oba z nich stało się pojawiają się na quiz. 142 00:06:54,770 --> 00:06:57,510 Więc mam nadzieję, że się zapłaciło uwagę na to. 143 00:06:57,510 --> 00:07:02,520 >> A jeśli miał, to trzeba chyba się dobrze na tych dwóch. 144 00:07:02,520 --> 00:07:06,030 Ale osiem do i, my nie faktycznie kod to w klasie, ale to było, znowu, 145 00:07:06,030 --> 00:07:07,500 zapytał na quiz. 146 00:07:07,500 --> 00:07:13,270 Tak, kilka rzeczy do podjęcia uwagę podczas kodowania ośmiu do I. 147 00:07:13,270 --> 00:07:17,320 Pierwszą rzeczą, na pytanie, był że trzeba sprawdzić, czy ciąg 148 00:07:17,320 --> 00:07:20,300 była równa null. 149 00:07:20,300 --> 00:07:28,060 >> Kilka osób próbowało sprawdzić później w programie, jeśli ów wspornik byłem - 150 00:07:28,060 --> 00:07:30,940 tak szczególnym charakterze, które string - była równa null. 151 00:07:30,940 --> 00:07:35,600 Należy jednak pamiętać, że wartość null jest zasadniczo - warto pomyśleć o 152 00:07:35,600 --> 00:07:39,100 null jako wskaźnik zera - wskaźnik do zera - 153 00:07:39,100 --> 00:07:40,920 gdzieś w pamięci, gdzie nigdy nie można przejść. 154 00:07:40,920 --> 00:07:44,730 >> Więc jeśli coś jest równe NULL, to wiem, że nie został zainicjowany, 155 00:07:44,730 --> 00:07:46,430 albo nic tam nie ma. 156 00:07:46,430 --> 00:07:50,950 Tak e jest gwiazdą char, y wspornik i jest char. 157 00:07:50,950 --> 00:07:57,410 Więc warto porównać s. null, ale nie s uchwyt i null. 158 00:07:57,410 --> 00:07:59,390 Ale znowu - tak, aby był pierwszą rzeczą, że miałeś zrobić - 159 00:07:59,390 --> 00:08:03,510 upewnij się, że rzeczywiście ma prawdziwy ciąg. 160 00:08:03,510 --> 00:08:08,020 >> Następnie chciał przejść przez każdy znak w ciągu. 161 00:08:08,020 --> 00:08:12,500 I tak, że będzie jak wspornika ów Ja, na przykład, jeśli jest to Twój iterator. 162 00:08:12,500 --> 00:08:17,250 I przyjąć, że charakter i uzyskać jego rzeczywistą wartość. 163 00:08:17,250 --> 00:08:21,800 Masz to zapisane jako char, ale Wartość ASCII zera - 164 00:08:21,800 --> 00:08:23,010 zera jako postać - 165 00:08:23,010 --> 00:08:25,450 w rzeczywistości nie jest liczbą całkowitą od zera. 166 00:08:25,450 --> 00:08:28,700 To jest jakiś inny numer, który można wyszukać w tabeli ASCII. 167 00:08:28,700 --> 00:08:30,790 >> Więc jeden sposób na to, aby poprawić - prawdopodobnie najlepszym sposobem, aby skorygować 168 00:08:30,790 --> 00:08:33,760 że - jest od niej odjąć Wartość znaku - 169 00:08:33,760 --> 00:08:35,140 zera jako postać. 170 00:08:35,140 --> 00:08:38,490 Więc minus apostrof, zero, kolejny apostrof. 171 00:08:38,490 --> 00:08:44,620 Że podejmie wszelkie numer masz jako char, i zrobić to równe 172 00:08:44,620 --> 00:08:46,720 liczbę całkowitą od rzeczywistej. 173 00:08:46,720 --> 00:08:50,300 >> I że jest bardzo podobna do metody Wiele osób wzięło w 174 00:08:50,300 --> 00:08:52,800 Problem zestaw 2, z Cezarem i Viginere - 175 00:08:52,800 --> 00:08:55,160 te szyfry, kiedy obracają je. 176 00:08:55,160 --> 00:08:59,210 Więc po masz go jako liczbę z zera do dziewięciu, a następnie - w zależności od 177 00:08:59,210 --> 00:09:02,750 gdzie to jest w końcowym numerem - trzeba go pomnożyć 178 00:09:02,750 --> 00:09:04,120 o mocy 10. 179 00:09:04,120 --> 00:09:07,340 >> Niektórzy ludzie przeniesiony z powrotem do z przodu, i pomnożona jednostki 180 00:09:07,340 --> 00:09:08,940 numer o mocy 10. 181 00:09:08,940 --> 00:09:11,160 Niektórzy ludzie przeniesiony z od przodu do tyłu - 182 00:09:11,160 --> 00:09:14,430 i tak trwało najwyższa zamówić numery pierwsze - 183 00:09:14,430 --> 00:09:18,190 i by uratować tych, w zmienna globalna licznik. 184 00:09:18,190 --> 00:09:20,880 , A następnie za każdym razem przez FOR pętla, pomnożyć, że globalny gigant 185 00:09:20,880 --> 00:09:25,640 licznik zmiennej o 10, aby miejsca dla następnego char. 186 00:09:25,640 --> 00:09:28,750 >> Więc to było trochę mylące bez mi pisania na tablicy. 187 00:09:28,750 --> 00:09:31,550 Jednakże roztwór próbki jest dostępny dla Ciebie. 188 00:09:31,550 --> 00:09:32,870 Ale to były wielkie rzeczy szukaliśmy. 189 00:09:32,870 --> 00:09:36,400 Również sprawdzenie, aby upewnić się, że każdy indywidualny charakter rzeczywiście 190 00:09:36,400 --> 00:09:39,780 postać od zera do dziewięciu, a nie inny charakter, jak A, 191 00:09:39,780 --> 00:09:41,160 na przykład. 192 00:09:41,160 --> 00:09:43,150 >> To były rzeczy, szukaliśmy w tej kwestii. 193 00:09:43,150 --> 00:09:46,510 194 00:09:46,510 --> 00:09:47,980 Czy to wyjaśniło Twoje pytanie? 195 00:09:47,980 --> 00:09:49,320 >> OMPICA: Tak. 196 00:09:49,320 --> 00:09:50,240 >> JASON Hirschhorn: OK. 197 00:09:50,240 --> 00:09:53,940 Czy są jakieś inne pytania o Quiz 0? 198 00:09:53,940 --> 00:09:55,440 Co z kompilacji? 199 00:09:55,440 --> 00:09:56,740 Wszyscy kompilacji prawda? 200 00:09:56,740 --> 00:09:58,370 Nie. 201 00:09:58,370 --> 00:09:58,840 Było - 202 00:09:58,840 --> 00:10:01,010 [Śmieje się] 203 00:10:01,010 --> 00:10:03,265 Wszelkie pytania na temat Proces kompilacji? 204 00:10:03,265 --> 00:10:06,050 205 00:10:06,050 --> 00:10:06,966 Wow. 206 00:10:06,966 --> 00:10:11,090 >> [PAPIER szelest] 207 00:10:11,090 --> 00:10:11,520 >> JASON Hirschhorn: Tak. 208 00:10:11,520 --> 00:10:11,700 Michael. 209 00:10:11,700 --> 00:10:14,140 >> Michael: Czy numer 7 - losowo? 210 00:10:14,140 --> 00:10:16,500 >> JASON Hirschhorn: Numer 7. 211 00:10:16,500 --> 00:10:20,670 Numer 7 było uzyskać losową liczbę całkowitą. 212 00:10:20,670 --> 00:10:21,110 Doskonała. 213 00:10:21,110 --> 00:10:25,630 Więc biorąc pod uwagę liczbę całkowitą a i całkowitą b, i chcesz losowo 214 00:10:25,630 --> 00:10:28,710 całkowitą między a i b. 215 00:10:28,710 --> 00:10:31,740 Rzeczywiście możemy napisać ten jeden na zarządu, bo to jeden 216 00:10:31,740 --> 00:10:33,320 był jeden wiersz kodu - 217 00:10:33,320 --> 00:10:34,390 jeden sposób, aby to zrobić. 218 00:10:34,390 --> 00:10:37,810 >> Więc dostaniesz drand jako Funkcja mogliśmy korzystać. 219 00:10:37,810 --> 00:10:38,820 I co drand - 220 00:10:38,820 --> 00:10:40,290 przy założeniu, że został zaszczepiono - 221 00:10:40,290 --> 00:10:42,316 co to drand wrócić? 222 00:10:42,316 --> 00:10:44,840 >> MICHAEL: pływak pomiędzy 0,0 i 1,0. 223 00:10:44,840 --> 00:10:45,530 >> JASON Hirschhorn: liczba - tak. 224 00:10:45,530 --> 00:10:47,910 Liczbę pomiędzy 0 a 1. 225 00:10:47,910 --> 00:10:51,760 I tak mamy B i. 226 00:10:51,760 --> 00:10:55,480 A potem mamy liczbę losową między 0 i 1 dana nam przez drand. 227 00:10:55,480 --> 00:11:01,480 228 00:11:01,480 --> 00:11:06,630 Niektórzy próbowali umieścić B lub b minus , lub coś w tym 229 00:11:06,630 --> 00:11:07,960 nawiasach. 230 00:11:07,960 --> 00:11:11,210 Oznaczałoby to, że są one argumenty tej funkcji. 231 00:11:11,210 --> 00:11:13,450 >> drand nie ma żadnych argumentów - jak robi getString 232 00:11:13,450 --> 00:11:14,330 nie podejmuje żadnych argumentów. 233 00:11:14,330 --> 00:11:16,600 Więc jest to po prostu otworzyć nawias, blisko PAREN - i że sam jest 234 00:11:16,600 --> 00:11:17,330 Wywołanie funkcji. 235 00:11:17,330 --> 00:11:19,770 I to daje ci numer pomiędzy 0 i 1. 236 00:11:19,770 --> 00:11:22,820 Oczywiście, mamy całą gamę że liczby mogą być w. 237 00:11:22,820 --> 00:11:28,470 >> Powiedzieć, jeśli b jest 10 i jest 5, naprawdę chcą numer z zakresu 5. 238 00:11:28,470 --> 00:11:36,940 Więc następną rzeczą, którą musisz zrobić, to pomnóż to przez zasięg b minus. 239 00:11:36,940 --> 00:11:40,380 Tak więc przy założeniu, że jest pomnożona. 240 00:11:40,380 --> 00:11:42,590 I że da nam wiele w danym zakresie. 241 00:11:42,590 --> 00:11:46,610 I że jest określony zakres Różnica między B minus. 242 00:11:46,610 --> 00:11:50,030 >> I w końcu, że tylko dam go od - powiedzieć, zakres pomiędzy B minus 243 00:11:50,030 --> 00:11:52,520 jest 5, który da nam liczbę od 0 do 5. 244 00:11:52,520 --> 00:11:56,000 Ale jeśli jest w rzeczywistości 5, musimy zwiększyć Zakres do tego, gdzie jest to 245 00:11:56,000 --> 00:12:01,380 faktycznie ma być dodając. 246 00:12:01,380 --> 00:12:02,580 Tak, że dostaje prawo logiki. 247 00:12:02,580 --> 00:12:03,745 A potem, trzeba jeszcze jedno pytanie? 248 00:12:03,745 --> 00:12:04,547 >> Michael: Nie. 249 00:12:04,547 --> 00:12:06,010 Czuję się teraz bardzo głupi. 250 00:12:06,010 --> 00:12:06,405 [Śmieje się] 251 00:12:06,405 --> 00:12:06,730 >> JASON Hirschhorn: Nie. 252 00:12:06,730 --> 00:12:08,640 Czy nie czujesz się naprawdę głupi. 253 00:12:08,640 --> 00:12:10,560 Liczba osób zmagał z tym pytaniem. 254 00:12:10,560 --> 00:12:13,920 A potem, inne pytanie, drand, powiedziałeś, daje pływaka - 255 00:12:13,920 --> 00:12:14,940 zwraca float. 256 00:12:14,940 --> 00:12:18,020 Ale ta funkcja faktycznie poprosił na całkowitą zostać zwrócone. 257 00:12:18,020 --> 00:12:23,700 >> Nie musisz rzucać to wyraźnie do liczby całkowitej, ponieważ są 258 00:12:23,700 --> 00:12:29,090 Operacje będą traktować go jako wszystko unosić - jako liczbę zmiennoprzecinkową. 259 00:12:29,090 --> 00:12:31,570 Podoba Ci się to woli - nawet jeśli jest liczbą całkowitą, to będzie 260 00:12:31,570 --> 00:12:32,890 mnoży się poprawnie. 261 00:12:32,890 --> 00:12:34,000 Wszystko mnożenie będzie działać. 262 00:12:34,000 --> 00:12:35,060 Nie musisz się go rzucić tutaj. 263 00:12:35,060 --> 00:12:36,480 W rzeczywistości, nie należy oddać go. 264 00:12:36,480 --> 00:12:37,310 >> , Które - 265 00:12:37,310 --> 00:12:40,750 jeśli chcesz rzucić numer to jest między 0 a 1 - 266 00:12:40,750 --> 00:12:42,680 losowa liczba, zmiennoprzecinkowe - 267 00:12:42,680 --> 00:12:47,850 następnie będzie albo tylko 0 lub 1, tak stracisz wszystkie tego precyzją. 268 00:12:47,850 --> 00:12:50,120 Ale w końcu, po powrocie, automatycznie pobiera 269 00:12:50,120 --> 00:12:51,620 odesłane jako liczba całkowita. 270 00:12:51,620 --> 00:12:56,870 Więc nie trzeba robić że oddając siebie. 271 00:12:56,870 --> 00:13:00,810 >> Więc to była odpowiedź na to pytanie, numer 7. 272 00:13:00,810 --> 00:13:02,190 Wszelkie inne pytania dotyczące Quiz 0? 273 00:13:02,190 --> 00:13:03,300 Tak, Annie. 274 00:13:03,300 --> 00:13:05,050 >> Annie: Kiedy używamy Cykliczne - 275 00:13:05,050 --> 00:13:07,850 kiedy używamy iteracyjnych pętle? 276 00:13:07,850 --> 00:13:10,210 >> JASON Hirschhorn: Kiedy używasz rekurencyjne - tak bardziej ogólnie, 277 00:13:10,210 --> 00:13:14,110 plusy i minusy w porównaniu rekursji iteracyjne podejście. 278 00:13:14,110 --> 00:13:17,110 Czy ktoś może zaoferować pro lub con? 279 00:13:17,110 --> 00:13:19,460 Proszę? 280 00:13:19,460 --> 00:13:20,140 Nie wszyscy mogą. 281 00:13:20,140 --> 00:13:22,526 Kto może zaoferować pro lub con? 282 00:13:22,526 --> 00:13:26,963 >> [PAPIER szelest] 283 00:13:26,963 --> 00:13:29,730 >> UCZEŃ 1: Cykliczne jest mniej kodowanie - mniej pisania? 284 00:13:29,730 --> 00:13:33,170 >> JASON Hirschhorn: Tak ogólnie, rekurencja zwłaszcza, funkcja - 285 00:13:33,170 --> 00:13:35,750 lub algorytm jak seryjnej sortowania - która nadaje się 286 00:13:35,750 --> 00:13:37,300 do cyklicznej podejścia - 287 00:13:37,300 --> 00:13:40,710 może być bardziej proste kodować rekurencyjnie. 288 00:13:40,710 --> 00:13:43,940 I po prostu więcej sensu zrobić to rekurencyjnie. 289 00:13:43,940 --> 00:13:46,230 Tak, że będzie pro do rekursji. 290 00:13:46,230 --> 00:13:46,610 Inni? 291 00:13:46,610 --> 00:13:47,467 Tak? 292 00:13:47,467 --> 00:13:49,240 >> UCZEŃ 2: Con do rekursji - 293 00:13:49,240 --> 00:13:50,940 Używa więcej pamięci. 294 00:13:50,940 --> 00:13:52,200 >> JASON Hirschhorn: Tak dokładnie prawo. 295 00:13:52,200 --> 00:13:55,720 Rekurencyjna funkcja dodajemy ramki stosu do stosu. 296 00:13:55,720 --> 00:13:59,690 Więc jeśli działa na wielu numery i trzeba nazwać 297 00:13:59,690 --> 00:14:02,560 działało wiele, to z pewnością zajmują więcej pamięci, a 298 00:14:02,560 --> 00:14:05,810 iteracyjne podejście będzie tylko jedno stosu ramki na stosie, ponieważ 299 00:14:05,810 --> 00:14:08,420 to wszystko dzieje się w jednej funkcji. 300 00:14:08,420 --> 00:14:11,010 >> Wszelkie inne plusy i minusy? 301 00:14:11,010 --> 00:14:11,500 Tak. 302 00:14:11,500 --> 00:14:12,550 >> UCZEŃ 3: Plusy dla rekursji. 303 00:14:12,550 --> 00:14:15,950 Nie masz do ustalenia w naprzód, ile razy 304 00:14:15,950 --> 00:14:17,660 kod ma być powtórzony. 305 00:14:17,660 --> 00:14:22,810 Mogą mieć z góry określoną liczbę razy, że masz do iteracji, a następnie 306 00:14:22,810 --> 00:14:26,420 rekurencja jest lepiej, bo Wystarczy, że wynik. 307 00:14:26,420 --> 00:14:27,780 >> JASON Hirschhorn: Myślę, że to prawda. 308 00:14:27,780 --> 00:14:30,770 Ale myślę, że w obu przypadkach byś nigdy - 309 00:14:30,770 --> 00:14:33,290 będzie prawdopodobnie uzyskać pewne Wejście od użytkownika. 310 00:14:33,290 --> 00:14:35,990 Czy ta funkcja będzie mieć jakiś wkład które określają, ile razy 311 00:14:35,990 --> 00:14:36,730 powinno działać. 312 00:14:36,730 --> 00:14:39,520 Tak ogólnie, to nie byłoby ciężko kod - nawet w iteracyjnego podejścia - jak 313 00:14:39,520 --> 00:14:40,940 wiele razy, że pętla powinna być uruchomiony. 314 00:14:40,940 --> 00:14:46,100 315 00:14:46,100 --> 00:14:48,670 >> Czy masz inny byłeś myśląc o Annie? 316 00:14:48,670 --> 00:14:49,330 OK. 317 00:14:49,330 --> 00:14:51,650 To są chyba dwa - 318 00:14:51,650 --> 00:14:54,370 Największym pro i największym rekurencyjny kon porównaniu do 319 00:14:54,370 --> 00:14:57,080 iteracyjne podejście. 320 00:14:57,080 --> 00:14:57,690 OK. 321 00:14:57,690 --> 00:14:59,465 Coś jeszcze na Quiz 0? 322 00:14:59,465 --> 00:15:08,940 323 00:15:08,940 --> 00:15:09,920 >> Przejdźmy. 324 00:15:09,920 --> 00:15:15,260 Plik I / O. Jest wspaniałym skrócie w tym tygodniu w pliku I / O, które miejmy nadzieję, 325 00:15:15,260 --> 00:15:19,270 obejrzeniu wielokrotność razy, i podziwiał. 326 00:15:19,270 --> 00:15:22,910 Dużo pracy udał się, że i ja mam słyszałem, że jest szalenie pomocne. 327 00:15:22,910 --> 00:15:25,740 Ja również link na tym slajdzie, w przypadku, gdy nie mieli 328 00:15:25,740 --> 00:15:29,160 szansa, aby obejrzeć go 10 razy. 329 00:15:29,160 --> 00:15:35,280 >> Tak, mamy zamiar iść na krótko główne kroki do otwarcia i pracy 330 00:15:35,280 --> 00:15:38,400 z plikami, a następnie będziemy nurkować na problem kodowania przed 331 00:15:38,400 --> 00:15:40,400 zbadaniu zestaw problemów. 332 00:15:40,400 --> 00:15:44,330 Więc znowu, mam zamiar położyć się na to ekran, ale mam zamiar mówić o 333 00:15:44,330 --> 00:15:47,630 zaledwie kilka minut o tym, co mamy tu robisz z pliku I/O-- 334 00:15:47,630 --> 00:15:49,090 co to oznacza? 335 00:15:49,090 --> 00:15:55,280 >> Oznacza to, że możemy stworzyć nasze programy, a następnie mają nasze programy 336 00:15:55,280 --> 00:16:00,370 wyjścia, a nie dokonały żadnego wpływu na świat poza naszym programie. 337 00:16:00,370 --> 00:16:04,630 Ale kiedy zaczynamy pracować z plikami - zarówno czytania i tworzenia ich w 338 00:16:04,630 --> 00:16:10,460 nich - możemy mieć pewien wpływ na świat poza naszym programie. 339 00:16:10,460 --> 00:16:15,440 >> Podobnie jak w przypadku programu Microsoft Word nie był w stanie wprowadzać żadnych dokumentów programu Word, a następnie 340 00:16:15,440 --> 00:16:18,710 raz Microsoft Word zamknąć, wszystkie swoje Prace zostaną usunięte, i że będzie 341 00:16:18,710 --> 00:16:19,740 naprawdę bezużyteczne. 342 00:16:19,740 --> 00:16:23,620 Mamy w końcu chcą być w stanie pisać programy, które mogą mieć wpływ 343 00:16:23,620 --> 00:16:31,350 świat wokół nich, zarówno biorąc w złożone wejść - w zakresie plików i 344 00:16:31,350 --> 00:16:37,080 poprzez pliki, a także tworzenie się interesujące i wyjścia - ważne 345 00:16:37,080 --> 00:16:39,520 w odniesieniu do różnych typów plików. 346 00:16:39,520 --> 00:16:43,730 >> Więc dlatego zaczynamy nauczyć się, jak pracować z plikami. 347 00:16:43,730 --> 00:16:47,080 Dokładniej, co robimy to w następujący sposób. 348 00:16:47,080 --> 00:16:47,680 To bardzo proste. 349 00:16:47,680 --> 00:16:51,530 Istnieje tylko kilka kroków, i są one wymienione tutaj na ten kod. 350 00:16:51,530 --> 00:16:55,130 Więc mamy zamiar przejść przez ta linia kodu po linii. 351 00:16:55,130 --> 00:16:57,630 >> Po pierwsze, można zobaczyć podświetlone - 352 00:16:57,630 --> 00:17:01,330 podczas pracy z plikiem, niezależnie od typu pliku, który jest 353 00:17:01,330 --> 00:17:02,670 trzeba go otworzyć. 354 00:17:02,670 --> 00:17:05,130 I to jest z wezwaniem do fopen - 355 00:17:05,130 --> 00:17:05,950 tutaj. 356 00:17:05,950 --> 00:17:07,980 Zawierać nazwę pliku. 357 00:17:07,980 --> 00:17:11,930 Jeśli plik nie znajduje się w katalogu, lub folder, w którym program 358 00:17:11,930 --> 00:17:15,910 życie, to trzeba także m.in. jeżeli ścieżka do pliku jest. 359 00:17:15,910 --> 00:17:19,099 >> Mamy zamiar założyć, że ta Plik o nazwie "text.txt" - 360 00:17:19,099 --> 00:17:24,220 prosty dokument tekstowy - jest w sam folder jak ten program jest. 361 00:17:24,220 --> 00:17:26,859 Więc to jest kolejna rzecz, do utrzymania w umysł - że jeśli chcesz otworzyć plik 362 00:17:26,859 --> 00:17:30,050 gdzieś indziej, to rzeczywiście potrzebne obejmuje jej lokalizację. 363 00:17:30,050 --> 00:17:33,520 >> Po drugie, można przekazać argument do fopen, i to, co chcesz zrobić 364 00:17:33,520 --> 00:17:34,620 z pliku. 365 00:17:34,620 --> 00:17:38,450 Istnieją trzy główne argumenty, które masz zamiar przejść do fopen. 366 00:17:38,450 --> 00:17:40,060 Kto może mi dać te trzy? 367 00:17:40,060 --> 00:17:44,960 368 00:17:44,960 --> 00:17:47,130 Kto może mi jedną z nich? 369 00:17:47,130 --> 00:17:48,130 Tak. 370 00:17:48,130 --> 00:17:50,010 >> UCZEŃ 4: nazwa pliku? 371 00:17:50,010 --> 00:17:50,440 >> JASON Hirschhorn: Przepraszam. 372 00:17:50,440 --> 00:17:55,490 Trzy główne argumenty można przekazać jako drugi argument do fopen. 373 00:17:55,490 --> 00:17:57,060 Masz rację - nazwa pliku jest pierwszy argument. 374 00:17:57,060 --> 00:18:01,620 Ale drugi argument do fopen są zazwyczaj trzy struny, a - tak. 375 00:18:01,620 --> 00:18:02,210 Aleja. 376 00:18:02,210 --> 00:18:03,490 >> ALEJA: do dołączenia. 377 00:18:03,490 --> 00:18:06,840 >> JASON Hirschhorn:, jeśli chcesz dołączania do pliku, który już istnieje. 378 00:18:06,840 --> 00:18:07,810 >> UCZEŃ 5: R do odczytu. 379 00:18:07,810 --> 00:18:09,930 >> JASON Hirschhorn: R, jeśli chcą czytać z pliku. 380 00:18:09,930 --> 00:18:10,670 >> UCZEŃ 6: W dla zapisu. 381 00:18:10,670 --> 00:18:12,840 >> JASON Hirschhorn: I w, jeśli chcę zapisać do pliku. 382 00:18:12,840 --> 00:18:17,570 Tak więc w tym przypadku piszemy do pliku, więc mamy w. 383 00:18:17,570 --> 00:18:22,360 Go otworzyć, trzeba także zapisać plik gdzieś, a to z 384 00:18:22,360 --> 00:18:26,000 Kod dla lewego rogu operator przypisania - 385 00:18:26,000 --> 00:18:31,220 Tworzę wskaźnik do pliku nazywa, w tym przypadku, akt. 386 00:18:31,220 --> 00:18:36,070 >> Nie będziemy się martwić, co to wszystkie czapki PLIK rzeczą jest. 387 00:18:36,070 --> 00:18:40,600 Wystarczy powiedzieć, że jest to długi strumień zer i jedynek. 388 00:18:40,600 --> 00:18:44,970 I w ten sposób mamy zamiar pracować i zrozumieć go. 389 00:18:44,970 --> 00:18:47,300 >> Następną rzeczą, jaką musimy zrobić - i to jest bardzo ważne - 390 00:18:47,300 --> 00:18:49,070 przy każdym otwarciu pliku - 391 00:18:49,070 --> 00:18:54,250 W rzeczywistości, kiedy tylko zadzwonić malloc, dla przykładem, i trochę pamięci i spróbuj 392 00:18:54,250 --> 00:18:57,980 i zapisać go w wskaźnik, zawsze Aby sprawdzić, aby upewnić się, że 393 00:18:57,980 --> 00:19:00,230 funkcja nie zwróci null. 394 00:19:00,230 --> 00:19:05,230 >> Tak więc w tym przypadku sprawdzamy, aby upewnić się, że rzeczywiście mamy otwarte 395 00:19:05,230 --> 00:19:10,230 złożyć poprawnie i nie było brak błędów w naszym programie. 396 00:19:10,230 --> 00:19:15,160 Następnie, gdy już zostały sprawdzone, aby upewnić się, że mamy plik roboczy, możemy 397 00:19:15,160 --> 00:19:18,520 zapisu lub odczytu z, lub dołączyć do pliku. 398 00:19:18,520 --> 00:19:24,270 W tym przypadku, jestem po prostu drukowania jedna linia do tego pliku. 399 00:19:24,270 --> 00:19:25,450 >> Skąd mam wiedzieć, że? 400 00:19:25,450 --> 00:19:27,990 No cóż, używam tej funkcji nazywa fprintf. 401 00:19:27,990 --> 00:19:30,970 Wszystkie funkcje z których będziemy korzystać podczas pisania do lub czytania z, lub 402 00:19:30,970 --> 00:19:34,950 manipulacji plikami będzie podobny do Funkcje widzieliście wcześniej, ale 403 00:19:34,950 --> 00:19:38,420 zaczynają się na literę F, stojąc na pliku. 404 00:19:38,420 --> 00:19:43,440 I fprintf, w przeciwieństwie do naszego normalnego druku aplikacja, wykonuje jeden dodatkowy argument, 405 00:19:43,440 --> 00:19:47,800 i to jest plik, w którym wydrukować tę linię. 406 00:19:47,800 --> 00:19:50,640 >> Nie mam nic do Prawo OHAI. 407 00:19:50,640 --> 00:19:52,860 Nie mam na trzecią argument printf - 408 00:19:52,860 --> 00:19:57,030 lub drugi argument do printf, Trzeci argument fprintf, bo 409 00:19:57,030 --> 00:19:59,480 Nie ma tutaj żadnych zastępczych. 410 00:19:59,480 --> 00:20:01,070 Nie jestem w tym żadnych zmiennych. 411 00:20:01,070 --> 00:20:06,070 Ale znowu, fprintf, a wszystkie te sprawy Funkcje, które działają z plikami 412 00:20:06,070 --> 00:20:09,820 generalnie będzie potrzebował pliku , w którym są one działać. 413 00:20:09,820 --> 00:20:15,960 >> Wreszcie ostatnia ważna rzecz zrobić, to zamknąć plik, tak jak 414 00:20:15,960 --> 00:20:19,530 z - ilekroć malloc coś, chcemy uwolnić coś, żeby nie 415 00:20:19,530 --> 00:20:22,730 masz wyciek pamięci - chcemy zamknąć nasz plik. 416 00:20:22,730 --> 00:20:28,180 Jeśli program ten odszedł bez zamykania plik, kursy są nic nie pójdzie 417 00:20:28,180 --> 00:20:30,050 tak, szczególnie jeśli Był to mały plik. 418 00:20:30,050 --> 00:20:35,020 >> Ale jest to z pewnością dobry styl kodowania i ćwiczyć na zawsze zamknąć plik 419 00:20:35,020 --> 00:20:38,050 gdy skończysz go używać. 420 00:20:38,050 --> 00:20:43,630 Więc to jest podstawy pliku I / O. Prawdopodobnie widziałeś, że przed, lub 421 00:20:43,630 --> 00:20:45,710 Oglądałem go w tym fantastycznym krótki. 422 00:20:45,710 --> 00:20:48,410 Czy ktoś ma jakieś pytania, przed pójdziemy do jakiejś praktyki kodowania 423 00:20:48,410 --> 00:20:51,800 Problemy, o pliku I / O lub kroki Właśnie przeszliśmy? 424 00:20:51,800 --> 00:21:00,198 425 00:21:00,198 --> 00:21:03,162 >> [DŹWIĘKI TYPOWANIE] 426 00:21:03,162 --> 00:21:04,150 >> JASON Hirschhorn: Czy ci mam pytanie, AVI? 427 00:21:04,150 --> 00:21:04,660 >> AVI: Nie. 428 00:21:04,660 --> 00:21:04,740 >> JASON Hirschhorn: OK. 429 00:21:04,740 --> 00:21:06,746 Będę czekać kolejny siedem sekund. 430 00:21:06,746 --> 00:21:07,590 [Śmieje się] 431 00:21:07,590 --> 00:21:08,620 To naprawdę dobra wskazówka. 432 00:21:08,620 --> 00:21:10,750 Wy po prostu nie lubię zadawanie pytań. 433 00:21:10,750 --> 00:21:11,660 To dobrze. 434 00:21:11,660 --> 00:21:12,330 OK. 435 00:21:12,330 --> 00:21:17,620 Więc nasz problem najpierw praktyka, jesteśmy zamierza zastępuje rolę 436 00:21:17,620 --> 00:21:22,330 narzędzie wiersza polecenia, które prawdopodobnie stosowane wcześniej - kopia - 437 00:21:22,330 --> 00:21:23,500 Narzędzie Kopia. 438 00:21:23,500 --> 00:21:28,050 Jeśli wpiszesz cp, a następnie przekazać go dwa Argumenty do swojego terminalu, można 439 00:21:28,050 --> 00:21:28,980 skopiować plik. 440 00:21:28,980 --> 00:21:31,220 I to jest to, co chcemy napisać teraz. 441 00:21:31,220 --> 00:21:35,830 >> Więc jeszcze raz, czytając od tego slajdu, chciałbym można napisać program, który przyjmuje 442 00:21:35,830 --> 00:21:38,130 dwóch i tylko dwóch linii poleceń argumenty - 443 00:21:38,130 --> 00:21:40,750 plik źródłowy i plik docelowy - 444 00:21:40,750 --> 00:21:44,590 i kopiuje zawartość źródła złożyć do pliku docelowego 445 00:21:44,590 --> 00:21:46,960 jeden bajt w tym samym czasie. 446 00:21:46,960 --> 00:21:48,510 Tak, że jest wiele do prosić. 447 00:21:48,510 --> 00:21:52,200 >> Ponownie, dobre podejście do tego celu jest nie iść prosto do kodu C, ale 448 00:21:52,200 --> 00:21:54,280 rozbicie go na kilka etapów. 449 00:21:54,280 --> 00:21:58,400 Po pierwsze, myślę o logice - dokładnie pytam was zrobić - 450 00:21:58,400 --> 00:22:00,620 i zrozumieć wszystkie kroki do tego problemu. 451 00:22:00,620 --> 00:22:04,410 Nie w C, tylko w pewnym Pseudokod, lub nawet psychicznego model 452 00:22:04,410 --> 00:22:06,030 co się dzieje. 453 00:22:06,030 --> 00:22:10,050 >> Następnie, po uzyskaniu Pseudokod dół, dowiedzieć się, jak pseudokod 454 00:22:10,050 --> 00:22:14,600 mapy na narzędzia i rzeczy które nauczyli się wykorzystywać w C. 455 00:22:14,600 --> 00:22:19,070 >> I wreszcie, gdy już wszystko, razem, można zakodować problemu. 456 00:22:19,070 --> 00:22:23,370 Take 5 do 10 minut pracować nad tym problemem. 457 00:22:23,370 --> 00:22:25,800 Powiem z instrukcjami z powrotem w drugim. 458 00:22:25,800 --> 00:22:27,990 A następnie jedziemy do przejść Pseudokod i kod 459 00:22:27,990 --> 00:22:29,230 żyć w grupie. 460 00:22:29,230 --> 00:22:31,640 >> Jeśli masz jakieś pytania, gdy jesteś Pracujemy nad tym, nie krępuj się podnieść 461 00:22:31,640 --> 00:22:34,260 Twoja ręka, a ja się się i odpowiedzieć na nie. 462 00:22:34,260 --> 00:22:37,020 463 00:22:37,020 --> 00:22:39,330 >> UCZEŃ 7: Czy można przesunąć kawałek papieru? 464 00:22:39,330 --> 00:22:41,537 >> JASON Hirschhorn: Co jest? 465 00:22:41,537 --> 00:26:46,047 466 00:26:46,047 --> 00:26:48,043 >> [DŹWIĘKI TYPOWANIE] 467 00:26:48,043 --> 00:26:48,730 >> JASON Hirschhorn: OK. 468 00:26:48,730 --> 00:26:51,710 Chodźmy na Pseudokod pierwszy, i to dam ci kilka więcej 469 00:26:51,710 --> 00:26:52,960 minut, aby zakończyć kodowania. 470 00:26:52,960 --> 00:26:55,540 471 00:26:55,540 --> 00:26:58,650 >> Którzy chcieliby rozpocząć mnie z pierwszą linią 472 00:26:58,650 --> 00:27:00,030 pseudokod dla tej funkcji? 473 00:27:00,030 --> 00:27:03,330 474 00:27:03,330 --> 00:27:05,740 >> UCZEŃ 8: Sprawdź, aby upewnić się, że Ci mieli dwa pliki. 475 00:27:05,740 --> 00:27:06,990 >> JASON Hirschhorn: OK. 476 00:27:06,990 --> 00:27:21,270 477 00:27:21,270 --> 00:27:22,990 A jeśli nie jesteśmy? 478 00:27:22,990 --> 00:27:25,974 >> UCZEŃ 8: Chciałbym wrócić 0. 479 00:27:25,974 --> 00:27:27,872 >> JASON Hirschhorn: Powinniśmy wrócić 0? 480 00:27:27,872 --> 00:27:30,182 >> UCZEŃ 8: Powrót - 481 00:27:30,182 --> 00:27:30,650 wygaszania. 482 00:27:30,650 --> 00:27:30,850 Przepraszam. 483 00:27:30,850 --> 00:27:31,210 >> JASON Hirschhorn: Tak. 484 00:27:31,210 --> 00:27:32,710 Prawdopodobnie nie 0. 485 00:27:32,710 --> 00:27:34,680 Ponieważ 0 oznacza, że ​​wszystko było dobre. 486 00:27:34,680 --> 00:27:35,030 OK. 487 00:27:35,030 --> 00:27:36,730 Więc to jest pierwsza linia z Pseudokod. 488 00:27:36,730 --> 00:27:38,715 Kto ma drugą linię Pseudokod? 489 00:27:38,715 --> 00:27:40,630 >> UCZEŃ 9: Otwórz oba pliki? 490 00:27:40,630 --> 00:27:41,880 >> JASON Hirschhorn: Otwórz oba pliki. 491 00:27:41,880 --> 00:27:49,970 492 00:27:49,970 --> 00:27:50,920 OK? 493 00:27:50,920 --> 00:27:52,850 >> UCZEŃ 10: Sprawdź jeśli plik jest NULL? 494 00:27:52,850 --> 00:28:10,906 495 00:28:10,906 --> 00:28:12,580 >> JASON Hirschhorn: Sprawdź, pewno nie jest NULL. 496 00:28:12,580 --> 00:28:15,800 Tak na marginesie - 497 00:28:15,800 --> 00:28:17,540 slash 0 - 498 00:28:17,540 --> 00:28:18,887 jest NULL? 499 00:28:18,887 --> 00:28:20,080 >> UCZEŃ 11: Nie. 500 00:28:20,080 --> 00:28:21,190 >> JASON Hirschhorn: To nie jest NULL. 501 00:28:21,190 --> 00:28:23,400 To jest nazywane terminator NULL. 502 00:28:23,400 --> 00:28:25,580 To faktycznie wpisany tylko jeden litr. 503 00:28:25,580 --> 00:28:28,580 Więc sprawdzenie coś przeciwko, że - to faktycznie charakter - 504 00:28:28,580 --> 00:28:31,710 więc sprawdzenie coś przeciwko, że jest to nie to samo, sprawdzając, czy to 505 00:28:31,710 --> 00:28:32,690 równa NULL. 506 00:28:32,690 --> 00:28:34,100 >> I niektórzy ludzie - 507 00:28:34,100 --> 00:28:36,040 na ich quizy i ich problem Zestawy - mam 508 00:28:36,040 --> 00:28:36,890 dwa z tych mylić. 509 00:28:36,890 --> 00:28:38,830 Ale dwa z nich są w rzeczywistości inny. 510 00:28:38,830 --> 00:28:40,220 Jeden kończy ciąg - 511 00:28:40,220 --> 00:28:43,210 z nich jest wskaźnik do 0. 512 00:28:43,210 --> 00:28:46,490 >> UCZEŃ 12: Dlaczego nie można sprawdzić na upewnić się, że pliki nie są NULL 513 00:28:46,490 --> 00:28:48,670 przed ich otwarciem? 514 00:28:48,670 --> 00:28:54,772 >> JASON Hirschhorn: Więc otwarte oszczędza coś w tym pliku. 515 00:28:54,772 --> 00:28:57,780 A jeśli wrócisz tu - 516 00:28:57,780 --> 00:28:59,520 więc ta linia - fopen - 517 00:28:59,520 --> 00:29:05,300 daje adres i sklep że adres w pliku, czy to działa. 518 00:29:05,300 --> 00:29:07,650 Jeśli to nie działa, to będzie przechowywać NULL - 519 00:29:07,650 --> 00:29:08,020 >> UCZEŃ 12: Och. 520 00:29:08,020 --> 00:29:08,180 OK. 521 00:29:08,180 --> 00:29:08,500 Mam cię. 522 00:29:08,500 --> 00:29:09,050 >> JASON Hirschhorn: W pliku. 523 00:29:09,050 --> 00:29:11,990 Więc nie można sprawdzić na NULL zanim je otworzył pan. 524 00:29:11,990 --> 00:29:13,520 NULL oznacza coś nie działa poprawnie. 525 00:29:13,520 --> 00:29:18,030 526 00:29:18,030 --> 00:29:18,740 OK. 527 00:29:18,740 --> 00:29:22,590 Więc upewnij się, nie znaczy? 528 00:29:22,590 --> 00:29:23,200 Czy są? 529 00:29:23,200 --> 00:29:23,770 Co mamy na myśli? 530 00:29:23,770 --> 00:29:24,310 Pójdziemy z tym. 531 00:29:24,310 --> 00:29:24,520 >> UCZEŃ 13: Czy. 532 00:29:24,520 --> 00:29:25,020 >> JASON Hirschhorn: Czy? 533 00:29:25,020 --> 00:29:25,930 Nie jest? 534 00:29:25,930 --> 00:29:26,350 >> UCZEŃ 13: Czy. 535 00:29:26,350 --> 00:29:26,390 >> JASON Hirschhorn: OK. 536 00:29:26,390 --> 00:29:28,510 Wydaje się mieć pewne konsensus w tej sprawie. 537 00:29:28,510 --> 00:29:30,520 Ani jest NULL. 538 00:29:30,520 --> 00:29:32,250 OK, następna linia Pseudokod. 539 00:29:32,250 --> 00:29:33,600 Kto nie dał mi wiersz jeszcze konta? 540 00:29:33,600 --> 00:29:37,350 541 00:29:37,350 --> 00:29:38,295 Będziemy czekać na ciebie. 542 00:29:38,295 --> 00:29:39,020 Tak. 543 00:29:39,020 --> 00:29:40,895 >> UCZEŃ 14: Trzeba czytać od pierwszego pliku? 544 00:29:40,895 --> 00:29:42,290 >> JASON Hirschhorn: OK. 545 00:29:42,290 --> 00:29:46,240 >> UCZEŃ 14: Albo używamy fscanf lub coś w tym pierwszym pliku? 546 00:29:46,240 --> 00:29:50,650 >> JASON Hirschhorn: Więc chcemy czytać od pierwszego pliku i - 547 00:29:50,650 --> 00:29:51,900 postawmy że tutaj. 548 00:29:51,900 --> 00:30:00,600 549 00:30:00,600 --> 00:30:01,880 Odczytu z pliku źródłowego. 550 00:30:01,880 --> 00:30:05,370 A następnie, co zrobimy po tym odczytu z pliku źródłowego? 551 00:30:05,370 --> 00:30:06,620 Ktoś jeszcze? 552 00:30:06,620 --> 00:30:09,150 553 00:30:09,150 --> 00:30:12,190 >> UCZEŃ 15: Napisz do plik docelowy? 554 00:30:12,190 --> 00:30:22,080 555 00:30:22,080 --> 00:30:25,620 >> JASON Hirschhorn: napisz do nas plik docelowy, a - 556 00:30:25,620 --> 00:30:26,210 OK. 557 00:30:26,210 --> 00:30:30,030 Co jeszcze nam brakuje? 558 00:30:30,030 --> 00:30:32,460 Ktoś, kto mnie nie podano linia kodu jeszcze - z Pseudokod. 559 00:30:32,460 --> 00:30:33,510 Tak. 560 00:30:33,510 --> 00:30:36,540 >> UCZEŃ 16: Może zawsze można sprawdzić czy jest coś do czytania na, 561 00:30:36,540 --> 00:30:37,970 jak następnego wiersza? 562 00:30:37,970 --> 00:30:39,550 Że są jak w następnej linii, zobaczyć, czy on istnieje. 563 00:30:39,550 --> 00:30:40,660 >> [Elektroniczny sygnał dźwiękowy] 564 00:30:40,660 --> 00:30:41,095 >> JASON Hirschhorn: Ups. 565 00:30:41,095 --> 00:30:43,120 To jest mój program w dzienniku. 566 00:30:43,120 --> 00:30:43,580 Tak? 567 00:30:43,580 --> 00:30:44,960 >> UCZEŃ 16: Tak. 568 00:30:44,960 --> 00:30:48,940 >> JASON Hirschhorn: Więc daj mi to jeszcze raz. 569 00:30:48,940 --> 00:30:51,640 >> UCZEŃ 16: Sprawdź, czy nie ma jeszcze następna linia z 570 00:30:51,640 --> 00:30:52,920 plik źródłowy do odczytu. 571 00:30:52,920 --> 00:30:53,500 >> JASON Hirschhorn: OK. 572 00:30:53,500 --> 00:30:56,060 Więc nie czyta wiersze - czytali bajtów tutaj - 573 00:30:56,060 --> 00:30:57,590 ale masz rację. 574 00:30:57,590 --> 00:31:00,040 Chcemy czytać i pisać, aż nie ma więcej bajtów. 575 00:31:00,040 --> 00:31:11,430 576 00:31:11,430 --> 00:31:11,735 OK. 577 00:31:11,735 --> 00:31:16,940 I tak to powinno być naprawdę wcięte nieco, bo są pod nie. 578 00:31:16,940 --> 00:31:17,470 Prawda? 579 00:31:17,470 --> 00:31:20,620 Dopóki jesteśmy z bajtów, będziemy odczytu z pliku źródłowego i pisać 580 00:31:20,620 --> 00:31:22,160 do pliku docelowego. 581 00:31:22,160 --> 00:31:24,510 >> A następnie, co jest ostatnio linia Pseudokod? 582 00:31:24,510 --> 00:31:26,380 Ktoś, kto nie podano mnie coś jeszcze. 583 00:31:26,380 --> 00:31:29,270 584 00:31:29,270 --> 00:31:30,260 >> UCZEŃ 17: Zamknij pliki? 585 00:31:30,260 --> 00:31:31,510 >> JASON Hirschhorn: Dokładnie. 586 00:31:31,510 --> 00:31:36,370 587 00:31:36,370 --> 00:31:37,450 Zamknij pliki. 588 00:31:37,450 --> 00:31:38,400 Więc jest nasz pseudokod. 589 00:31:38,400 --> 00:31:41,870 Mam zamiar umieścić Pseudokod do gedit, w kilka minut możemy 590 00:31:41,870 --> 00:31:44,626 będzie kodować tym razem. 591 00:31:44,626 --> 00:33:55,280 592 00:33:55,280 --> 00:33:56,000 >> OK. 593 00:33:56,000 --> 00:33:58,290 Pozwól nam zacząć jako grupa. 594 00:33:58,290 --> 00:33:59,940 Nishant, mam nowy plik. 595 00:33:59,940 --> 00:34:01,130 Właśnie otworzył to. 596 00:34:01,130 --> 00:34:01,880 Untitled Document 1. 597 00:34:01,880 --> 00:34:05,490 Co jest pierwszą rzeczą, którą należy zrobić? 598 00:34:05,490 --> 00:34:07,040 >> Nishant: Dołącz bibliotek? 599 00:34:07,040 --> 00:34:08,219 >> JASON Hirschhorn: OK. 600 00:34:08,219 --> 00:34:11,070 Jakie biblioteki? 601 00:34:11,070 --> 00:34:17,570 >> Nishant: stdio.h, stdlib.h, wierzę? 602 00:34:17,570 --> 00:34:18,000 >> JASON Hirschhorn: OK. 603 00:34:18,000 --> 00:34:21,592 Co to jest stdlib dla? 604 00:34:21,592 --> 00:34:23,010 >> Nishant: zapomniałem. 605 00:34:23,010 --> 00:34:23,219 >> JASON Hirschhorn: OK. 606 00:34:23,219 --> 00:34:24,179 Więc m.in. stdio. 607 00:34:24,179 --> 00:34:28,630 Co należy zrobić, zanim jeszcze I zacząć pisać? 608 00:34:28,630 --> 00:34:29,710 >> Nishant: Napisz nagłówek? 609 00:34:29,710 --> 00:34:31,830 >> JASON Hirschhorn: Jak mogę dostać to kolorowe? 610 00:34:31,830 --> 00:34:34,060 >> [GŁOSY wstawienie] 611 00:34:34,060 --> 00:34:35,040 >> Nishant: Jak dostać kolorowe? 612 00:34:35,040 --> 00:34:38,060 >> JASON Hirschhorn: Jak mam kolor kodowania? 613 00:34:38,060 --> 00:34:38,570 >> Nishant: Nie wiem. 614 00:34:38,570 --> 00:34:38,830 Och. 615 00:34:38,830 --> 00:34:39,389 Zapisz. 616 00:34:39,389 --> 00:34:39,929 >> JASON Hirschhorn: Zapisz. 617 00:34:39,929 --> 00:34:40,270 Tak. 618 00:34:40,270 --> 00:34:41,760 Należy go zapisać jako plik. C. 619 00:34:41,760 --> 00:34:46,239 Więc zapisz go na pulpicie jako cp.c. 620 00:34:46,239 --> 00:34:47,280 Słodkie. 621 00:34:47,280 --> 00:34:51,199 A jeśli chcę uzyskać pełną stylu punktów, co mam 622 00:34:51,199 --> 00:34:53,085 zawierają na szczycie? 623 00:34:53,085 --> 00:34:58,390 >> Nishant: Możesz napisać swoje imię i nazwisko, nazwę programu i celów 624 00:34:58,390 --> 00:34:59,640 programu, jak również? 625 00:34:59,640 --> 00:35:08,400 626 00:35:08,400 --> 00:35:10,040 >> JASON Hirschhorn: Wygląda dobrze. 627 00:35:10,040 --> 00:35:10,470 Doskonała. 628 00:35:10,470 --> 00:35:12,940 Więc zaczął nam się doskonale. 629 00:35:12,940 --> 00:35:13,720 # Include - 630 00:35:13,720 --> 00:35:15,365 będziemy też pisać - 631 00:35:15,365 --> 00:35:30,050 632 00:35:30,050 --> 00:35:30,870 OK. 633 00:35:30,870 --> 00:35:33,520 Więc myślę, że wszystko jest gotowe do pracy. 634 00:35:33,520 --> 00:35:38,003 Kto ma pierwszą linię kodu dla mnie - lub pierwsze linie kodu, które 635 00:35:38,003 --> 00:35:41,280 to zajmie aby zaspokoić nasz pierwszy uwag w Pseudokod? 636 00:35:41,280 --> 00:35:41,985 Ty. 637 00:35:41,985 --> 00:35:48,780 >> UCZEŃ 18: Czy nie powinno być int argc, char *, a następnie argv? 638 00:35:48,780 --> 00:35:49,490 >> JASON Hirschhorn: Myślę, że masz rację. 639 00:35:49,490 --> 00:35:56,270 Zmieńmy to na int główne, otwarte paren, int argc, przecinek, char * argv? 640 00:35:56,270 --> 00:35:57,150 Tak? 641 00:35:57,150 --> 00:35:57,410 >> UCZEŃ 18: Wsporniki. 642 00:35:57,410 --> 00:35:58,260 >> JASON Hirschhorn: Wsporniki. 643 00:35:58,260 --> 00:35:59,860 Otwórz uchwyt, zamknięcie nawiasu, blisko rodzica. 644 00:35:59,860 --> 00:36:00,240 Idealny. 645 00:36:00,240 --> 00:36:02,160 Teraz mogę wziąć argumenty wiersza poleceń. 646 00:36:02,160 --> 00:36:02,430 OK. 647 00:36:02,430 --> 00:36:04,250 Upewnij się, mamy podane dwa pliki. 648 00:36:04,250 --> 00:36:07,905 Możesz mi dać, że dobrze. 649 00:36:07,905 --> 00:36:09,180 >> UCZEŃ 18: Jeśli argc - 650 00:36:09,180 --> 00:36:11,060 ta nie jest równa 3. 651 00:36:11,060 --> 00:36:14,360 >> JASON Hirschhorn: Jeśli otwarty nawias argc nie równa 3? 652 00:36:14,360 --> 00:36:16,970 >> UCZEŃ 18: Tak, powrót 1 lub cokolwiek. 653 00:36:16,970 --> 00:36:17,460 >> JASON Hirschhorn: Przepraszam. 654 00:36:17,460 --> 00:36:19,120 >> UCZEŃ 18: Powrót 1 lub cokolwiek. 655 00:36:19,120 --> 00:36:20,270 >> JASON Hirschhorn: Powrót 1. 656 00:36:20,270 --> 00:36:22,230 OK? 657 00:36:22,230 --> 00:36:22,970 Świetnie. 658 00:36:22,970 --> 00:36:24,290 Otwórz oba pliki. 659 00:36:24,290 --> 00:36:26,160 Kto może pomóc mi otworzyć oba pliki? 660 00:36:26,160 --> 00:36:28,125 Kto nie dał mi kodu jeszcze? 661 00:36:28,125 --> 00:36:31,510 662 00:36:31,510 --> 00:36:32,320 Kurt? 663 00:36:32,320 --> 00:36:36,145 >> KURT: Więc wszystkie czapki F-I-L-E źródłowe gwiazda. 664 00:36:36,145 --> 00:36:39,390 665 00:36:39,390 --> 00:36:40,920 >> JASON Hirschhorn: Jadę wykupienia samogłoski. 666 00:36:40,920 --> 00:36:41,570 To są fajne. 667 00:36:41,570 --> 00:36:42,716 To jak Tumblr. 668 00:36:42,716 --> 00:36:44,610 >> UCZEŃ 18: Równa fopen - 669 00:36:44,610 --> 00:36:46,612 >> JASON Hirschhorn: Równa fopen? 670 00:36:46,612 --> 00:36:49,870 >> UCZEŃ 18: Otwarte nawias, argv, otwarty uchwyt. 671 00:36:49,870 --> 00:36:50,055 >> JASON Hirschhorn: Czekaj. 672 00:36:50,055 --> 00:36:50,240 Przepraszam. 673 00:36:50,240 --> 00:36:51,050 Otwórz nawias. 674 00:36:51,050 --> 00:36:51,456 OK. 675 00:36:51,456 --> 00:36:53,080 >> UCZEŃ 18: Tak. 676 00:36:53,080 --> 00:36:55,110 Argv sub 1. 677 00:36:55,110 --> 00:36:55,860 >> JASON Hirschhorn: Sub 1? 678 00:36:55,860 --> 00:36:56,140 >> UCZEŃ 18: Tak. 679 00:36:56,140 --> 00:36:58,540 Argv otwarty uchwyt 1 - 680 00:36:58,540 --> 00:36:59,730 Tak. 681 00:36:59,730 --> 00:37:06,470 A następnie przecinek, a następnie otwarty pokój cytat, r, podwójny cudzysłów, 682 00:37:06,470 --> 00:37:08,250 zamknij nawias, średnik. 683 00:37:08,250 --> 00:37:09,450 >> JASON Hirschhorn: Słodkie. 684 00:37:09,450 --> 00:37:10,950 A co z drugim? 685 00:37:10,950 --> 00:37:16,030 >> UCZEŃ 18: Bardzo podobne, ale zamiast S-R-C, można nazwać to D-S-T. 686 00:37:16,030 --> 00:37:17,060 >> JASON Hirschhorn: Oo! 687 00:37:17,060 --> 00:37:17,772 To mi się podoba. 688 00:37:17,772 --> 00:37:20,010 >> UCZEŃ 18: Tak D-S-T. Tak. 689 00:37:20,010 --> 00:37:23,057 A następnie argv, otwarty uchwyt, 2. 690 00:37:23,057 --> 00:37:23,200 Tak. 691 00:37:23,200 --> 00:37:26,720 A następnie w zamiast r. 692 00:37:26,720 --> 00:37:27,620 Tak. 693 00:37:27,620 --> 00:37:29,630 >> JASON Hirschhorn: Świetnie. 694 00:37:29,630 --> 00:37:31,360 Następne kilka linii. 695 00:37:31,360 --> 00:37:34,040 Także jeśli ktoś ma co do dodania do linie, które zrobiliśmy, nie krępuj się 696 00:37:34,040 --> 00:37:35,690 dodać tych, jak również. 697 00:37:35,690 --> 00:37:37,520 Upewnij się, czy nie jest NULL. 698 00:37:37,520 --> 00:37:41,450 Kto może mi dać kod muszę zaspokoić tę linię Pseudokod? 699 00:37:41,450 --> 00:37:44,430 700 00:37:44,430 --> 00:37:45,870 Archer. 701 00:37:45,870 --> 00:37:58,645 >> ARCHER: Jeśli src równa równych NULL lub równa równych DST 702 00:37:58,645 --> 00:38:04,590 NULL, a następnie powrót - 703 00:38:04,590 --> 00:38:07,130 704 00:38:07,130 --> 00:38:07,976 >> JASON Hirschhorn: Co? 705 00:38:07,976 --> 00:38:08,890 >> ARCHER: Powrót 2? 706 00:38:08,890 --> 00:38:09,760 >> JASON Hirschhorn: Powrót 2. 707 00:38:09,760 --> 00:38:14,400 Więc jeśli otwarty nawias src równa równa się NULL, lub - 708 00:38:14,400 --> 00:38:15,590 cokolwiek to thing's - rury? 709 00:38:15,590 --> 00:38:16,346 Rura? 710 00:38:16,346 --> 00:38:17,140 Nazwijmy to rura. 711 00:38:17,140 --> 00:38:22,340 Rury, rury, dst równa równych NULL, powrót 2. 712 00:38:22,340 --> 00:38:23,900 OK? 713 00:38:23,900 --> 00:38:26,060 Dopóki jesteśmy z bajtów - 714 00:38:26,060 --> 00:38:29,820 my jakby pomijane tym etapie część pseudokod na zamiar tutaj. 715 00:38:29,820 --> 00:38:31,970 >> Ale dopóki jesteśmy z bajtów - Co to brzmi? 716 00:38:31,970 --> 00:38:34,680 Jaki rodzaj struktury C - 717 00:38:34,680 --> 00:38:36,160 ale nie używam struktury tekstu, bo mamy zamiar rozpocząć korzystanie 718 00:38:36,160 --> 00:38:37,350 że w innych przypadkach - 719 00:38:37,350 --> 00:38:39,495 ale C Narzędzie to brzmi jak? 720 00:38:39,495 --> 00:38:39,970 >> UCZEŃ 19: pętla. 721 00:38:39,970 --> 00:38:40,980 >> JASON Hirschhorn: pętla. 722 00:38:40,980 --> 00:38:43,060 Brzmi jak pętli. 723 00:38:43,060 --> 00:38:49,670 Więc kto może mi dać pierwszą linię kodu pętli tutaj? 724 00:38:49,670 --> 00:38:56,320 725 00:38:56,320 --> 00:39:01,980 Można również wybrać, jaki rodzaj pętla chcesz, jeśli dasz mi 726 00:39:01,980 --> 00:39:03,215 ta linia kodu. 727 00:39:03,215 --> 00:39:04,150 Istnieją trzy typy. 728 00:39:04,150 --> 00:39:06,530 Można dostać się do piłki. 729 00:39:06,530 --> 00:39:08,080 Proponuję jeden z nich. 730 00:39:08,080 --> 00:39:08,410 Avi. 731 00:39:08,410 --> 00:39:09,230 Który z nich chcesz? 732 00:39:09,230 --> 00:39:09,960 >> AVI: DO. 733 00:39:09,960 --> 00:39:11,460 >> JASON Hirschhorn: DO. 734 00:39:11,460 --> 00:39:15,180 >> AVI: int i jest równa zeru. 735 00:39:15,180 --> 00:39:17,360 >> JASON Hirschhorn: OK. 736 00:39:17,360 --> 00:39:18,570 >> AVI: Ta część nie jestem pewien. 737 00:39:18,570 --> 00:39:29,080 Ale i jest mniejsza niż rozmiar źródła gwiazdy? 738 00:39:29,080 --> 00:39:31,128 Nie jestem pewien. 739 00:39:31,128 --> 00:39:32,580 >> JASON Hirschhorn: OK. 740 00:39:32,580 --> 00:39:35,870 >> AVI: Bo chcesz rozmiar pliku, prawda? 741 00:39:35,870 --> 00:39:41,090 >> JASON Hirschhorn: Więc to prawdopodobnie nie będzie daje nam rozmiar rzeczywisty 742 00:39:41,090 --> 00:39:43,010 pliku w bajtach. 743 00:39:43,010 --> 00:39:47,680 Co jeszcze możemy zrobić? 744 00:39:47,680 --> 00:39:48,810 Co jest inny rodzaj pętli? 745 00:39:48,810 --> 00:39:50,180 Czy powinniśmy trzymać się z pętli FOR? 746 00:39:50,180 --> 00:39:55,350 747 00:39:55,350 --> 00:39:57,900 >> UCZEŃ 20: Czy mógłbyś zrobić pętli while? 748 00:39:57,900 --> 00:40:01,350 A potem, to co można zrobić, to you'd - 749 00:40:01,350 --> 00:40:03,930 bo mamy char * dla pliku. 750 00:40:03,930 --> 00:40:07,950 Jeśli więc po prostu zachować zwiększając że dopóki my znaleźć w znaku NULL 751 00:40:07,950 --> 00:40:08,500 Koniec z tym? 752 00:40:08,500 --> 00:40:11,130 Lub nie, jest to, że nie, jak działają pliki? 753 00:40:11,130 --> 00:40:14,300 >> JASON Hirschhorn: Więc możemy zachować inkrementacji char * 754 00:40:14,300 --> 00:40:16,340 dopóki nie znajdziemy NULL - 755 00:40:16,340 --> 00:40:18,580 >> UCZEŃ 20: Zasadniczo nie poddawać się znak po znaku, aż trafiliśmy 756 00:40:18,580 --> 00:40:21,250 Koniec pliku. 757 00:40:21,250 --> 00:40:21,600 >> JASON Hirschhorn: Tak. 758 00:40:21,600 --> 00:40:22,560 Więc to jest to, co chcemy zrobić. 759 00:40:22,560 --> 00:40:24,545 Chcemy zachować czytania, charakter po znaku, aż dojdziemy do 760 00:40:24,545 --> 00:40:25,080 Koniec pliku. 761 00:40:25,080 --> 00:40:25,375 >> UCZEŃ 20: Tak. 762 00:40:25,375 --> 00:40:25,860 Znaleźć - 763 00:40:25,860 --> 00:40:28,540 co jest koniec lub znak stopu Na koniec w pliku tekstowym. 764 00:40:28,540 --> 00:40:28,620 >> JASON Hirschhorn: OK. 765 00:40:28,620 --> 00:40:30,140 Więc kiedy dojdziemy do końca pliku - skąd wiemy, że osiągnęliśmy 766 00:40:30,140 --> 00:40:33,200 koniec pliku? 767 00:40:33,200 --> 00:40:34,710 Jeśli dzwonię - 768 00:40:34,710 --> 00:40:35,910 więc niech to krok wstecz. 769 00:40:35,910 --> 00:40:37,550 Co to jest funkcja? 770 00:40:37,550 --> 00:40:39,360 Chodźmy do tej linii tutaj. 771 00:40:39,360 --> 00:40:40,630 Odczytu z pliku źródłowego. 772 00:40:40,630 --> 00:40:41,880 Kto może mi dać ten wiersz kodu? 773 00:40:41,880 --> 00:40:45,592 774 00:40:45,592 --> 00:40:47,590 >> UCZEŃ 21: fscanf? 775 00:40:47,590 --> 00:40:49,110 >> JASON Hirschhorn: fscanf. 776 00:40:49,110 --> 00:40:49,510 OK. 777 00:40:49,510 --> 00:40:52,240 Co zrobić, jeśli chcę czytać, bardzo W szczególności, jeden bajt? 778 00:40:52,240 --> 00:40:55,012 779 00:40:55,012 --> 00:40:56,860 >> UCZEŃ 21: Nie wiem. 780 00:40:56,860 --> 00:40:57,110 >> JASON Hirschhorn: OK. 781 00:40:57,110 --> 00:40:59,380 Nawet prostsze niż fscanf - to, co jest - 782 00:40:59,380 --> 00:41:01,890 Chcę czytać z pliku źródłowego? 783 00:41:01,890 --> 00:41:03,720 Czytaj z pliku źródłowego. 784 00:41:03,720 --> 00:41:04,850 Co to jest funkcja - tak. 785 00:41:04,850 --> 00:41:05,380 >> UCZEŃ 22: To fread? 786 00:41:05,380 --> 00:41:06,070 >> JASON Hirschhorn: fread. 787 00:41:06,070 --> 00:41:07,550 Myślę, trzymajmy się że jeden na teraz. 788 00:41:07,550 --> 00:41:10,380 789 00:41:10,380 --> 00:41:13,650 Co to za argumenty nie fread wziąć? 790 00:41:13,650 --> 00:41:17,410 >> UCZEŃ 22: Prawdopodobnie typ pliku, i lokalizacja w pliku? 791 00:41:17,410 --> 00:41:19,550 >> JASON Hirschhorn: Co mam tu wpisać aby dowiedzieć się, jakiego rodzaju argumenty 792 00:41:19,550 --> 00:41:20,950 fread bierze? 793 00:41:20,950 --> 00:41:23,710 >> Człowiek KILKA STUDENCI: fread. 794 00:41:23,710 --> 00:41:24,740 >> JASON Hirschhorn: Mężczyzna fread i fwrite. 795 00:41:24,740 --> 00:41:25,980 Wygląda na to, że spędzać czas razem. 796 00:41:25,980 --> 00:41:29,589 Więc fread bierze jak wiele argumentów? 797 00:41:29,589 --> 00:41:30,920 >> UCZEŃ 23: Cztery. 798 00:41:30,920 --> 00:41:32,690 >> JASON Hirschhorn: To trwa cztery argumenty. 799 00:41:32,690 --> 00:41:41,100 To trwa wskaźnik, rozmiar, i że coś, co jest dziwne, a niektóre pliki. 800 00:41:41,100 --> 00:41:42,000 OK? 801 00:41:42,000 --> 00:41:43,990 Przeczytajmy o tym tutaj. 802 00:41:43,990 --> 00:41:49,370 "Funkcja fread odczytuje n memb elementów danych, każdy bajtów rozmiar 803 00:41:49,370 --> 00:41:53,840 długo, ze strumienia wskazywanego przez strumień, przechowywanie ich w miejscu 804 00:41:53,840 --> 00:41:56,170 podane przez wskaźnik. " 805 00:41:56,170 --> 00:41:57,960 >> Tak więc cztery argumenty. 806 00:41:57,960 --> 00:42:04,510 Dlaczego nie mogę po prostu skopiować to, i wklej go tutaj. 807 00:42:04,510 --> 00:42:10,060 808 00:42:10,060 --> 00:42:10,770 OK. 809 00:42:10,770 --> 00:42:13,673 Więc kto może rozpocząć wypełnianie te argumenty dla mnie? 810 00:42:13,673 --> 00:42:15,840 Avi. 811 00:42:15,840 --> 00:42:17,720 >> AVI: Wyjąć pustkę. 812 00:42:17,720 --> 00:42:20,530 Umieścić tylko src. 813 00:42:20,530 --> 00:42:23,142 Wyjąć wskaźnik i gwiazdy. 814 00:42:23,142 --> 00:42:26,102 Umieścić src. 815 00:42:26,102 --> 00:42:27,050 Następnie - 816 00:42:27,050 --> 00:42:28,500 >> JASON Hirschhorn: Więc mam zamiar zatrzymać tam, bo to jest niepoprawne. 817 00:42:28,500 --> 00:42:32,590 818 00:42:32,590 --> 00:42:34,710 Masz rację z src, ale gdzie należy src iść? 819 00:42:34,710 --> 00:42:35,960 >> [GŁOSY wstawienie] 820 00:42:35,960 --> 00:42:38,976 821 00:42:38,976 --> 00:42:41,610 >> JASON Hirschhorn: Powinien przejdź tutaj. 822 00:42:41,610 --> 00:42:43,790 To src - nasza src jest typ. 823 00:42:43,790 --> 00:42:44,610 Spójrzmy tutaj. 824 00:42:44,610 --> 00:42:49,610 Ten pyta o typ pliku *, my faktycznie je zobaczyć tak. 825 00:42:49,610 --> 00:42:57,630 Tak to jest z prośbą o argument typ pliku * zwany strumień, który jest src. 826 00:42:57,630 --> 00:42:58,480 OK? 827 00:42:58,480 --> 00:43:00,410 >> Jaki rozmiar rzeczy zrobić chcemy czytać? 828 00:43:00,410 --> 00:43:03,340 Dałem ci to w opis problemu. 829 00:43:03,340 --> 00:43:04,370 >> STUDENT 24: Jeden bajt w tym samym czasie. 830 00:43:04,370 --> 00:43:05,340 >> JASON Hirschhorn: Jeden bajt. 831 00:43:05,340 --> 00:43:08,205 Jak duży jest bajt? 832 00:43:08,205 --> 00:43:11,642 Jego wielkość jest w bajtach, więc to, co mogę umieścić tam? 833 00:43:11,642 --> 00:43:12,910 >> UCZEŃ 25: Jeden. 834 00:43:12,910 --> 00:43:14,730 >> JASON Hirschhorn: Jeden. 835 00:43:14,730 --> 00:43:17,020 Prawo. 836 00:43:17,020 --> 00:43:19,940 Jego wielkość jest w jednostki bajt, więc 1 jest 1 bajt. 837 00:43:19,940 --> 00:43:22,284 Ile chcę czytać na raz. 838 00:43:22,284 --> 00:43:23,520 >> UCZEŃ 26: Jeden? 839 00:43:23,520 --> 00:43:24,270 >> JASON Hirschhorn: Jedno. 840 00:43:24,270 --> 00:43:28,540 Chcę przeczytać jedno z wielkości 1, ugryzienie jednocześnie. 841 00:43:28,540 --> 00:43:32,110 I gdzie mogę je, raz czytam? 842 00:43:32,110 --> 00:43:35,050 843 00:43:35,050 --> 00:43:36,510 >> UCZEŃ 27: Cel podróży? 844 00:43:36,510 --> 00:43:39,270 >> JASON Hirschhorn: Więc nie mogę umieścić to prosto do celu. 845 00:43:39,270 --> 00:43:40,800 >> UCZEŃ 28: Będziesz put że do trzeciego wskaźnik? 846 00:43:40,800 --> 00:43:41,780 >> UCZEŃ 27: do miejsca przeznaczenia. 847 00:43:41,780 --> 00:43:42,270 >> JASON Hirschhorn: OK. 848 00:43:42,270 --> 00:43:42,630 Tak. 849 00:43:42,630 --> 00:43:46,820 >> UCZEŃ 29: Możesz zadeklarować coś działać jako tymczasowe przechowywanie wcześniej. 850 00:43:46,820 --> 00:43:47,350 >> JASON Hirschhorn: OK. 851 00:43:47,350 --> 00:43:50,080 Daj mi to. 852 00:43:50,080 --> 00:43:53,930 >> UCZEŃ 29: Kolejny plik wskaźnik, może być? 853 00:43:53,930 --> 00:43:54,220 >> JASON Hirschhorn: OK. 854 00:43:54,220 --> 00:43:55,585 Więc to jest nieważne star - 855 00:43:55,585 --> 00:43:57,750 to gwiazda typu void, więc nie trzeba być wskaźnik pliku. 856 00:43:57,750 --> 00:44:02,520 A jeśli czytam jeden bajt, gdzie byłoby dobre miejsce 857 00:44:02,520 --> 00:44:03,850 zapisać jeden bajt? 858 00:44:03,850 --> 00:44:04,660 >> UCZEŃ 29: tablica? 859 00:44:04,660 --> 00:44:05,770 >> JASON Hirschhorn: tablica. 860 00:44:05,770 --> 00:44:07,730 OK. 861 00:44:07,730 --> 00:44:14,040 I co jeszcze jest coś, co jest tylko rozmiar jeden bajt? 862 00:44:14,040 --> 00:44:16,980 863 00:44:16,980 --> 00:44:18,060 >> UCZEŃ 30: char *? 864 00:44:18,060 --> 00:44:18,530 >> UCZEŃ 29: Tak. 865 00:44:18,530 --> 00:44:19,880 >> JASON Hirschhorn: char * Nie jest jeden bajt. 866 00:44:19,880 --> 00:44:20,440 >> UCZEŃ 29: char. 867 00:44:20,440 --> 00:44:21,810 >> JASON Hirschhorn: char to jeden bajt. 868 00:44:21,810 --> 00:44:22,920 Prawda? 869 00:44:22,920 --> 00:44:26,740 Więc nazwijmy to bufor jest ogólnym nazwa używana do przechowywania tych rzeczy do 870 00:44:26,740 --> 00:44:27,910 coś tymczasowo. 871 00:44:27,910 --> 00:44:30,880 Więc stworzyć bufor. 872 00:44:30,880 --> 00:44:31,150 Prawda? 873 00:44:31,150 --> 00:44:32,990 Ale to nie ma void *. 874 00:44:32,990 --> 00:44:38,660 Więc może masz rację, że Bufor powinien być o rozmiarze 0. 875 00:44:38,660 --> 00:44:41,070 Tak przechowuje to jeden - 876 00:44:41,070 --> 00:44:41,280 prawo. 877 00:44:41,280 --> 00:44:43,560 >> Bo to właśnie tutaj - char Bufor jest charakter, ale 878 00:44:43,560 --> 00:44:45,110 ma to void * - 879 00:44:45,110 --> 00:44:45,870 wskaźnik. 880 00:44:45,870 --> 00:44:50,640 Więc mogłem to zrobić i teraz Bufor jest wskaźnik. 881 00:44:50,640 --> 00:44:53,214 Co jeszcze mogę zrobić? 882 00:44:53,214 --> 00:44:55,775 >> UCZEŃ 31: Put gwiazdkę obok char. 883 00:44:55,775 --> 00:44:58,380 >> JASON Hirschhorn: mogłem Stworzyliśmy to char *. 884 00:44:58,380 --> 00:45:00,216 OK. 885 00:45:00,216 --> 00:45:03,131 Co jest inny, na co mogę zrobić? 886 00:45:03,131 --> 00:45:04,050 Albo idziemy z tego. 887 00:45:04,050 --> 00:45:05,740 Char * bufor, więc to, co mogę umieścić tutaj? 888 00:45:05,740 --> 00:45:08,290 889 00:45:08,290 --> 00:45:09,310 >> UCZEŃ 31: Bufor. 890 00:45:09,310 --> 00:45:10,560 >> JASON Hirschhorn: Bufor. 891 00:45:10,560 --> 00:45:12,640 892 00:45:12,640 --> 00:45:14,500 Bufor jest wskaźnik do char. 893 00:45:14,500 --> 00:45:19,480 I w tym miejscu, stawiamy jeden bajt coś czytaliśmy. 894 00:45:19,480 --> 00:45:19,980 Tak. 895 00:45:19,980 --> 00:45:20,700 Avi. 896 00:45:20,700 --> 00:45:21,230 >> AVI: Tylko szybkie pytanie. 897 00:45:21,230 --> 00:45:24,440 Chcesz malloc bufor? 898 00:45:24,440 --> 00:45:25,930 >> JASON Hirschhorn: Kto może odpowiedzieć na to pytanie? 899 00:45:25,930 --> 00:45:30,210 >> UCZEŃ 32: No cóż, to naprawdę nie ma punkt do niczego w tej chwili, więc - 900 00:45:30,210 --> 00:45:32,610 >> JASON Hirschhorn: Ale czy chcemy go malloc? 901 00:45:32,610 --> 00:45:35,600 >> UCZEŃ 32: Jeśli było to zrobić, że sposób, myślę, że tak, dlatego, że trzeba 902 00:45:35,600 --> 00:45:36,990 jakieś miejsce na to, aby wskazać. 903 00:45:36,990 --> 00:45:38,350 >> JASON Hirschhorn: czy trzeba go malloc? 904 00:45:38,350 --> 00:45:40,580 >> UCZEŃ 33: Jeśli masz zamiar używać na zewnątrz pętli. 905 00:45:40,580 --> 00:45:42,524 >> JASON Hirschhorn: Czy będziemy używać na zewnątrz pętli? 906 00:45:42,524 --> 00:45:44,392 >> UCZEŃ 34: Tak. 907 00:45:44,392 --> 00:45:44,860 >> UCZEŃ 35: Czekaj. 908 00:45:44,860 --> 00:45:46,980 Czy chcemy, aby to zgłosić w pętli do zaświatów? 909 00:45:46,980 --> 00:45:50,100 >> JASON Hirschhorn: Więc myślę, że mamy niektóre pseudo pętla tutaj, że jesteśmy 910 00:45:50,100 --> 00:45:51,950 próbuje dowiedzieć się, że jeszcze nie dostał się. 911 00:45:51,950 --> 00:45:54,710 912 00:45:54,710 --> 00:45:56,010 Nie trzeba go malloc. 913 00:45:56,010 --> 00:45:59,310 Jesteśmy działającą w głównym, to będzie tylko do stosowania wewnątrz pętli. 914 00:45:59,310 --> 00:46:00,540 Nie musi istnieć poza tym. 915 00:46:00,540 --> 00:46:02,340 >> Więc może to być zmienna lokalna. 916 00:46:02,340 --> 00:46:03,925 Masz wskaźnik do zmienna lokalna. 917 00:46:03,925 --> 00:46:07,984 918 00:46:07,984 --> 00:46:09,590 >> UCZEŃ 36: Ale to nie jest wskazując na coś. 919 00:46:09,590 --> 00:46:11,540 >> JASON Hirschhorn: Nie, to nie jest inicjowany do niczego. 920 00:46:11,540 --> 00:46:12,790 Ale nie będziemy z niego korzystać również. 921 00:46:12,790 --> 00:46:15,300 Zamierzamy umieścić coś w to pierwszy raz, kiedy go używać. 922 00:46:15,300 --> 00:46:16,580 Tak, że wydaje się OK. 923 00:46:16,580 --> 00:46:17,780 Więc nie musimy tutaj malloc. 924 00:46:17,780 --> 00:46:19,360 I myślę, że jest OK, jak jest. 925 00:46:19,360 --> 00:46:24,350 926 00:46:24,350 --> 00:46:25,790 OK. 927 00:46:25,790 --> 00:46:27,190 Mamy fread linię. 928 00:46:27,190 --> 00:46:28,490 Zróbmy następny wiersz. 929 00:46:28,490 --> 00:46:32,984 >> Jeśli chcemy zapisać do pliku, co jest dobry funkcji użyć aby to zrobić? 930 00:46:32,984 --> 00:46:33,770 >> UCZEŃ 37: fwrite? 931 00:46:33,770 --> 00:46:35,140 >> UCZEŃ 38: fprintf? 932 00:46:35,140 --> 00:46:36,010 >> JASON Hirschhorn: fprintf jest jeden. 933 00:46:36,010 --> 00:46:37,260 Co jest jeszcze jeden? 934 00:46:37,260 --> 00:46:37,680 >> UCZEŃ 39: fwrite. 935 00:46:37,680 --> 00:46:38,510 >> JASON Hirschhorn: fwrite. 936 00:46:38,510 --> 00:46:41,250 I dla naszych celów, fwrite, które widzieliśmy tutaj, jest 937 00:46:41,250 --> 00:46:42,500 chyba lepszym wyborem. 938 00:46:42,500 --> 00:46:51,970 939 00:46:51,970 --> 00:46:53,950 To trwa cztery argumenty, jak również. 940 00:46:53,950 --> 00:46:57,570 Nishant, możesz dać mnie argumenty? 941 00:46:57,570 --> 00:47:00,570 >> Nishant: pierwszy z nich będzie być tylko bufor. 942 00:47:00,570 --> 00:47:02,210 >> JASON Hirschhorn: OK. 943 00:47:02,210 --> 00:47:06,752 >> Nishant: drugi jest będzie tylko 1. 944 00:47:06,752 --> 00:47:09,510 Trzeci będzie 1. 945 00:47:09,510 --> 00:47:11,470 A czwarty będzie dst. 946 00:47:11,470 --> 00:47:18,010 947 00:47:18,010 --> 00:47:19,550 >> JASON Hirschhorn: Czy ktoś ma wszelkie pytania na temat tej linii? 948 00:47:19,550 --> 00:47:28,370 949 00:47:28,370 --> 00:47:29,130 , Że wygląda dobrze. 950 00:47:29,130 --> 00:47:29,590 OK. 951 00:47:29,590 --> 00:47:34,250 Teraz wygląda na to, z jednej rzeczy jesteśmy brakuje - faktycznie, napiszmy 952 00:47:34,250 --> 00:47:35,090 ta ostatnia linia. 953 00:47:35,090 --> 00:47:36,300 Zamknij pliki. 954 00:47:36,300 --> 00:47:38,880 Kto może nam dokończyć pisanie te ostatnie dwie linie? 955 00:47:38,880 --> 00:47:39,120 Tak. 956 00:47:39,120 --> 00:47:39,850 Niestety, jak się nazywasz? 957 00:47:39,850 --> 00:47:40,580 >> LUCY: Lucy. 958 00:47:40,580 --> 00:47:41,580 >> JASON Hirschhorn: Lucy. 959 00:47:41,580 --> 00:47:47,560 >> LUCY: fclose src, a następnie fclose przeznaczenia. 960 00:47:47,560 --> 00:47:52,430 >> JASON Hirschhorn: fclose, otwarty nawias, src, zamknij nawias, średnik. 961 00:47:52,430 --> 00:47:53,680 I fclose - 962 00:47:53,680 --> 00:47:57,560 963 00:47:57,560 --> 00:47:58,090 tak? 964 00:47:58,090 --> 00:48:01,710 >> LUCY: Open nawiasy, dst i średnik. 965 00:48:01,710 --> 00:48:02,520 >> JASON Hirschhorn: Świetnie. 966 00:48:02,520 --> 00:48:04,338 I co mam m.in. na końcu? 967 00:48:04,338 --> 00:48:05,210 >> LUCY: return 0. 968 00:48:05,210 --> 00:48:05,570 >> JASON Hirschhorn: return 0. 969 00:48:05,570 --> 00:48:06,820 Czy muszę? 970 00:48:06,820 --> 00:48:10,560 971 00:48:10,560 --> 00:48:12,590 Tylko pytanie. 972 00:48:12,590 --> 00:48:14,957 Czy mamy do włączenia return 0? 973 00:48:14,957 --> 00:48:16,240 >> WIELU STUDENCI: No 974 00:48:16,240 --> 00:48:16,430 >> JASON Hirschhorn: Nie. 975 00:48:16,430 --> 00:48:18,090 Głównym robi to automatycznie jeśli się do końca. 976 00:48:18,090 --> 00:48:20,580 Ale myślę, że to miło obejmuje to wyraźnie. 977 00:48:20,580 --> 00:48:23,860 Zwłaszcza, gdy mamy do powrotu inne rzeczy w całym programie. 978 00:48:23,860 --> 00:48:24,810 OK. 979 00:48:24,810 --> 00:48:26,230 To jest to, czego brakuje - 980 00:48:26,230 --> 00:48:28,520 Natomiast to, co? 981 00:48:28,520 --> 00:48:31,630 Którzy mogą myśleć niektórzy - 982 00:48:31,630 --> 00:48:35,240 ma jakiś sens, jakie rzeczy może tam wejść? 983 00:48:35,240 --> 00:48:37,350 Nawet jeśli jest to tylko w niektórych Pseudokod jak język? 984 00:48:37,350 --> 00:48:41,330 >> Jakie są naprawdę - co chcemy, aby przejść do czasu? 985 00:48:41,330 --> 00:48:41,980 Tak, Lucy. 986 00:48:41,980 --> 00:48:43,240 >> LUCY: koniec pliku. 987 00:48:43,240 --> 00:48:44,990 >> JASON Hirschhorn: koniec pliku. 988 00:48:44,990 --> 00:48:49,280 Więc co masz na myśli koniec pliku? 989 00:48:49,280 --> 00:48:50,955 >> LUCY: Po osiągnięciu koniec pliku, stop. 990 00:48:50,955 --> 00:48:51,240 >> JASON Hirschhorn: OK. 991 00:48:51,240 --> 00:48:53,460 Więc gdy dotrzemy do końca pliku. 992 00:48:53,460 --> 00:48:56,893 Skąd mamy wiedzieć, kiedy dotarliśmy koniec pliku? 993 00:48:56,893 --> 00:48:59,900 >> UCZEŃ 40: Myślę, że bufor zostanie ustawiony na NULL. 994 00:48:59,900 --> 00:49:01,885 >> UCZEŃ 41: Bufor jest zadeklarowana wewnątrz pętli. 995 00:49:01,885 --> 00:49:03,670 >> JASON Hirschhorn: Więc myślisz bufor zostanie ustawiony na NULL. 996 00:49:03,670 --> 00:49:05,850 Dlaczego bufor być ustawiony na NULL? 997 00:49:05,850 --> 00:49:10,420 >> UCZEŃ 40: Bo kiedy fread, starasz się położyć 998 00:49:10,420 --> 00:49:13,528 nic do buforu. 999 00:49:13,528 --> 00:49:13,980 >> JASON Hirschhorn: OK. 1000 00:49:13,980 --> 00:49:15,550 Więc myślisz fread - 1001 00:49:15,550 --> 00:49:19,000 kiedy dotarliśmy do końca plików, co jest fread zrobić? 1002 00:49:19,000 --> 00:49:21,230 Myślę, że to pytanie musimy się dowiedzieć. 1003 00:49:21,230 --> 00:49:21,960 Co fread zrobić? 1004 00:49:21,960 --> 00:49:25,640 Czy umieścić NULL w buforze, lub to coś innego? 1005 00:49:25,640 --> 00:49:27,510 Jak możemy dowiedzieć się, co to jest? 1006 00:49:27,510 --> 00:49:28,190 >> UCZEŃ 42: Człowiek. 1007 00:49:28,190 --> 00:49:28,810 >> JASON Hirschhorn: Człowiek. 1008 00:49:28,810 --> 00:49:32,280 Więc spójrzmy tutaj. 1009 00:49:32,280 --> 00:49:34,000 Zwracana wartość. 1010 00:49:34,000 --> 00:49:39,620 Na sukces, fread i fwrite powrót liczba elementów odczytywane lub zapisywane. 1011 00:49:39,620 --> 00:49:43,700 Ta liczba odpowiada liczbie bajtów przekazywane jedynie wtedy, gdy rozmiar jest 1. 1012 00:49:43,700 --> 00:49:47,780 Jeśli wystąpi błąd, lub koniec plik został osiągnięty, zwracana jest wartość 1013 00:49:47,780 --> 00:49:51,490 krótki Ilość pozycji lub 0. 1014 00:49:51,490 --> 00:49:57,860 >> Więc dla naszych celów, jeśli fread biegu koniec pliku i odczytuje z 1015 00:49:57,860 --> 00:50:02,100 koniec pliku, nie ma nic czytać, co idzie do powrotu? 1016 00:50:02,100 --> 00:50:03,290 >> UCZEŃ 43: Zero? 1017 00:50:03,290 --> 00:50:04,540 >> JASON Hirschhorn: Co? 1018 00:50:04,540 --> 00:50:05,300 >> UCZEŃ 43: Zero? 1019 00:50:05,300 --> 00:50:05,690 >> JASON Hirschhorn: zero. 1020 00:50:05,690 --> 00:50:06,940 To będzie powrót do zera. 1021 00:50:06,940 --> 00:50:09,360 1022 00:50:09,360 --> 00:50:13,010 Wiemy, że fread, gdy mamy osiągnął koniec pliku, będzie 1023 00:50:13,010 --> 00:50:13,690 , aby powrócić do zera. 1024 00:50:13,690 --> 00:50:17,460 Jak możemy wykorzystać, że na naszą korzyść? 1025 00:50:17,460 --> 00:50:21,733 >> AVI: Możesz zadeklarować zmienną poza pętli zwanej wyboru. 1026 00:50:21,733 --> 00:50:27,040 Jeśli kontrola jest równy - 1027 00:50:27,040 --> 00:50:28,190 na razie - jeden. 1028 00:50:28,190 --> 00:50:28,920 >> JASON Hirschhorn: OK. 1029 00:50:28,920 --> 00:50:38,050 >> AVI: A potem można umieścić IF Oświadczenie rację mówiąc, jeśli po fread 1030 00:50:38,050 --> 00:50:42,600 fread jest równa zeru - 1031 00:50:42,600 --> 00:50:43,850 nie. 1032 00:50:43,850 --> 00:50:46,002 1033 00:50:46,002 --> 00:50:47,252 >> JASON Hirschhorn: Kto Avi na zewnątrz może pomóc? 1034 00:50:47,252 --> 00:50:49,690 1035 00:50:49,690 --> 00:50:52,410 >> AVI: Co jest wartość zwrócony przez fread? 1036 00:50:52,410 --> 00:50:54,060 >> JASON Hirschhorn: Po prostu Podszedłem, że. 1037 00:50:54,060 --> 00:50:55,450 >> AVI: Jak przedstawiają to? 1038 00:50:55,450 --> 00:50:57,190 >> JASON Hirschhorn: Więc to wraca - Zróbmy spójrz tutaj - zwraca 1039 00:50:57,190 --> 00:50:59,340 int, który jest zasadniczo całkowita. 1040 00:50:59,340 --> 00:51:02,240 1041 00:51:02,240 --> 00:51:03,410 Dlatego zwraca liczbę całkowitą. 1042 00:51:03,410 --> 00:51:05,160 A w naszym przypadku, to będzie zwraca 1 lub 0 - 1043 00:51:05,160 --> 00:51:08,760 1, jeżeli czytać jedno - jeden bajt, i 0, jeśli już dobiega końca. 1044 00:51:08,760 --> 00:51:13,560 1045 00:51:13,560 --> 00:51:16,450 Więc jeśli fread - 1046 00:51:16,450 --> 00:51:16,855 tak? 1047 00:51:16,855 --> 00:51:20,330 >> UCZEŃ 45: Nie możesz po prostu umieścić w pełnym fread (bufor, 1, 1, src) do 1048 00:51:20,330 --> 00:51:21,660 pętla? 1049 00:51:21,660 --> 00:51:26,510 >> JASON Hirschhorn: Więc proponuję robi to na nie? 1050 00:51:26,510 --> 00:51:27,600 >> [GŁOSY wstawienie] 1051 00:51:27,600 --> 00:51:29,520 >> JASON Hirschhorn: Trzymaj się. 1052 00:51:29,520 --> 00:51:30,885 Więc jesteśmy pozbawienie tego. 1053 00:51:30,885 --> 00:51:33,300 Więc proponuje wprowadzenie do fread nie? 1054 00:51:33,300 --> 00:51:35,457 Co powinniśmy również poruszać jeśli chcesz to zrobić? 1055 00:51:35,457 --> 00:51:36,740 >> UCZEŃ 45: bufor na zewnątrz. 1056 00:51:36,740 --> 00:51:38,110 >> JASON Hirschhorn: Powinniśmy również przenieść to tutaj. 1057 00:51:38,110 --> 00:51:41,700 >> UCZEŃ 45: Ale nie, że ciągle przesunąć go do przodu? 1058 00:51:41,700 --> 00:51:42,950 >> [GŁOSY wstawienie] 1059 00:51:42,950 --> 00:51:46,540 1060 00:51:46,540 --> 00:51:47,470 >> JASON Hirschhorn: OK. 1061 00:51:47,470 --> 00:51:50,570 Więc to jest to, co zaproponował Okshar. 1062 00:51:50,570 --> 00:51:51,930 Tworzymy bufor. 1063 00:51:51,930 --> 00:51:57,020 Mamy PODCZAS fread, następnie fwrite. 1064 00:51:57,020 --> 00:51:59,760 Myśli o tym? 1065 00:51:59,760 --> 00:52:04,050 >> UCZEŃ 46: Moje pytanie tylko, by faktycznie wykonać fread polecenia? 1066 00:52:04,050 --> 00:52:06,175 >> JASON Hirschhorn: Wielki znak zapytania. 1067 00:52:06,175 --> 00:52:11,050 Kiedy jesteś wprowadzenie wywołania funkcji wewnątrz warunkiem, że nie 1068 00:52:11,050 --> 00:52:12,300 Wywołanie funkcji wykonać? 1069 00:52:12,300 --> 00:52:15,760 1070 00:52:15,760 --> 00:52:17,770 Widzieliśmy już przykłady tego wcześniej. 1071 00:52:17,770 --> 00:52:24,900 1072 00:52:24,900 --> 00:52:25,660 Prawda? 1073 00:52:25,660 --> 00:52:26,125 >> UCZEŃ 46: OK. 1074 00:52:26,125 --> 00:52:26,590 Tak. 1075 00:52:26,590 --> 00:52:30,140 Więc to nie wykona. 1076 00:52:30,140 --> 00:52:31,790 >> JASON Hirschhorn: Widzieliśmy rzeczy tak przed, w których mamy 1077 00:52:31,790 --> 00:52:33,550 wywołanie funkcji wewnątrz warunku. 1078 00:52:33,550 --> 00:52:35,540 Oznacza, że ​​wywołanie funkcji wykonać? 1079 00:52:35,540 --> 00:52:36,350 Tak. 1080 00:52:36,350 --> 00:52:37,410 Więc odpowiedź brzmi: tak. 1081 00:52:37,410 --> 00:52:41,010 To wywołanie funkcji wykona. 1082 00:52:41,010 --> 00:52:42,418 Ale znowu, jest to, co chcemy? 1083 00:52:42,418 --> 00:52:49,250 1084 00:52:49,250 --> 00:52:52,204 >> Co to jest jeden sposób możemy dowiedzieć się, czy to jest to, co chcemy? 1085 00:52:52,204 --> 00:52:53,470 >> WIELU STUDENCI: Uruchom go? 1086 00:52:53,470 --> 00:52:54,460 >> JASON Hirschhorn: Możemy go uruchomić. 1087 00:52:54,460 --> 00:52:57,500 Ale zanim to zrobimy, mogliśmy również rozumieć przez to. 1088 00:52:57,500 --> 00:52:57,920 Jeśli - 1089 00:52:57,920 --> 00:53:01,920 że mamy jeden bajt w naszym plik, my się do tego, 1090 00:53:01,920 --> 00:53:02,660 my się do tego kodu. 1091 00:53:02,660 --> 00:53:03,620 Będzie to działać. 1092 00:53:03,620 --> 00:53:07,780 fread zwraca jeden bajt i przechowywać go w buforze. 1093 00:53:07,780 --> 00:53:11,290 I będzie to ocenić na 1, Dobrze, że wraca po 1. 1094 00:53:11,290 --> 00:53:12,640 >> Tak więc, 1. 1095 00:53:12,640 --> 00:53:15,325 Czy to oznacza, że ​​kod wewnątrz pętli while wykona? 1096 00:53:15,325 --> 00:53:15,453 >> UCZEŃ 47: Tak. 1097 00:53:15,453 --> 00:53:16,040 To prawda. 1098 00:53:16,040 --> 00:53:16,290 >> JASON Hirschhorn: Tak. 1099 00:53:16,290 --> 00:53:17,490 1, jest prawdą. 1100 00:53:17,490 --> 00:53:18,240 To nie jest 0. 1101 00:53:18,240 --> 00:53:20,360 Więc kod wewnątrz tutaj wykona. 1102 00:53:20,360 --> 00:53:22,300 Tak będziemy pisać, że. 1103 00:53:22,300 --> 00:53:25,340 Będziemy wrócić do tego linia po raz kolejny. 1104 00:53:25,340 --> 00:53:26,850 Teraz mamy - 1105 00:53:26,850 --> 00:53:28,550 jesteśmy na końcu naszego pliku. 1106 00:53:28,550 --> 00:53:30,980 Czytamy od końca naszego pliku, ponieważ mieliśmy tylko jeden bajt w nim. 1107 00:53:30,980 --> 00:53:34,270 >> Fread zwraca 0, sklepy coś w buforze. 1108 00:53:34,270 --> 00:53:35,890 Szczerze mówiąc, nie wiem, co przechowuje w buforze. 1109 00:53:35,890 --> 00:53:38,380 Moglibyśmy prawdopodobnie patrzeć aby zobaczyć, co robi. 1110 00:53:38,380 --> 00:53:40,130 Że szczerze mówiąc nie wiem. 1111 00:53:40,130 --> 00:53:43,090 Nie wiemy, kogo to obchodzi, co przechowuje się w buforze? 1112 00:53:43,090 --> 00:53:44,010 Ale to nie zwraca 0. 1113 00:53:44,010 --> 00:53:45,440 I podczas gdy 0 wykonać? 1114 00:53:45,440 --> 00:53:49,950 1115 00:53:49,950 --> 00:53:51,180 >> PODCZAS 0 nie wykona. 1116 00:53:51,180 --> 00:53:54,030 Więc my przenieść tutaj. 1117 00:53:54,030 --> 00:53:58,870 Więc przejdźmy pokaz ręce, czy to jest kod należy uruchomić, lub jeśli 1118 00:53:58,870 --> 00:54:00,140 należy zrobić w pierwszej kolejności zmiany. 1119 00:54:00,140 --> 00:54:02,180 Więc jeśli uważasz, że - trzeba głosować. 1120 00:54:02,180 --> 00:54:06,885 Jeśli uważasz, że powinniśmy ten kod jak jest, proszę podnieść rękę. 1121 00:54:06,885 --> 00:54:12,440 1122 00:54:12,440 --> 00:54:13,400 >> OK. 1123 00:54:13,400 --> 00:54:14,315 Jest jedna - 1124 00:54:14,315 --> 00:54:17,260 masz pytanie, wątpliwości? 1125 00:54:17,260 --> 00:54:18,080 Tak. 1126 00:54:18,080 --> 00:54:21,240 >> UCZEŃ 48: Po ruszamy bufor zewnątrz pętli, mamy 1127 00:54:21,240 --> 00:54:22,670 trzeba go malloc? 1128 00:54:22,670 --> 00:54:23,310 >> JASON Hirschhorn: Wielki znak zapytania. 1129 00:54:23,310 --> 00:54:26,670 Po ruszamy poza bufor pętli, musimy go malloc? 1130 00:54:26,670 --> 00:54:28,400 To jest pytanie, zakres. 1131 00:54:28,400 --> 00:54:32,130 Jeśli bufor poza zainicjować tej pętli, to istnieją 1132 00:54:32,130 --> 00:54:33,534 wewnątrz pętli? 1133 00:54:33,534 --> 00:54:35,230 >> WIELU STUDENCI: Tak. 1134 00:54:35,230 --> 00:54:35,580 >> JASON Hirschhorn: Tak. 1135 00:54:35,580 --> 00:54:40,100 Jej zakres obejmuje wewnątrz pętli, i, tak naprawdę, to w środku coś poniżej 1136 00:54:40,100 --> 00:54:42,460 tego kodu, w tym rzeczy wewnątrz tutaj. 1137 00:54:42,460 --> 00:54:43,930 Więc nie trzeba go malloc. 1138 00:54:43,930 --> 00:54:47,766 Jest to zmienna lokalna, a jej zakres nadal zawiera pętli. 1139 00:54:47,766 --> 00:54:49,540 >> UCZEŃ 49: Czy musimy ją uwolnić? 1140 00:54:49,540 --> 00:54:51,770 >> JASON Hirschhorn: czy trzeba wolnego bufora? 1141 00:54:51,770 --> 00:54:53,860 >> UCZEŃ 49: Tak, jeśli tego nie zrobimy malloc. 1142 00:54:53,860 --> 00:54:55,750 >> JASON Hirschhorn: czy trzeba wolnego bufora? 1143 00:54:55,750 --> 00:54:57,160 Nie. 1144 00:54:57,160 --> 00:55:01,280 Ponownie, jest to zmienna lokalny więc nie trzeba go uwolnić. 1145 00:55:01,280 --> 00:55:02,170 OK. 1146 00:55:02,170 --> 00:55:03,480 Zobaczmy, co się dzieje. 1147 00:55:03,480 --> 00:55:17,290 1148 00:55:17,290 --> 00:55:18,220 Tak to jest niezainicjowanego. 1149 00:55:18,220 --> 00:55:20,830 To było coś, co Marcus zaproponował wcześniej. 1150 00:55:20,830 --> 00:55:25,340 Tak, że mamy zmienną bufor błędów, jest stosowany tutaj niezainicjowany. 1151 00:55:25,340 --> 00:55:26,590 >> Jak możemy rozwiązać ten problem? 1152 00:55:26,590 --> 00:55:29,460 1153 00:55:29,460 --> 00:55:30,960 >> UCZEŃ 50: malloc to? 1154 00:55:30,960 --> 00:55:31,770 >> UCZEŃ 51: Równa NULL? 1155 00:55:31,770 --> 00:55:33,000 >> UCZEŃ 52: Powiedz bufora równa NULL. 1156 00:55:33,000 --> 00:55:34,250 >> JASON Hirschhorn: OK. 1157 00:55:34,250 --> 00:55:40,040 1158 00:55:40,040 --> 00:55:40,770 Wygląda dobrze. 1159 00:55:40,770 --> 00:55:42,410 Musimy go teraz. 1160 00:55:42,410 --> 00:55:45,630 Stwórzmy coś spróbować kopiowanie. 1161 00:55:45,630 --> 00:56:08,990 1162 00:56:08,990 --> 00:56:10,490 Więc mamy plik tekstowy. 1163 00:56:10,490 --> 00:56:11,740 Jak możemy uruchomić ten program? 1164 00:56:11,740 --> 00:56:14,140 1165 00:56:14,140 --> 00:56:15,472 Tak. 1166 00:56:15,472 --> 00:56:22,230 >> UCZEŃ 53: Możesz zrobić kropkę slash CP Test.txt. 1167 00:56:22,230 --> 00:56:25,140 A następnie można wymienić inny plik , które przechowuje się. 1168 00:56:25,140 --> 00:56:25,510 >> JASON Hirschhorn: OK. 1169 00:56:25,510 --> 00:56:27,380 Nazwijmy go out.txt. 1170 00:56:27,380 --> 00:56:28,630 Fajne? 1171 00:56:28,630 --> 00:56:31,700 1172 00:56:31,700 --> 00:56:34,320 Usterka Seg. 1173 00:56:34,320 --> 00:56:35,570 Refleksje na temat winy segmencie? 1174 00:56:35,570 --> 00:56:40,900 1175 00:56:40,900 --> 00:56:41,390 To jest świetne. 1176 00:56:41,390 --> 00:56:45,040 Jak możemy dowiedzieć się, gdzie wina SEG jest? 1177 00:56:45,040 --> 00:56:45,680 Co? 1178 00:56:45,680 --> 00:56:45,990 >> UCZEŃ 54: GDB. 1179 00:56:45,990 --> 00:56:47,240 >> JASON Hirschhorn: GDB. 1180 00:56:47,240 --> 00:56:51,400 1181 00:56:51,400 --> 00:56:55,300 Możemy uruchomić gdb pisząc gdb dot ukośnik, Nazwa naszego programu. 1182 00:56:55,300 --> 00:56:57,020 Tam żadne argumenty wiersza poleceń. 1183 00:56:57,020 --> 00:56:59,570 Jedziemy do ustaw przerwania na Głównym. 1184 00:56:59,570 --> 00:57:02,190 Jeśli chcę zacząć gdb, co mam zrobić? 1185 00:57:02,190 --> 00:57:02,730 >> UCZEŃ 55: R. 1186 00:57:02,730 --> 00:57:08,910 >> JASON Hirschhorn: R. I co wtedy? 1187 00:57:08,910 --> 00:57:09,400 >> UCZEŃ 55: Argumenty? 1188 00:57:09,400 --> 00:57:10,650 >> JASON Hirschhorn: Wtedy Argumenty wiersza polecenia. 1189 00:57:10,650 --> 00:57:15,890 1190 00:57:15,890 --> 00:57:17,120 Prześledźmy. 1191 00:57:17,120 --> 00:57:19,090 N jest tylko przy mnie wiersz po wierszu. 1192 00:57:19,090 --> 00:57:21,450 Mam zamiar iść do dnia Mam moja wina seg. 1193 00:57:21,450 --> 00:57:22,700 Nie moja wina, SEG. 1194 00:57:22,700 --> 00:57:24,960 1195 00:57:24,960 --> 00:57:27,875 Wygląda na to, fread spowodowane moja wina SEG. 1196 00:57:27,875 --> 00:57:30,570 1197 00:57:30,570 --> 00:57:32,770 Wiem fread spowodowane moja wina seg, dlatego, że był 1198 00:57:32,770 --> 00:57:34,950 Linia właśnie wykonywane. 1199 00:57:34,950 --> 00:57:36,530 >> I jedyną rzeczą, która była dzieje się w tej linii - 1200 00:57:36,530 --> 00:57:37,520 Dwie rzeczy były dzieje. 1201 00:57:37,520 --> 00:57:40,610 Fread się dzieje, a potem byliśmy jakiejś kontroli czasu. 1202 00:57:40,610 --> 00:57:44,820 Jestem gotów się założyć, że PODCZAS kontroli nie był przyczyną mojej winy seg. 1203 00:57:44,820 --> 00:57:46,950 Najprawdopodobniej był fread powodując moja wina seg. 1204 00:57:46,950 --> 00:57:49,260 Widzę też coś tutaj, memcopy. 1205 00:57:49,260 --> 00:57:50,500 >> Kopia pamięci. 1206 00:57:50,500 --> 00:57:53,820 Brzmi jak przenoszenie z pamięci jednej lokalizacji do drugiej. 1207 00:57:53,820 --> 00:57:56,890 Brzmi jak coś, co by się stało w fread, być może niektóre pamięci 1208 00:57:56,890 --> 00:57:58,910 porusza się stąd tutaj. 1209 00:57:58,910 --> 00:58:01,740 1210 00:58:01,740 --> 00:58:03,860 Idziemy przez to jeszcze raz. 1211 00:58:03,860 --> 00:58:06,900 Jak uruchomić to na i uruchomić go ponownie? 1212 00:58:06,900 --> 00:58:08,092 Tak. 1213 00:58:08,092 --> 00:58:15,140 >> UCZEŃ 56: Czy należy umieścić Ampersand przed buforem? 1214 00:58:15,140 --> 00:58:17,800 >> JASON Hirschhorn: Więc Ampersand przed bufor da mi adres 1215 00:58:17,800 --> 00:58:22,330 bufor, który jest char *. 1216 00:58:22,330 --> 00:58:25,250 Przyjrzyjmy się przez to jeszcze raz. 1217 00:58:25,250 --> 00:58:28,248 Jak uruchomić przez to jeszcze raz? 1218 00:58:28,248 --> 00:58:29,210 >> UCZEŃ 57: można po prostu wpisz Uruchom ponownie? 1219 00:58:29,210 --> 00:58:32,050 >> JASON Hirschhorn: Wystarczy wpisać uruchomić ponownie. 1220 00:58:32,050 --> 00:58:33,415 Więc my nie będziemy wykonać tę linię. 1221 00:58:33,415 --> 00:58:36,250 1222 00:58:36,250 --> 00:58:39,240 Więc bufor jest wskaźnikiem NULL. 1223 00:58:39,240 --> 00:58:40,490 Poprawić? 1224 00:58:40,490 --> 00:58:45,870 1225 00:58:45,870 --> 00:58:47,060 To wskazuje na to - zobaczmy. 1226 00:58:47,060 --> 00:58:48,500 Jeśli mamy nasz - 1227 00:58:48,500 --> 00:58:50,430 narysować szybki obraz tego. 1228 00:58:50,430 --> 00:58:53,500 Czy każdy może sprawdzić, czy Piszę tutaj? 1229 00:58:53,500 --> 00:59:02,890 >> Więc w stosie, mamy lokalny Zmienna i to się nazywa bufor, i 1230 00:59:02,890 --> 00:59:08,230 jest to wskaźnik do char. 1231 00:59:08,230 --> 00:59:10,325 Co to jest adres char co? 1232 00:59:10,325 --> 00:59:12,550 >> UCZEŃ 58: 0x0. 1233 00:59:12,550 --> 00:59:13,400 >> JASON Hirschhorn: Prawo. 1234 00:59:13,400 --> 00:59:14,200 To jest to, co to jest. 1235 00:59:14,200 --> 00:59:17,600 Tu, wewnątrz bufora, jest przechowywany 0x0. 1236 00:59:17,600 --> 00:59:20,480 To jest to, co mamy - Konfiguracja mamy teraz. 1237 00:59:20,480 --> 00:59:27,540 Tak więc ta linia, fread, wrzuca coś od źródła, gdzie? 1238 00:59:27,540 --> 00:59:30,560 W tym polu lub w tym pudełku? 1239 00:59:30,560 --> 00:59:31,060 Które pole? 1240 00:59:31,060 --> 00:59:33,290 W lewo lub w prawo pole pole? 1241 00:59:33,290 --> 00:59:34,750 Prawo to okno. 1242 00:59:34,750 --> 00:59:38,440 >> Wynika z tego wskaźnika, i umieszcza go w tutaj. 1243 00:59:38,440 --> 00:59:42,620 Kiedy próbujemy i dotyk na pamięć położenie 0, co mamy? 1244 00:59:42,620 --> 00:59:45,050 Błędu segmentacji. 1245 00:59:45,050 --> 00:59:46,550 To jest błąd mamy teraz. 1246 00:59:46,550 --> 00:59:46,970 Tak. 1247 00:59:46,970 --> 00:59:48,410 >> UCZEŃ 59: Nie masz umieścić bufor gwiazda? 1248 00:59:48,410 --> 00:59:49,180 Czy nie? 1249 00:59:49,180 --> 00:59:50,050 Dla fread? 1250 00:59:50,050 --> 00:59:51,450 >> JASON Hirschhorn: Więc fread trwa wskaźnik. 1251 00:59:51,450 --> 00:59:54,920 1252 00:59:54,920 --> 00:59:55,900 Więc przechodzi ona w buforze. 1253 00:59:55,900 --> 00:59:58,980 A następnie będzie to de-odniesienia to gdzieś wewnątrz fread. 1254 00:59:58,980 --> 01:00:00,700 Ale znowu, widzieliśmy, że ma wskaźnik. 1255 01:00:00,700 --> 01:00:02,560 Nie trzeba przekazać mu gwiazda bufor. 1256 01:00:02,560 --> 01:00:05,350 Że byłoby przepuszczenie to, co jest tutaj. 1257 01:00:05,350 --> 01:00:07,980 I że prawdopodobnie da nam błąd bo my de-odwołanie go. 1258 01:00:07,980 --> 01:00:08,150 >> Prawda? 1259 01:00:08,150 --> 01:00:10,690 Ten wskaźnik, gdy odniesienie DE, gdy staramy się uzyskać dostęp do tej lokalizacji, 1260 01:00:10,690 --> 01:00:13,140 dostajemy błąd - nasza wina segmentacja. 1261 01:00:13,140 --> 01:00:15,800 Tak - 1262 01:00:15,800 --> 01:00:16,690 Ups. 1263 01:00:16,690 --> 01:00:19,090 Zamierzamy wyjść z gdb. 1264 01:00:19,090 --> 01:00:20,160 Nasza linia - 1265 01:00:20,160 --> 01:00:22,990 nasz problem - ma rację tutaj na tej linii. 1266 01:00:22,990 --> 01:00:26,410 I to jest problem, ponieważ tej linii. 1267 01:00:26,410 --> 01:00:31,780 >> Jak możemy utworzyć pole, które dostępny jest w fread. 1268 01:00:31,780 --> 01:00:31,980 Prawda? 1269 01:00:31,980 --> 01:00:35,190 Musimy utworzyć pole, które jest jednym Bajt duży rozmiar odbarwiającego. 1270 01:00:35,190 --> 01:00:38,590 Ale musimy to pole, aby były dostępne Gdy ta funkcja wykonuje. 1271 01:00:38,590 --> 01:00:39,390 Więc gdzie - 1272 01:00:39,390 --> 01:00:39,640 tak. 1273 01:00:39,640 --> 01:00:40,440 Jakieś pomysły? 1274 01:00:40,440 --> 01:00:43,615 >> UCZEŃ 60: Wystarczy ustawić go jako dowolny losowy charakter. 1275 01:00:43,615 --> 01:00:49,150 1276 01:00:49,150 --> 01:00:51,640 Wystarczy zrobić Char Równa buforze charakter. 1277 01:00:51,640 --> 01:00:53,795 A potem, kiedy już tam bufor - 1278 01:00:53,795 --> 01:00:54,110 >> JASON Hirschhorn: Czekaj. 1279 01:00:54,110 --> 01:00:55,110 Char bufor? 1280 01:00:55,110 --> 01:00:55,880 Więc nie gwiazda? 1281 01:00:55,880 --> 01:00:56,390 >> UCZEŃ 60: Tak. 1282 01:00:56,390 --> 01:00:58,560 Wyjąć gwiazdę. 1283 01:00:58,560 --> 01:01:00,690 Równa przypadkowy charakter. 1284 01:01:00,690 --> 01:01:01,460 >> JASON Hirschhorn: OK. 1285 01:01:01,460 --> 01:01:02,420 Więc daj mi jedną. 1286 01:01:02,420 --> 01:01:03,170 >> UCZEŃ 60: Jak lub coś. 1287 01:01:03,170 --> 01:01:06,160 I wtedy, gdy masz bufor tam, używasz - 1288 01:01:06,160 --> 01:01:06,420 >> UCZEŃ 61: Star? 1289 01:01:06,420 --> 01:01:07,650 O nie, Ampersand. 1290 01:01:07,650 --> 01:01:09,000 >> UCZEŃ 60: Użycie znaku handlowego. 1291 01:01:09,000 --> 01:01:09,470 >> JASON Hirschhorn: OK. 1292 01:01:09,470 --> 01:01:11,320 A co w fwrite? 1293 01:01:11,320 --> 01:01:14,150 >> UCZEŃ 60: ponownie użyć znaku handlowego. 1294 01:01:14,150 --> 01:01:14,320 >> JASON Hirschhorn: Dobrze. 1295 01:01:14,320 --> 01:01:20,970 Więc twój pomysł jest, tworzymy i char umieścić coś w nim, a następnie 1296 01:01:20,970 --> 01:01:22,612 Napisać do tego char. 1297 01:01:22,612 --> 01:01:23,760 >> UCZEŃ 60: Tak. 1298 01:01:23,760 --> 01:01:25,916 >> JASON Hirschhorn: Co ludzie myślą? 1299 01:01:25,916 --> 01:01:27,770 >> UCZEŃ 62: To zawiłe. 1300 01:01:27,770 --> 01:01:28,460 >> JASON Hirschhorn: OK. 1301 01:01:28,460 --> 01:01:29,760 Miejmy wyciągnąć go. 1302 01:01:29,760 --> 01:01:35,720 Więc tym razem, mam zamiar wyciągnąć to w czerwony na stosie tutaj, a potem 1303 01:01:35,720 --> 01:01:36,410 będzie miał - 1304 01:01:36,410 --> 01:01:36,822 ooh! 1305 01:01:36,822 --> 01:01:38,060 Przepraszam. 1306 01:01:38,060 --> 01:01:45,930 Więc tym razem mamy coś, co nazywa bufor, i to na stosie. 1307 01:01:45,930 --> 01:01:48,430 Poprawić? 1308 01:01:48,430 --> 01:01:51,520 I jesteśmy w niej oszczędności, początkowo. 1309 01:01:51,520 --> 01:01:53,830 >> Następnie mamy wywołanie fread. 1310 01:01:53,830 --> 01:02:01,300 Co fread nie jest potrzebny bajt z nasz plik i umieszcza go gdzieś. 1311 01:02:01,300 --> 01:02:04,570 To stawia go w jakikolwiek rzeczą jest wskazując. 1312 01:02:04,570 --> 01:02:09,130 Cóż, zanim mieliśmy ten adres - 1313 01:02:09,130 --> 01:02:10,250 0x0. 1314 01:02:10,250 --> 01:02:13,349 Teraz jaki adres mamy? 1315 01:02:13,349 --> 01:02:14,650 >> UCZEŃ 63: Cokolwiek bufor adres. 1316 01:02:14,650 --> 01:02:15,970 >> JASON Hirschhorn: Cokolwiek bufor adres. 1317 01:02:15,970 --> 01:02:22,370 To prawdopodobnie będzie coś w tym stylu. 1318 01:02:22,370 --> 01:02:26,950 Prawdopodobnie będzie zacząć bi f, a następnie mają sześć innych 1319 01:02:26,950 --> 01:02:27,970 cyfr szesnastkowych. 1320 01:02:27,970 --> 01:02:28,480 Nie ma znaczenia. 1321 01:02:28,480 --> 01:02:29,470 Niektóre adres. 1322 01:02:29,470 --> 01:02:31,410 I przekazujemy ten adres w. 1323 01:02:31,410 --> 01:02:34,790 >> I mamy zamiar umieścić nasz jeden bajt, co pod tym adresem. 1324 01:02:34,790 --> 01:02:38,470 Więc mamy zamiar umieścić nasz jeden bajt rzeczą wewnątrz tutaj. 1325 01:02:38,470 --> 01:02:40,800 A potem będziemy pisać od co jest zawsze wewnątrz tutaj. 1326 01:02:40,800 --> 01:02:43,425 1327 01:02:43,425 --> 01:02:45,380 Czy ktoś ma jakieś pytania o tym? 1328 01:02:45,380 --> 01:02:50,990 1329 01:02:50,990 --> 01:02:54,690 Kto myśli, że to zadziała? 1330 01:02:54,690 --> 01:02:56,020 >> Podnieś rękę, jeśli uważasz, że kod ten będzie działać. 1331 01:02:56,020 --> 01:02:57,270 Trzeba zająć stanowisko. 1332 01:02:57,270 --> 01:03:00,670 1333 01:03:00,670 --> 01:03:02,500 A kto myśli, ten kod nie działa? 1334 01:03:02,500 --> 01:03:04,610 Podnieś rękę. 1335 01:03:04,610 --> 01:03:06,750 Wszyscy powinni być podniesienie ręki. 1336 01:03:06,750 --> 01:03:07,670 OK. 1337 01:03:07,670 --> 01:03:09,390 Michael, gdzie stoisz? 1338 01:03:09,390 --> 01:03:10,680 >> Michael: Nie mogę się zdecydować. 1339 01:03:10,680 --> 01:03:12,070 Jakby w środku. 1340 01:03:12,070 --> 01:03:12,736 >> JASON Hirschhorn: Jesteś w środku. 1341 01:03:12,736 --> 01:03:13,092 Wybierz jedną. 1342 01:03:13,092 --> 01:03:14,400 >> MICHAEL: Będę mieć wiarę i powiedzieć, to będzie działać. 1343 01:03:14,400 --> 01:03:14,660 >> JASON Hirschhorn: OK. 1344 01:03:14,660 --> 01:03:16,047 Będziesz mieć wiarę i powiedzieć, że to działa? 1345 01:03:16,047 --> 01:03:26,490 1346 01:03:26,490 --> 01:03:27,020 Co się stało? 1347 01:03:27,020 --> 01:03:28,270 >> [GŁOSY wstawienie] 1348 01:03:28,270 --> 01:03:35,170 1349 01:03:35,170 --> 01:03:35,950 >> JASON Hirschhorn: Nie wina SEG. 1350 01:03:35,950 --> 01:03:40,320 Jak możemy sprawdzić, czy dwie rzeczy są równe? 1351 01:03:40,320 --> 01:03:42,060 Dwa pliki są równe. 1352 01:03:42,060 --> 01:03:43,300 >> UCZEŃ 64: Diff. 1353 01:03:43,300 --> 01:03:45,490 >> JASON Hirschhorn: Diff. 1354 01:03:45,490 --> 01:03:51,630 Różnica sprawdza różnice między dwa pliki, a jeżeli wraca 1355 01:03:51,630 --> 01:03:52,890 nic, że są identyczne. 1356 01:03:52,890 --> 01:03:59,030 A jeśli otwieramy, mamy nasz plik. 1357 01:03:59,030 --> 01:04:00,490 Więc to było właściwe rozwiązanie. 1358 01:04:00,490 --> 01:04:01,780 Spójrzmy wstecz na to jeszcze raz. 1359 01:04:01,780 --> 01:04:04,080 Właściwie nawet nie trzeba go zainicjować. 1360 01:04:04,080 --> 01:04:05,520 >> To będzie prawdopodobnie wyglądać trochę czystsze, jeśli nie szuka 1361 01:04:05,520 --> 01:04:07,680 coś losowo tam. 1362 01:04:07,680 --> 01:04:13,070 Punkt jest, co potrzebne do stworzenia niektóre miejsca do przechowywania coś z 1363 01:04:13,070 --> 01:04:15,530 fread i wziąć coś z fwrite. 1364 01:04:15,530 --> 01:04:18,400 I że coś musiało być lokalne zmienna na stosie - można 1365 01:04:18,400 --> 01:04:19,890 może już malloc'd trochę miejsca. 1366 01:04:19,890 --> 01:04:23,030 >> Więc tak naprawdę może mieć napisane malloc tutaj, i 1367 01:04:23,030 --> 01:04:25,420 że będzie pracował. 1368 01:04:25,420 --> 01:04:28,660 I wtedy byłby przechowywania nasze rzeczy gdzieś na stercie. 1369 01:04:28,660 --> 01:04:31,940 Ale to jest w rzeczywistości, prawdopodobnie, najbardziej eleganckie rozwiązanie. 1370 01:04:31,940 --> 01:04:34,490 Wystarczy utworzyć trochę miejsca na stosie na te rzeczy do zrobienia. 1371 01:04:34,490 --> 01:04:37,690 1372 01:04:37,690 --> 01:04:38,990 >> Chciałbym mieć dwie inne uwagi. 1373 01:04:38,990 --> 01:04:44,650 Jeśli było wziąć zakręt w tym i potem się na to zdobył, moje komentarze 1374 01:04:44,650 --> 01:04:47,400 byłby następujący. 1375 01:04:47,400 --> 01:04:54,300 Są 1 tu, do mnie, spójrz jak magia liczb. 1376 01:04:54,300 --> 01:04:56,860 Ten 1 pod względem fread, ma sens. 1377 01:04:56,860 --> 01:04:59,580 To jest kilka rzeczy, do odczytu lub zapisu. 1378 01:04:59,580 --> 01:05:03,740 >> Ale to właśnie tu należy pewnie coś jeszcze. 1379 01:05:03,740 --> 01:05:05,180 Tak więc to, co jest jedno rozwiązanie? 1380 01:05:05,180 --> 01:05:06,545 >> UCZEŃ 65: Wielkość bajt. 1381 01:05:06,545 --> 01:05:10,100 1382 01:05:10,100 --> 01:05:11,080 >> JASON Hirschhorn: Jak to? 1383 01:05:11,080 --> 01:05:13,130 >> UCZEŃ 65: Wielkość char. 1384 01:05:13,130 --> 01:05:13,820 >> JASON Hirschhorn: Wielkość char. 1385 01:05:13,820 --> 01:05:15,290 Tak, nie jest bajt typu. 1386 01:05:15,290 --> 01:05:16,320 Tak więc wielkość prac char. 1387 01:05:16,320 --> 01:05:30,270 Możemy mieć, na górze nasz kod, # zdefiniowane. 1388 01:05:30,270 --> 01:05:33,410 I nazywa coś BYTE to naprawdę char. 1389 01:05:33,410 --> 01:05:37,675 Faktycznie, nawet lepsze podejście mogło to - 1390 01:05:37,675 --> 01:05:39,391 uint. 1391 01:05:39,391 --> 01:05:40,780 Ktoś wie co to jest? 1392 01:05:40,780 --> 01:05:44,388 1393 01:05:44,388 --> 01:05:44,840 >> Przepraszam. 1394 01:05:44,840 --> 01:05:46,090 Mam go do tyłu. 1395 01:05:46,090 --> 01:05:51,620 1396 01:05:51,620 --> 01:05:52,200 Czekaj, nie. 1397 01:05:52,200 --> 01:05:53,450 W którą stronę to idzie? 1398 01:05:53,450 --> 01:05:58,071 1399 01:05:58,071 --> 01:05:59,660 Ktoś wie co to jest? 1400 01:05:59,660 --> 01:06:00,950 Tak. 1401 01:06:00,950 --> 01:06:05,650 >> UCZEŃ 67: mają pomóc ujednolicić rzeczy, które w różnych systemach 1402 01:06:05,650 --> 01:06:08,760 mają - jak liczby całkowite bez znaku że mają 8 bajtów? 1403 01:06:08,760 --> 01:06:11,785 >> JASON Hirschhorn: To Dokładnie tak. 1404 01:06:11,785 --> 01:06:14,310 Na różnych komputerach, rozmiar char - 1405 01:06:14,310 --> 01:06:15,180 zazwyczaj nie char. 1406 01:06:15,180 --> 01:06:16,100 Znaki są zazwyczaj jeden bajt. 1407 01:06:16,100 --> 01:06:19,590 Jednak rozmiar danych są inne typy różne rozmiary na maszynie 32-bitowym 1408 01:06:19,590 --> 01:06:21,370 w stosunku do maszyny 64-bitowym. 1409 01:06:21,370 --> 01:06:25,180 Uint8_t jest zawsze 8 bitów - 1410 01:06:25,180 --> 01:06:27,210 zawsze jeden bajt. 1411 01:06:27,210 --> 01:06:29,580 >> I muszę m.in., że standardowy plik int nagłówek. 1412 01:06:29,580 --> 01:06:35,040 Więc teraz, byłoby to zapewne Najlepszym sposobem, aby napisać kod. 1413 01:06:35,040 --> 01:06:40,160 1414 01:06:40,160 --> 01:06:41,450 Więc pozbyć się liczb magicznych. 1415 01:06:41,450 --> 01:06:44,690 I mam również bardziej logiczne wpisać do bufora. 1416 01:06:44,690 --> 01:06:49,450 To nie jest po prostu char, to bajt, co jest, co się spodziewać, że będzie. 1417 01:06:49,450 --> 01:06:53,400 >> A tutaj, w rzeczywistości mamy nieco bardziej wytrzymałe. 1418 01:06:53,400 --> 01:06:55,190 Nie będziemy nazywać to char, który - 1419 01:06:55,190 --> 01:06:58,630 być może, kto wie - może być inaczej Rozmiar na różnych maszynach. 1420 01:06:58,630 --> 01:07:02,025 Jesteśmy rzeczywiście mówiąc to jest dokładnie to, jeden bajt, zawsze, bez względu na to, co. 1421 01:07:02,025 --> 01:07:05,810 A jeśli spojrzymy tutaj, robimy cp. 1422 01:07:05,810 --> 01:07:08,340 Uh-oh. 1423 01:07:08,340 --> 01:07:09,590 Co się stało? 1424 01:07:09,590 --> 01:07:14,470 1425 01:07:14,470 --> 01:07:16,170 >> UCZEŃ 68: To może być przełączane. 1426 01:07:16,170 --> 01:07:17,880 >> JASON Hirschhorn: Co? 1427 01:07:17,880 --> 01:07:19,130 >> UCZEŃ 69: Czy to jest? 1428 01:07:19,130 --> 01:07:21,940 1429 01:07:21,940 --> 01:07:25,080 >> UCZEŃ 70: Nie określić jako rodzaj. 1430 01:07:25,080 --> 01:07:28,684 >> UCZEŃ 71: Ale to powinno zostanie określony w normie. 1431 01:07:28,684 --> 01:07:29,934 >> UCZEŃ 72: Co się dzieje? 1432 01:07:29,934 --> 01:07:37,660 1433 01:07:37,660 --> 01:07:40,210 >> UCZEŃ 73: W przypadku zdefiniowania być wszystkie czapki? 1434 01:07:40,210 --> 01:07:41,370 >> JASON Hirschhorn: Więc to nie jest # define. 1435 01:07:41,370 --> 01:07:45,490 Faktycznie, w tym przypadku, jestem zamierzasz używać typedef. 1436 01:07:45,490 --> 01:07:48,590 Ponieważ używamy go jako typu w jednym miejscu. 1437 01:07:48,590 --> 01:07:51,990 Więc w tym przypadku, tak naprawdę chcą typedef jakbyśmy drukowania nowego typu 1438 01:07:51,990 --> 01:07:54,490 bajtu i jest zasadniczo tego. 1439 01:07:54,490 --> 01:07:56,590 To jest nieco inny niż # define. 1440 01:07:56,590 --> 01:08:02,740 >> A teraz nasz kod działa idealnie. 1441 01:08:02,740 --> 01:08:05,230 Tak więc raz jeszcze, # define bierze coś, zastępuje go wszędzie 1442 01:08:05,230 --> 01:08:06,780 z innych rzeczy. 1443 01:08:06,780 --> 01:08:07,920 To tylko makro - 1444 01:08:07,920 --> 01:08:09,420 skrót pozbyć liczb magicznych. 1445 01:08:09,420 --> 01:08:11,360 Ale w tym przypadku, ponieważ jesteśmy używając go jako typ - 1446 01:08:11,360 --> 01:08:12,180 tu - 1447 01:08:12,180 --> 01:08:19,880 w postanowieniu, że do pracy, musimy do typedef co bajt. 1448 01:08:19,880 --> 01:08:21,840 >> A my definiowania go tutaj. 1449 01:08:21,840 --> 01:08:24,750 To nie jest struktura, to rzeczywiście tylko liczba całkowita bez znaku. 1450 01:08:24,750 --> 01:08:27,680 To długo, jeden bajt. 1451 01:08:27,680 --> 01:08:31,910 Kod ten będzie dostępny w sieci, a powinieneś mieć to wszystko teraz. 1452 01:08:31,910 --> 01:08:33,830 >> Więc mamy - 1453 01:08:33,830 --> 01:08:34,250 perfect - 1454 01:08:34,250 --> 01:08:41,359 13 minut w lewo, aby przejść nad problemem zestaw 5. 1455 01:08:41,359 --> 01:08:44,270 Chcę przejść przez copy.c razem, a następnie będziemy krótko mówić 1456 01:08:44,270 --> 01:08:47,120 o innych częściach problemu ustawiona. 1457 01:08:47,120 --> 01:08:48,899 Więc pozwól mi wyciągnąć copy.c. 1458 01:08:48,899 --> 01:09:03,930 1459 01:09:03,930 --> 01:09:08,810 I fajne jest to, rzeczywiście mamy już napisane dużo tego kodu. 1460 01:09:08,810 --> 01:09:11,180 >> Kod pisaliśmy dosłownie wyszedł z tego, kiedy byłem 1461 01:09:11,180 --> 01:09:13,120 piśmie, to na własną rękę. 1462 01:09:13,120 --> 01:09:16,990 Ale to copy.c, stanowi podstawę dla dwóch pierwszych częściach 1463 01:09:16,990 --> 01:09:22,340 Problem ustawiony na whodunit.c, która trzeba napisać i resize.c. 1464 01:09:22,340 --> 01:09:27,050 Recover.c, który jest trzeci i ostatni częścią zestawu problemów, nie jest 1465 01:09:27,050 --> 01:09:29,529 opiera się na tym pliku. 1466 01:09:29,529 --> 01:09:32,200 >> Będziesz musiał napisać, że plik, dajemy Ci za to szablon 1467 01:09:32,200 --> 01:09:34,620 plik, ale to nie ma nic zrobić z copy.c. 1468 01:09:34,620 --> 01:09:38,675 Ale ponieważ copy.c jest podstawą Pierwsze dwie części, będziemy 1469 01:09:38,675 --> 01:09:42,000 aby przejść przez to teraz, więc trzeba Poczucie to, co robi. 1470 01:09:42,000 --> 01:09:43,640 >> I komentarze dają niektóre z nich z dala. 1471 01:09:43,640 --> 01:09:45,120 Mamy już napisane trochę tego. 1472 01:09:45,120 --> 01:09:49,220 Po pierwsze, mamy upewniając mamy trzy argumenty. 1473 01:09:49,220 --> 01:09:50,560 Następnie mamy pamiętać nazwę pliku. 1474 01:09:50,560 --> 01:09:52,960 Więc odpuściliśmy ten krok, gdy mamy zakodowany naszą rzecz - 1475 01:09:52,960 --> 01:09:54,700 kiedy nasz cp. 1476 01:09:54,700 --> 01:09:56,750 Ale tutaj, to robisz to nieco czystsze. 1477 01:09:56,750 --> 01:09:59,350 >> Sprawdzają się upewnić, oba pliki są dobre, w 1478 01:09:59,350 --> 01:10:00,450 dodatek do ich otwierania. 1479 01:10:00,450 --> 01:10:04,760 Pisaliśmy cały ten kod właśnie teraz, więc jestem Nie zamierzam rozwodzić się nad tym kodem. 1480 01:10:04,760 --> 01:10:09,670 Dalej jest kilka rzeczy, które jest charakterystyczne dla typy plików używamy, które 1481 01:10:09,670 --> 01:10:12,240 to pliki rastrowe. 1482 01:10:12,240 --> 01:10:15,660 Pliki rastrowe jakieś metadane z nimi związane. 1483 01:10:15,660 --> 01:10:20,190 >> Tak więc pierwsze kilka bajtów powiedzieć o pliku. 1484 01:10:20,190 --> 01:10:23,460 Nie są kolory pikseli w tym obrazie. 1485 01:10:23,460 --> 01:10:25,120 Mówią ci o pliku. 1486 01:10:25,120 --> 01:10:28,220 A jeśli czytasz przez zestaw problemów, będziesz miał dużo więcej informacji 1487 01:10:28,220 --> 01:10:33,100 na jakie rodzaje struktur metadanych są z bitmapami. 1488 01:10:33,100 --> 01:10:39,350 >> Ale właśnie dlatego mamy ten pierwszy zestaw - tego kodu tutaj. 1489 01:10:39,350 --> 01:10:42,490 Czytamy metadane - 1490 01:10:42,490 --> 01:10:45,800 dwa kawałki - plik metadanych Nagłówek i nagłówek informacji. 1491 01:10:45,800 --> 01:10:51,030 I sprawdzamy pewne jej części do upewnij się, że jest to prawda, plik z obrazkiem 1492 01:10:51,030 --> 01:10:52,420 przed kontynuowaniem. 1493 01:10:52,420 --> 01:10:55,470 >> I znowu, że dane te są nie musisz iść do teraz. 1494 01:10:55,470 --> 01:10:57,720 Jeśli czytasz przez zestaw problemów, zrozumiesz to. 1495 01:10:57,720 --> 01:11:01,370 Krótko mówiąc, są one po prostu mówiąc, to jest plik z obrazkiem, a 1496 01:11:01,370 --> 01:11:02,810 potwierdzający. 1497 01:11:02,810 --> 01:11:05,180 >> Następnie piszemy te do pliku na zewnątrz. 1498 01:11:05,180 --> 01:11:05,660 Widzimy, że tutaj. 1499 01:11:05,660 --> 01:11:06,910 Piszemy na zewnątrz wskaźnika. 1500 01:11:06,910 --> 01:11:09,260 1501 01:11:09,260 --> 01:11:11,320 Następnie mamy do określania dopełnienia. 1502 01:11:11,320 --> 01:11:15,240 Ponownie więc, jak to jest w szczególny plik bitmapy, niektóre linie należą 1503 01:11:15,240 --> 01:11:16,840 Wyściółka na końcu. 1504 01:11:16,840 --> 01:11:19,000 A jeśli czytasz przez zestaw problemów, dowiesz się więcej o dopełnienie. 1505 01:11:19,000 --> 01:11:22,330 Jest to formuła, aby znaleźć dopełnienie. 1506 01:11:22,330 --> 01:11:23,610 >> Ważne, aby pamiętać - 1507 01:11:23,610 --> 01:11:29,720 podczas zmiany rozmiaru mapy bitowej plik, zmiany padding. 1508 01:11:29,720 --> 01:11:31,970 Po zmianie rozmiaru plik, zmiany padding. 1509 01:11:31,970 --> 01:11:34,310 To nigdy nie będzie większa niż 3 - 1510 01:11:34,310 --> 01:11:36,510 będzie to 0 do 3 włącznie. 1511 01:11:36,510 --> 01:11:38,930 Ale po zmianie rozmiaru coś zmienia wypełniające. 1512 01:11:38,930 --> 01:11:47,100 >> Jeśli mam tylko jeden piksel w tym wierszu, ja Potrzebujemy trzech bajtów wypełnienia, ponieważ 1513 01:11:47,100 --> 01:11:51,190 każdy rząd musi być wielokrotnościami czterech bajtów w pliku mapy bitowej. 1514 01:11:51,190 --> 01:11:56,120 Ale gdybym go dwukrotnie, aby przejść z jednego piksela do dwóch pikseli, z których każda 1515 01:11:56,120 --> 01:11:59,510 powiedzmy, jest bajt, potem muszę dwa bajty dopełnienia zarabiania 1516 01:11:59,510 --> 01:12:00,970 że równa cztery. 1517 01:12:00,970 --> 01:12:04,200 >> Kiedy więc zmienić rozmiar czegoś, Muszę zmienić ilość 1518 01:12:04,200 --> 01:12:06,551 padding mam. 1519 01:12:06,551 --> 01:12:08,100 Czy to ma sens dla wszystkich? 1520 01:12:08,100 --> 01:12:12,020 1521 01:12:12,020 --> 01:12:18,720 Następnie, iteracyjne nad każdym wierszu, lub przez wszystkie rzędy. 1522 01:12:18,720 --> 01:12:21,400 A potem iteracji Każda kolumna w każdym rzędzie. 1523 01:12:21,400 --> 01:12:25,330 Traktujemy to jak bitmapy sieci, jak mamy traktować 1524 01:12:25,330 --> 01:12:26,490 wyżywienie w 15. 1525 01:12:26,490 --> 01:12:29,200 >> Podobnie jak my, gdy traktuje cegły zadrukowaliśmy ich na ekranie. 1526 01:12:29,200 --> 01:12:31,350 Siatka z wierszy i kolumn. 1527 01:12:31,350 --> 01:12:32,350 Następnie - widzieliśmy to. 1528 01:12:32,350 --> 01:12:33,840 My właściwie tylko kodowane to. 1529 01:12:33,840 --> 01:12:35,780 Stworzyliśmy pewne czasowego składowania. 1530 01:12:35,780 --> 01:12:38,710 Czytamy tam, a następnie piszemy go. 1531 01:12:38,710 --> 01:12:42,680 To jest dokładnie to, co właśnie zrobiliśmy. 1532 01:12:42,680 --> 01:12:46,760 >> Następnie, ponieważ powiedziałem każda linia kończy się w jakimś wypełnieniem, mamy 1533 01:12:46,760 --> 01:12:48,260 pominąć tego obicia - 1534 01:12:48,260 --> 01:12:51,000 stare wypełnienie. 1535 01:12:51,000 --> 01:12:52,630 , A następnie dodać go ponownie. 1536 01:12:52,630 --> 01:12:55,140 W tym przypadku tworzymy dokładnie taki sam plik. 1537 01:12:55,140 --> 01:12:56,180 Jesteśmy po prostu skopiowanie go. 1538 01:12:56,180 --> 01:12:57,700 Więc to jest to trochę głupie. 1539 01:12:57,700 --> 01:12:59,660 Moglibyśmy dosłownie umieścić dopełnienie w. 1540 01:12:59,660 --> 01:13:04,290 >> Ale jeśli zmienisz rozmiar pliku, Czy nadal chcesz ten wiersz? 1541 01:13:04,290 --> 01:13:08,510 1542 01:13:08,510 --> 01:13:11,560 Jeśli więc zmienić rozmiar pliku, Czy nadal chcemy pominąć 1543 01:13:11,560 --> 01:13:12,810 na stare wykładziny? 1544 01:13:12,810 --> 01:13:15,170 1545 01:13:15,170 --> 01:13:15,970 >> UCZEŃ 74: Tak. 1546 01:13:15,970 --> 01:13:17,090 >> JASON Hirschhorn: Więc robimy. 1547 01:13:17,090 --> 01:13:19,290 Ponieważ to, ponownie, promocje z pliku źródłowego. 1548 01:13:19,290 --> 01:13:21,570 Nie dbamy o obicia z pliku źródłowego. 1549 01:13:21,570 --> 01:13:23,410 Chcemy, aby przejść do następnego wiersza. 1550 01:13:23,410 --> 01:13:28,850 Ale nie po prostu umieścić z powrotem stary ilość wypełnienia. 1551 01:13:28,850 --> 01:13:31,540 Musimy umieścić z powrotem Nowa kwota wyściółką. 1552 01:13:31,540 --> 01:13:35,810 >> Więc kiedy mamy zmianę rozmiaru plik, nadal chcemy pominąć 1553 01:13:35,810 --> 01:13:38,270 wyściółka w starym pliku - co czytamy w od. 1554 01:13:38,270 --> 01:13:40,370 Ale to, co piszemy, aby, jedziemy celu należy umieścić z powrotem jakiś inny 1555 01:13:40,370 --> 01:13:41,890 wyściółką, że liczba mamy ustalone. 1556 01:13:41,890 --> 01:13:42,780 Tak. 1557 01:13:42,780 --> 01:13:44,550 >> UCZEŃ 75: kolejność tych dwóch linie nie ma znaczenia, prawda? 1558 01:13:44,550 --> 01:13:46,160 Bo jesteś obsługi różne pliki. 1559 01:13:46,160 --> 01:13:46,620 >> JASON Hirschhorn: Dokładnie. 1560 01:13:46,620 --> 01:13:48,220 Kolejność tych dwóch linii nie ma znaczenia. 1561 01:13:48,220 --> 01:13:49,790 Piszemy tę linię. 1562 01:13:49,790 --> 01:13:51,430 To tutaj, w pliku piszemy do. 1563 01:13:51,430 --> 01:13:54,370 To ważne, więc dostajemy odpowiednią ilość wypełnienia. 1564 01:13:54,370 --> 01:13:57,560 To ma do czynienia z pliku w. 1565 01:13:57,560 --> 01:13:58,560 Chcemy, aby przejść w prawo nad wypełnieniem. 1566 01:13:58,560 --> 01:13:59,470 >> Nie chcemy, aby przeczytać - 1567 01:13:59,470 --> 01:14:01,500 jeśli czytasz bajt w czasie, nie dbają o tych bajtów wypełniających. 1568 01:14:01,500 --> 01:14:04,070 Chcemy, aby przejść do następnego wiersza. 1569 01:14:04,070 --> 01:14:11,800 Wreszcie, podobnie jak Lucy dał za nas, zamykamy pliki i zwraca 0. 1570 01:14:11,800 --> 01:14:13,890 Więc to jest copy.c. 1571 01:14:13,890 --> 01:14:17,850 I faktycznie napisał - spędziliśmy większość Sekcja pisanie to, w istocie. 1572 01:14:17,850 --> 01:14:18,740 >> Zrobiłeś to. 1573 01:14:18,740 --> 01:14:22,440 Więc mam nadzieję, że masz dobre poczucie tego, co się tu dzieje. 1574 01:14:22,440 --> 01:14:25,890 Duża różnica, szczerze mówiąc, to tylko ta pierwsza część, która zajmuje się 1575 01:14:25,890 --> 01:14:29,970 osobliwości plików bitmapowych. 1576 01:14:29,970 --> 01:14:33,570 Więc mam jako mojego następnego slajdu, co musimy zrobić? 1577 01:14:33,570 --> 01:14:35,510 Cóż, pomyślmy o whodunit. 1578 01:14:35,510 --> 01:14:38,080 >> A dla kogoś, kto przeczytać ustawić problem, co my 1579 01:14:38,080 --> 01:14:41,410 trzeba zrobić w whodunit? 1580 01:14:41,410 --> 01:14:42,080 Po prostu. 1581 01:14:42,080 --> 01:14:42,460 Aleja. 1582 01:14:42,460 --> 01:14:48,570 >> ALEJA: Czy można wyjąć część każdego piksela oznaczająca czerwony. 1583 01:14:48,570 --> 01:14:49,730 A następnie - 1584 01:14:49,730 --> 01:14:50,730 rodzaj? 1585 01:14:50,730 --> 01:14:51,860 >> JASON Hirschhorn: OK. 1586 01:14:51,860 --> 01:14:54,460 Więc wyjąć część każdego pikseli, które oznacza czerwony. 1587 01:14:54,460 --> 01:14:57,234 To jest blisko, ale nie wszystkie. 1588 01:14:57,234 --> 01:14:59,780 >> UCZEŃ 76: No cóż, nie ma różnych sposobów, aby to zrobić. 1589 01:14:59,780 --> 01:14:59,870 >> JASON Hirschhorn: OK. 1590 01:14:59,870 --> 01:15:03,070 Daj mi jeden sposób. 1591 01:15:03,070 --> 01:15:08,240 >> UCZEŃ 76: Wyjmij cały czerwony, i następnie podkreślić, niebieski i zielony. 1592 01:15:08,240 --> 01:15:10,010 >> JASON Hirschhorn: OK. 1593 01:15:10,010 --> 01:15:11,830 Tak więc biorąc pod uwagę oba te sposoby - 1594 01:15:11,830 --> 01:15:15,210 to brzmi jak damy mu piksel, to ma czerwony, niebieski i zielony poziom. 1595 01:15:15,210 --> 01:15:19,350 Chcemy zmienić względne poziomy czerwony, niebieski i zielony, w zależności 1596 01:15:19,350 --> 01:15:20,740 na tego piksela. 1597 01:15:20,740 --> 01:15:28,380 Gdzie w tym kodzie należy zmienić względem czerwony, niebieski i zielony 1598 01:15:28,380 --> 01:15:29,720 poziom określonego piksela. 1599 01:15:29,720 --> 01:15:30,600 Po czytaliśmy go - 1600 01:15:30,600 --> 01:15:32,520 Zanim napiszemy go? 1601 01:15:32,520 --> 01:15:34,564 Daj mi numer linii. 1602 01:15:34,564 --> 01:15:35,950 >> WIELU STUDENCI: 83. 1603 01:15:35,950 --> 01:15:37,320 >> JASON Hirschhorn: 83. 1604 01:15:37,320 --> 01:15:38,570 Więc tutaj. 1605 01:15:38,570 --> 01:15:40,830 1606 01:15:40,830 --> 01:15:45,710 Dla whodunit kod trzeba zapisu powinniśmy iść tam. 1607 01:15:45,710 --> 01:15:47,640 I to jest tylko kod trzeba napisać. 1608 01:15:47,640 --> 01:15:51,520 Ponieważ, jak słyszeliśmy, wszystko, czego potrzebujesz, aby zrobić, to zmienić te względne niebieski, 1609 01:15:51,520 --> 01:15:54,420 czerwone i zielone poziomy z każdego piksela. 1610 01:15:54,420 --> 01:15:58,250 >> Czytasz go w, a teraz jesteś napiszę to. 1611 01:15:58,250 --> 01:16:03,100 Jak uzyskać - jeśli mam to coś nazywa potrójny, tutaj, i to z 1612 01:16:03,100 --> 01:16:04,570 wpisz RGBTRIPLE - 1613 01:16:04,570 --> 01:16:08,650 dobrze, jeśli spojrzał w bmp.h, co jest RGBTRIPLE? 1614 01:16:08,650 --> 01:16:11,450 1615 01:16:11,450 --> 01:16:12,700 >> UCZEŃ 77: To jest struktura. 1616 01:16:12,700 --> 01:16:17,440 1617 01:16:17,440 --> 01:16:18,900 >> JASON Hirschhorn: RGBTRIPLE jest struktura. 1618 01:16:18,900 --> 01:16:22,330 Widzimy, że aż tutaj. 1619 01:16:22,330 --> 01:16:26,600 I tak, jeśli chciałem dostępu, powiedzmy, czerwony poziom struktury, jak to zrobić 1620 01:16:26,600 --> 01:16:30,005 przejść czerwoną poziom tej struktury? 1621 01:16:30,005 --> 01:16:37,280 >> [CLASS pomruki] 1622 01:16:37,280 --> 01:16:38,530 >> UCZEŃ 78: RGBTRIPLE.rgbtred? 1623 01:16:38,530 --> 01:16:47,250 1624 01:16:47,250 --> 01:16:48,856 >> JASON Hirschhorn: Czy to prawda? 1625 01:16:48,856 --> 01:16:53,040 >> UCZEŃ 79: Powinno być potrójna kropka, zamiast RGBTRIPLE kropki? 1626 01:16:53,040 --> 01:16:54,120 >> JASON Hirschhorn: Triple. 1627 01:16:54,120 --> 01:16:56,700 Triple jest zmienną lokalną, więc tutaj, jest tutaj nie ma wskazówek. 1628 01:16:56,700 --> 01:16:58,400 Więc po prostu użyć notacji dot. 1629 01:16:58,400 --> 01:17:00,480 To daje mi poziom czerwony. 1630 01:17:00,480 --> 01:17:06,180 Jeśli chcesz to zmienić, po prostu ustawić to równać do czegoś innego. 1631 01:17:06,180 --> 01:17:13,190 Więc jeszcze raz, ta linia kodu dostępu zmienna ta wewnątrz tej struktury, a 1632 01:17:13,190 --> 01:17:15,070 możemy ustawić go na coś nowego. 1633 01:17:15,070 --> 01:17:20,040 >> Więc dla whodunit, ponownie, jest to, w istocie to, co musimy zrobić. 1634 01:17:20,040 --> 01:17:21,170 Bardzo proste. 1635 01:17:21,170 --> 01:17:25,020 Wystarczy zmienić niektóre względne poziomy i to gdzie ten kod idzie. 1636 01:17:25,020 --> 01:17:27,720 Zmiana rozmiaru, z drugiej strony, jest nieco trudniejsze. 1637 01:17:27,720 --> 01:17:30,900 W rzeczywistości, to prawdopodobnie zmiany rozmiaru Najtrudniejsza część tego problemu ustawić. 1638 01:17:30,900 --> 01:17:32,720 Mamy trzech minut, aby przejść nad nim. 1639 01:17:32,720 --> 01:17:34,910 >> Ale znowu, już napisane większość z tego kodu, więc 1640 01:17:34,910 --> 01:17:36,500 powinno być dość znajomo. 1641 01:17:36,500 --> 01:17:40,750 Jakie są pewne rzeczy, które chcemy zrobić w zmiana rozmiaru, jeśli już przeczytać 1642 01:17:40,750 --> 01:17:43,470 ustawić problem? 1643 01:17:43,470 --> 01:17:45,290 Jeśli dasz mi je, my może o nich mówić. 1644 01:17:45,290 --> 01:17:47,340 Jakie są pewne rzeczy, które chcemy zrobić? 1645 01:17:47,340 --> 01:17:47,970 >> UCZEŃ 80: w pionie - 1646 01:17:47,970 --> 01:17:52,360 więc musisz zmienić jego rozmiar w poziomie, ale pionowo zmienić jego rozmiar, jak również? 1647 01:17:52,360 --> 01:17:58,475 >> JASON Hirschhorn: Więc jeśli mamy podane pikseli, i chcemy go zmienić rozmiar 1648 01:17:58,475 --> 01:18:03,460 współczynnik dwa, teraz muszą być zmieniany poziomo i przeskalowane 1649 01:18:03,460 --> 01:18:05,220 pionowo. 1650 01:18:05,220 --> 01:18:06,640 Czy to ma sens? 1651 01:18:06,640 --> 01:18:07,060 Tak. 1652 01:18:07,060 --> 01:18:09,300 Tak, to jest to chyba Największym wyzwaniem. 1653 01:18:09,300 --> 01:18:10,430 I porozmawiamy o tym za sekundę. 1654 01:18:10,430 --> 01:18:11,065 Tak. 1655 01:18:11,065 --> 01:18:15,270 >> UCZEŃ 81: sposób myślałem o tym było potrzebne wydrukować - 1656 01:18:15,270 --> 01:18:15,490 >> JASON Hirschhorn: Czekaj. 1657 01:18:15,490 --> 01:18:17,580 Nie wolno nam powiedzieć, co zrobiłeś. 1658 01:18:17,580 --> 01:18:20,620 Mamy zamiar rozmawiać w logice. 1659 01:18:20,620 --> 01:18:21,870 >> UCZEŃ 81: OK. 1660 01:18:21,870 --> 01:18:25,090 1661 01:18:25,090 --> 01:18:27,410 Jakie było pytanie? 1662 01:18:27,410 --> 01:18:28,892 >> JASON Hirschhorn: Po prostu podniósł rękę. 1663 01:18:28,892 --> 01:18:31,600 Nie było mowy. 1664 01:18:31,600 --> 01:18:32,520 Pozwól mi przedstawić go. 1665 01:18:32,520 --> 01:18:34,560 Powiem tylko krótko omówić ten. 1666 01:18:34,560 --> 01:18:38,400 Mamy więc jeden piksel, chcemy replikować go, zarówno w poziomie i 1667 01:18:38,400 --> 01:18:39,360 pionowo. 1668 01:18:39,360 --> 01:18:48,920 Tak doskonale, co robimy tutaj jest, że czytaj w naszym piksel, możemy napisać 1669 01:18:48,920 --> 01:18:51,690 Jednakże wiele razy. 1670 01:18:51,690 --> 01:18:54,720 >> Ale mamy tu podstęp, bo to chcemy, aby przejść do 1671 01:18:54,720 --> 01:18:57,660 następna linia i pisać to co początku następnego wiersza. 1672 01:18:57,660 --> 01:19:02,960 Więc jeśli chcemy powtórzyć zarówno w pionie i poziomie, co jest 1673 01:19:02,960 --> 01:19:05,050 Dobrym sposobem, aby to zrobić - 1674 01:19:05,050 --> 01:19:06,780 jedno dobre, choć to zrobić? 1675 01:19:06,780 --> 01:19:11,950 Więc nie trzeba ciągle szukać wokół naszego pliku, aby umieścić rzeczy. 1676 01:19:11,950 --> 01:19:14,360 >> Pytanie to może nie mieć sens, ale myślę, 1677 01:19:14,360 --> 01:19:15,800 odpowiedzieć na to pozwoli. 1678 01:19:15,800 --> 01:19:17,210 >> UCZEŃ 82: Stwórz tablicę? 1679 01:19:17,210 --> 01:19:20,090 >> JASON Hirschhorn: Więc pomyślmy każdego pliku jako rzędu. 1680 01:19:20,090 --> 01:19:22,550 Zastanówmy się w kategoriach wierszy. 1681 01:19:22,550 --> 01:19:26,670 Jeśli mamy pierwszy wiersz z nasza mała obraz, możemy dokonać tego wiersza 1682 01:19:26,670 --> 01:19:30,640 w dużym rzędzie z dużym obrazie a następnie powtórzyć ten wiersz jednak 1683 01:19:30,640 --> 01:19:34,250 wiele razy to musi być powtórzone, a nie będzie piksel po pikselu, 1684 01:19:34,250 --> 01:19:37,260 które dostaje mylące, gdy do czynienia z plikami. 1685 01:19:37,260 --> 01:19:38,730 >> Bo gdybyśmy mieli - 1686 01:19:38,730 --> 01:19:41,260 Kończy mi się miejsce. 1687 01:19:41,260 --> 01:19:46,490 Jeśli to jest nasz plik, a my mamy, że jeden piksel tam, i chcemy go umieścić 1688 01:19:46,490 --> 01:19:49,840 tam, mamy jeszcze kilka rzeczy że trzeba iść tam, gdy jesteśmy 1689 01:19:49,840 --> 01:19:51,450 pisania i tworzenia naszego nowego pliku - 1690 01:19:51,450 --> 01:19:53,250 Nasz plik jest dwa razy większy. 1691 01:19:53,250 --> 01:19:56,820 >> Ale jest to naprawdę trudne z funkcjami plików , aby przejść do nowych linii wokół 1692 01:19:56,820 --> 01:20:00,260 tak, a potem wróć tutaj i umieścić rzeczy w środku. 1693 01:20:00,260 --> 01:20:04,500 Jest prawie niemożliwe, aby coś zrobić tak, czy to ma sens. 1694 01:20:04,500 --> 01:20:10,180 Więc jeśli myślimy w kategoriach wierszy, możemy wziąć nasz rząd, a następnie umieścić go - 1695 01:20:10,180 --> 01:20:11,720 replikować wierszy w pionie. 1696 01:20:11,720 --> 01:20:15,860 >> I w ten sposób mamy do czynienia z rozmiaru pionowo, a nie poziomo. 1697 01:20:15,860 --> 01:20:18,810 Że niby szybkie i trochę mylące. 1698 01:20:18,810 --> 01:20:22,375 Niestety, nasz czas się skończył. 1699 01:20:22,375 --> 01:20:27,340 Stanę na zewnątrz dla tych z was, tutaj, którzy mają pytania dotyczące 1700 01:20:27,340 --> 01:20:30,500 Zestaw problemów, w tym odzyskania. 1701 01:20:30,500 --> 01:20:32,320 >> Warto więc odroczyć do teraz. 1702 01:20:32,320 --> 01:20:34,480 I znowu, jeśli masz jakiekolwiek pytania, możemy porozmawiać na zewnątrz. 1703 01:20:34,480 --> 01:20:38,294