1 00:00:00,000 --> 00:00:07,810 2 00:00:07,810 --> 00:00:09,840 >> JASON HIRSCHHORN: Benvenuto, tutti, Settimana 6. 3 00:00:09,840 --> 00:00:14,790 Sono felice di vedervi tutti vivi e vegeti dopo Quiz 0, perché so che 4 00:00:14,790 --> 00:00:15,810 era un po 'agitato. 5 00:00:15,810 --> 00:00:18,370 Ma per fortuna, a tutti voi ha fatto incredibilmente bene. 6 00:00:18,370 --> 00:00:21,680 E così che è meraviglioso. 7 00:00:21,680 --> 00:00:25,840 Se siete nella mia sezione, ho dato più di voi eseguire i vostri quiz già. 8 00:00:25,840 --> 00:00:28,050 >> Un paio di voi, sto incontro dopo le lezioni. 9 00:00:28,050 --> 00:00:32,360 E se sei uno studente interno e non avete ricevuto il vostro quiz schiena 10 00:00:32,360 --> 00:00:35,490 Eppure, il tuo TF sta probabilmente lavorando su di esso e classificazione, e otterrà indietro 11 00:00:35,490 --> 00:00:36,490 al più presto. 12 00:00:36,490 --> 00:00:39,650 Così i miei studenti di estensione che sono guardando proprio ora - si spera vivere - 13 00:00:39,650 --> 00:00:42,880 Mi metterò i vostri quiz A breve pure. 14 00:00:42,880 --> 00:00:45,670 >> La nostra agenda per oggi è la seguente. 15 00:00:45,670 --> 00:00:50,170 In primo luogo, stiamo per andare oltre alcune risorse che CS50 offre a voi. 16 00:00:50,170 --> 00:00:54,590 Stiamo per andare oltre Quiz 0 prossimo, e Risponderò a tutte le domande nessuno 17 00:00:54,590 --> 00:00:57,360 ha circa problemi particolari. 18 00:00:57,360 --> 00:01:02,050 E poi, andremo oltre file I / O e di problem set 5. 19 00:01:02,050 --> 00:01:07,360 Queste ultime due temi prenderanno la massa della sezione di oggi. 20 00:01:07,360 --> 00:01:11,680 >> Ho messo questa lista ogni settimana come un ricordo a tutti voi, ma del core 21 00:01:11,680 --> 00:01:14,650 sezione, abbiamo solo 90 minuti - abbiamo non sono in grado di coprire tutto ciò che ho 22 00:01:14,650 --> 00:01:16,280 piacerebbe a coprire per voi ragazzi. 23 00:01:16,280 --> 00:01:21,170 Ma abbiamo un sacco di risorse per di disegnare su come si arriva a conoscere 24 00:01:21,170 --> 00:01:24,000 il materiale e lavoro attraverso il problema imposta. 25 00:01:24,000 --> 00:01:30,810 >> Un ricordo che ho in linea un testo box, impostato per voi a compilare se 26 00:01:30,810 --> 00:01:33,250 avere tutte le risposte per me, sia positivi che 27 00:01:33,250 --> 00:01:35,180 costruttivo, su sezione. 28 00:01:35,180 --> 00:01:38,600 Tale URL è situato proprio qui. 29 00:01:38,600 --> 00:01:43,250 Quindi, per favore, prendete un momento se avete qualunque feedback, sia durante la sezione, 30 00:01:43,250 --> 00:01:48,030 o dopo, o dopo si guarda il video on-line, di darmi le vostre risposte. 31 00:01:48,030 --> 00:01:52,100 Ho davvero apprezzato ogni e qualsiasi di esso. 32 00:01:52,100 --> 00:01:55,730 >> Così ho avuto piccole conversazioni con un sacco di mio 33 00:01:55,730 --> 00:01:59,350 gli studenti per tutta la settimana - come ho consegno quiz indietro, parlando del 34 00:01:59,350 --> 00:02:01,480 Certo, vedendo come si sta facendo. 35 00:02:01,480 --> 00:02:05,120 E un tema ha messo sopra e oltre a parlare - in 36 00:02:05,120 --> 00:02:05,660 particolare - 37 00:02:05,660 --> 00:02:07,710 problema di imposta. 38 00:02:07,710 --> 00:02:13,090 E ho incapsulato quel tema sulla scheda al momento. 39 00:02:13,090 --> 00:02:16,630 >> In sostanza, c'è una differenza tra trasformare in qualcosa che è 40 00:02:16,630 --> 00:02:19,590 fatto correttamente e qualcosa che è fatto bene. 41 00:02:19,590 --> 00:02:22,920 La maggior parte delle persone hanno fatto fantastico in termini di correttezza - 42 00:02:22,920 --> 00:02:25,460 5 o 4 del su tutti i pset. 43 00:02:25,460 --> 00:02:27,930 La maggior parte delle persone sono sempre quelli tutto il tempo. 44 00:02:27,930 --> 00:02:31,150 >> Tuttavia, solo perché hai fatto qualcosa di giusto non vuol dire che hai 45 00:02:31,150 --> 00:02:34,450 fatto qualcosa come elegantemente, o efficiente, o in modo pulito, come si 46 00:02:34,450 --> 00:02:35,270 avrebbe fatto. 47 00:02:35,270 --> 00:02:36,790 Ed è quello che il disegno - 48 00:02:36,790 --> 00:02:39,230 e in misura minore, di stile - 49 00:02:39,230 --> 00:02:40,450 assi sono per. 50 00:02:40,450 --> 00:02:45,130 Così ho tutti voi sto spingendo, e altri TF stanno spingendo voi ragazzi, non solo turno 51 00:02:45,130 --> 00:02:48,320 nelle cose che sono corrette, ma si trasformano nelle cose che sono codificati bene. 52 00:02:48,320 --> 00:02:53,060 >> Non fare inutili per cicli, Non ricalcolando le variabili se 53 00:02:53,060 --> 00:02:53,800 tu non devi. 54 00:02:53,800 --> 00:02:58,520 Ad esempio, guardando indietro al problema posto 4, quando si posiziona i mattoni sul 55 00:02:58,520 --> 00:03:03,070 schermo, ogni riga - ogni mattone in un determinata riga ha la stessa coordinata y - 56 00:03:03,070 --> 00:03:04,390 coordinata alla stessa altezza. 57 00:03:04,390 --> 00:03:07,930 >> In modo che coordinata y non ha bisogno di calcolata all'interno l'interno 58 00:03:07,930 --> 00:03:11,070 nidificato ciclo FOR che probabilmente utilizzato di mettere quei mattoni sullo schermo. 59 00:03:11,070 --> 00:03:14,030 Ha solo bisogno di essere calcolato ogni il tempo si è passati una riga, o 60 00:03:14,030 --> 00:03:15,200 spostato verso il basso una riga. 61 00:03:15,200 --> 00:03:19,760 Quindi dire se ci sono 10 mattoni in un riga, ogni mattone può avere la stessa 62 00:03:19,760 --> 00:03:22,260 coordinata y, e che coordinata y può solo essere calcolato 63 00:03:22,260 --> 00:03:23,550 una volta per tutti coloro. 64 00:03:23,550 --> 00:03:27,810 >> Essa non deve essere calcolato 10 tempi, né che la necessità di calcolo 65 00:03:27,810 --> 00:03:30,220 ad accadere nel reale funzione di chiamata - 66 00:03:30,220 --> 00:03:33,020 la nuova chiamata di funzione gracked. 67 00:03:33,020 --> 00:03:37,820 Quindi, se questo è stato un po 'di confusione per si, più genericamente, le cose che 68 00:03:37,820 --> 00:03:40,730 non è necessario che accada ogni volta si passa attraverso un ciclo FOR non dovrebbe essere 69 00:03:40,730 --> 00:03:42,900 inserire all'interno del ciclo FOR, e non dovrebbe accadere ogni volta che si va 70 00:03:42,900 --> 00:03:44,080 attraverso il ciclo FOR. 71 00:03:44,080 --> 00:03:49,270 >> Un altro buon esempio di progettazione che abbiamo visto nella Settimana 3 per 15, si potrebbe mantenere 72 00:03:49,270 --> 00:03:50,500 traccia dello zero. 73 00:03:50,500 --> 00:03:53,600 Così, quando si inizializza la scheda, si salva - in una variabile globale, forse - 74 00:03:53,600 --> 00:03:56,140 x e y-coordinate dello zero. 75 00:03:56,140 --> 00:03:57,520 E poi ogni volta che - 76 00:03:57,520 --> 00:04:00,310 nella funzione mossa, ogni volta che fate una mossa di successo, si aggiorna il 77 00:04:00,310 --> 00:04:02,040 posizione dello zero. 78 00:04:02,040 --> 00:04:06,240 >> Che ti farebbe risparmiare da dover fare cicli for nidificati di guardare attraverso il 79 00:04:06,240 --> 00:04:10,700 bordo ogni volta che nella funzione mossa e trovare lo zero, o trovare la tessera, 80 00:04:10,700 --> 00:04:12,460 e quindi controllare che cosa è accanto ad essa. 81 00:04:12,460 --> 00:04:16,329 Invece, si ha la posizione del zero, si può solo guardare sopra, sotto, 82 00:04:16,329 --> 00:04:21,160 ed a sinistra ea destra di esso, per trovare la tegola che stavi cercando. 83 00:04:21,160 --> 00:04:24,970 >> Quindi, in termini di programmi che stiamo la scrittura, non sono mai abbastanza grandi 84 00:04:24,970 --> 00:04:28,580 che alcune di queste scelte progettuali sono davvero intenzione di ostacolare il vostro 85 00:04:28,580 --> 00:04:31,670 programma, o farlo girare più lentamente, o forse anche a corto di memoria. 86 00:04:31,670 --> 00:04:35,030 Ma stiamo ancora spingendo ragazzi scrivere come elegante e 87 00:04:35,030 --> 00:04:36,450 codice efficiente possibile. 88 00:04:36,450 --> 00:04:39,910 >> Quindi, se si finisce per scrivere cose che hanno una significativamente più grande 89 00:04:39,910 --> 00:04:44,660 campo di applicazione, che sarà scritto con buona progettare oltre ad essere corretta. 90 00:04:44,660 --> 00:04:46,300 Così alcuni di voi avete portato che fuori. 91 00:04:46,300 --> 00:04:48,560 Questo è qualcosa che stiamo cercando - qualcosa che stiamo andando a continuare a 92 00:04:48,560 --> 00:04:49,840 ti spingono ragazzi su. 93 00:04:49,840 --> 00:04:52,460 >> Se avete qualunque domande circa l' progettazione del programma, sentiti libero 94 00:04:52,460 --> 00:04:56,870 per raggiungere me, e io sono felice di a piedi attraverso il programma con voi, 95 00:04:56,870 --> 00:05:01,320 e sottolineare alcune del disegno decisioni che hai fatto, e darvi qualche 96 00:05:01,320 --> 00:05:06,240 suggerimenti su come rendere ancora migliori decisioni progettuali. 97 00:05:06,240 --> 00:05:08,870 >> Quindi stiamo andando a passare a parlare Quiz 0. 98 00:05:08,870 --> 00:05:11,300 Prima di farlo, lo fa nessuno Per qualsiasi domanda su cosa 99 00:05:11,300 --> 00:05:14,252 Ho coperto finora? 100 00:05:14,252 --> 00:05:21,500 >> [Fruscio] 101 00:05:21,500 --> 00:05:22,750 >> JASON HIRSCHHORN: Sette secondi. 102 00:05:22,750 --> 00:05:23,250 OK. 103 00:05:23,250 --> 00:05:24,970 Parliamo Quiz 0 per un po '. 104 00:05:24,970 --> 00:05:26,700 La maggior parte di voi hanno vostra Quiz 0 schiena. 105 00:05:26,700 --> 00:05:29,820 Se non, si spera ti ricordi un po '. 106 00:05:29,820 --> 00:05:34,770 Ma se hai preso Quiz 0, allora si anche avere accesso al file PDF online 107 00:05:34,770 --> 00:05:35,890 le soluzioni campione. 108 00:05:35,890 --> 00:05:39,480 >> Qualcuno ha domande prima saltiamo nel materiale della settimana su 109 00:05:39,480 --> 00:05:41,520 un problema particolare Quiz 0 - 110 00:05:41,520 --> 00:05:44,630 perché la risposta è quello che è? 111 00:05:44,630 --> 00:05:47,255 C'è qualcuno confusi su qualcosa? 112 00:05:47,255 --> 00:05:50,230 Anche se hai il problema di destra, ma solo vorrei farmi spiegare un po ' 113 00:05:50,230 --> 00:05:52,640 di più, sono felice di farlo ora. 114 00:05:52,640 --> 00:05:57,800 >> Così ho chiesto a voi ragazzi vengono preparati con un po ' 115 00:05:57,800 --> 00:05:59,440 pensieri su Quiz 0. 116 00:05:59,440 --> 00:06:02,660 Allora, chi vorrebbe farci iniziare con una domanda o 117 00:06:02,660 --> 00:06:04,655 commentare Quiz 0? 118 00:06:04,655 --> 00:06:07,435 119 00:06:07,435 --> 00:06:10,410 >> [CARTA STORMIR] 120 00:06:10,410 --> 00:06:11,470 >> JASON HIRSCHHORN: Non tutti ha fatto perfettamente. 121 00:06:11,470 --> 00:06:12,720 Quindi so [ride] 122 00:06:12,720 --> 00:06:15,950 ci devono essere alcune domande Quiz su 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 Sì. 126 00:06:29,210 --> 00:06:29,600 Ompica. 127 00:06:29,600 --> 00:06:30,520 >> OMPICA: Number 10. 128 00:06:30,520 --> 00:06:33,560 >> JASON HIRSCHHORN: Number 10. 129 00:06:33,560 --> 00:06:35,400 Quale era il numero 10? 130 00:06:35,400 --> 00:06:35,840 >> OMPICA: The - 131 00:06:35,840 --> 00:06:36,420 >> JASON HIRSCHHORN: I haven't - 132 00:06:36,420 --> 00:06:37,670 >> OMPICA: The includono - 133 00:06:37,670 --> 00:06:40,060 134 00:06:40,060 --> 00:06:42,180 >> JASON HIRSCHHORN: Number 10 aveva otto anni per i - la scrittura otto i? 135 00:06:42,180 --> 00:06:42,980 >> OMPICA: Già. 136 00:06:42,980 --> 00:06:43,630 >> JASON HIRSCHHORN: OK. 137 00:06:43,630 --> 00:06:47,390 Quindi un'altra domanda si potrebbe avere Domande era sto preveggente? 138 00:06:47,390 --> 00:06:48,630 La risposta è sì. 139 00:06:48,630 --> 00:06:52,060 Nella sezione prima del quiz, ho chiesto voi ragazzi per codificare sia Sterling e 140 00:06:52,060 --> 00:06:52,980 otto a i. 141 00:06:52,980 --> 00:06:54,770 Entrambi successo a apparire sul quiz. 142 00:06:54,770 --> 00:06:57,510 Così si spera, hai pagato attenzione. 143 00:06:57,510 --> 00:07:02,520 >> E se tu avessi, allora si avrebbe probabilmente fatto bene su quelle due. 144 00:07:02,520 --> 00:07:06,030 Ma otto i, in realtà non abbiamo il codice in classe, ma era, di nuovo, 145 00:07:06,030 --> 00:07:07,500 ha chiesto il quiz. 146 00:07:07,500 --> 00:07:13,270 Così un paio di cose da prendere nota quando codifica otto a i. 147 00:07:13,270 --> 00:07:17,320 La prima cosa, per la domanda, è stato che avevi bisogno di controllare se la stringa 148 00:07:17,320 --> 00:07:20,300 è stato pari a null. 149 00:07:20,300 --> 00:07:28,060 >> Un paio di persone hanno cercato di controllare più tardi nel programma se s staffa mi è stato - 150 00:07:28,060 --> 00:07:30,940 così un carattere specifico in quanto stringa - è stato pari a null. 151 00:07:30,940 --> 00:07:35,600 Ma ricordate, che nulla è sostanzialmente - è bene pensare 152 00:07:35,600 --> 00:07:39,100 null come un puntatore nullo - un puntatore a zero - 153 00:07:39,100 --> 00:07:40,920 da qualche parte nella memoria in cui non si può mai accedere. 154 00:07:40,920 --> 00:07:44,730 >> Quindi, se qualcosa è uguale a null, sa che non è stata inizializzata, 155 00:07:44,730 --> 00:07:46,430 o non c'è niente. 156 00:07:46,430 --> 00:07:50,950 Così s è una stella char, s staffa i è un char. 157 00:07:50,950 --> 00:07:57,410 Quindi ha senso confrontare s null, ma non s staffa i null. 158 00:07:57,410 --> 00:07:59,390 Ma ancora una volta - così che era la prima cosa che si doveva fare - 159 00:07:59,390 --> 00:08:03,510 controllare per assicurarsi che effettivamente ottenuto una stringa reale. 160 00:08:03,510 --> 00:08:08,020 >> Successivamente, si voleva andare attraverso ogni carattere della stringa. 161 00:08:08,020 --> 00:08:12,500 E così sarebbe come una staffa s Io, per esempio, se i è l'iteratore. 162 00:08:12,500 --> 00:08:17,250 E prendere quel personaggio, e ottenere il suo valore effettivo. 163 00:08:17,250 --> 00:08:21,800 Avete memorizzato come char, ma il valore ASCII per lo zero - 164 00:08:21,800 --> 00:08:23,010 zero come un personaggio - 165 00:08:23,010 --> 00:08:25,450 non è in realtà il numero intero zero. 166 00:08:25,450 --> 00:08:28,700 E 'un altro numero che è possibile cercare nella tabella ASCII. 167 00:08:28,700 --> 00:08:30,790 >> Quindi un modo per correggere questo - probabilmente il modo migliore per correggere 168 00:08:30,790 --> 00:08:33,760 che - è sottrarre da esso il valore del carattere - 169 00:08:33,760 --> 00:08:35,140 azzerare come un carattere. 170 00:08:35,140 --> 00:08:38,490 Quindi meno sola offerta, pari a zero, un altro singolo preventivo. 171 00:08:38,490 --> 00:08:44,620 Ciò prendere qualunque numero che avete come char, e farlo uguale a 172 00:08:44,620 --> 00:08:46,720 il numero come un numero intero reale. 173 00:08:46,720 --> 00:08:50,300 >> E che è molto simile all'approccio un sacco di gente ha preso in 174 00:08:50,300 --> 00:08:52,800 problema set 2, con Cesare e Viginere - 175 00:08:52,800 --> 00:08:55,160 tali cifre, quando si sono stati loro rotazione. 176 00:08:55,160 --> 00:08:59,210 Così, dopo aver come un numero da zero a nove, poi - a seconda 177 00:08:59,210 --> 00:09:02,750 dove va nel numero finale - è necessario moltiplicare 178 00:09:02,750 --> 00:09:04,120 da una potenza di 10. 179 00:09:04,120 --> 00:09:07,340 >> Alcune persone si sono spostate dalla parte posteriore al anteriore, e moltiplicato l'individuo 180 00:09:07,340 --> 00:09:08,940 numero per una potenza di 10. 181 00:09:08,940 --> 00:09:11,160 Alcune persone si sono spostate da il front to back - 182 00:09:11,160 --> 00:09:14,430 e così ha preso il massimo i numeri di ordinazione prima - 183 00:09:14,430 --> 00:09:18,190 e avrebbe salvato quelle in variabile contatore globale. 184 00:09:18,190 --> 00:09:20,880 E poi ogni volta attraverso FOR loop, moltiplicare quel gigante mondiale 185 00:09:20,880 --> 00:09:25,640 contrastare variabile da 10, per rendere spazio per il carattere successivo. 186 00:09:25,640 --> 00:09:28,750 >> Così che era un po 'di confusione, senza me scrivere sulla scheda. 187 00:09:28,750 --> 00:09:31,550 Ma la soluzione campione è a vostra disposizione. 188 00:09:31,550 --> 00:09:32,870 Ma quelli erano i grandi cose stavamo cercando. 189 00:09:32,870 --> 00:09:36,400 Anche un controllo per assicurarsi che ogni carattere individuale era effettivamente un 190 00:09:36,400 --> 00:09:39,780 carattere tra zero e nove, e non altri caratteri, come una A, 191 00:09:39,780 --> 00:09:41,160 per esempio. 192 00:09:41,160 --> 00:09:43,150 >> Quelle erano le cose che stavamo cercando in tale questione. 193 00:09:43,150 --> 00:09:46,510 194 00:09:46,510 --> 00:09:47,980 Questo risponde alla tua domanda? 195 00:09:47,980 --> 00:09:49,320 >> OMPICA: Già. 196 00:09:49,320 --> 00:09:50,240 >> JASON HIRSCHHORN: OK. 197 00:09:50,240 --> 00:09:53,940 Ci sono altre domande Quiz su 0? 198 00:09:53,940 --> 00:09:55,440 Che dire di compilazione? 199 00:09:55,440 --> 00:09:56,740 Tutti compilazione giusto? 200 00:09:56,740 --> 00:09:58,370 No. 201 00:09:58,370 --> 00:09:58,840 C'erano - 202 00:09:58,840 --> 00:10:01,010 [Ride] 203 00:10:01,010 --> 00:10:03,265 Tutte le domande circa l' processo di compilazione? 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 >> [CARTA STORMIR] 207 00:10:11,090 --> 00:10:11,520 >> JASON HIRSCHHORN: sì. 208 00:10:11,520 --> 00:10:11,700 Michael. 209 00:10:11,700 --> 00:10:14,140 >> MICHAEL: E 'il numero 7 - casuale? 210 00:10:14,140 --> 00:10:16,500 >> JASON HIRSCHHORN: numero 7. 211 00:10:16,500 --> 00:10:20,670 Numero 7 era ottenere un numero intero casuale. 212 00:10:20,670 --> 00:10:21,110 Eccellente. 213 00:10:21,110 --> 00:10:25,630 Così si è dato un numero intero a e un intero b, e volete una casuale 214 00:10:25,630 --> 00:10:28,710 intero compreso tra ae b. 215 00:10:28,710 --> 00:10:31,740 Possiamo effettivamente scrivere questo su il consiglio, perché questo 216 00:10:31,740 --> 00:10:33,320 Era una riga di codice - 217 00:10:33,320 --> 00:10:34,390 un modo per farlo. 218 00:10:34,390 --> 00:10:37,810 >> Quindi stiamo dato Drand come funzione abbiamo potuto usare. 219 00:10:37,810 --> 00:10:38,820 E che cosa Drand - 220 00:10:38,820 --> 00:10:40,290 ammesso che è stato seminato - 221 00:10:40,290 --> 00:10:42,316 ciò che Drand ritorno? 222 00:10:42,316 --> 00:10:44,840 >> MICHAEL: Un float tra 0.0 e 1.0. 223 00:10:44,840 --> 00:10:45,530 >> JASON HIRSCHHORN: Un numero - sì. 224 00:10:45,530 --> 00:10:47,910 Un numero compreso tra 0 e 1. 225 00:10:47,910 --> 00:10:51,760 E così abbiamo b e a. 226 00:10:51,760 --> 00:10:55,480 E poi abbiamo il nostro numero casuale tra 0 e 1 dato a noi da Drand. 227 00:10:55,480 --> 00:11:01,480 228 00:11:01,480 --> 00:11:06,630 Alcune persone hanno cercato di mettere b, oppure b meno una, o qualcosa dentro quelle 229 00:11:06,630 --> 00:11:07,960 parentesi. 230 00:11:07,960 --> 00:11:11,210 Ciò significherebbe che sono argomenti a questa funzione. 231 00:11:11,210 --> 00:11:13,450 >> Drand non prende alcun argomento - come getString fa 232 00:11:13,450 --> 00:11:14,330 Non prendere argomenti. 233 00:11:14,330 --> 00:11:16,600 Quindi è solo parentesi aprire, chiudere Paren - e che, a sua volta, è 234 00:11:16,600 --> 00:11:17,330 la chiamata di funzione. 235 00:11:17,330 --> 00:11:19,770 E che ti dà un numero tra 0 e 1. 236 00:11:19,770 --> 00:11:22,820 Certo, abbiamo una vasta gamma che i numeri possono essere in 237 00:11:22,820 --> 00:11:28,470 >> Dire, se b è 10 ed è un 5, abbiamo davvero desiderare un numero con un intervallo di 5. 238 00:11:28,470 --> 00:11:36,940 Così la prossima cosa che dobbiamo fare è moltiplicarlo per la gamma b meno una. 239 00:11:36,940 --> 00:11:40,380 Quindi, supponendo che è moltiplicato. 240 00:11:40,380 --> 00:11:42,590 E che ci darà un numero all'interno di un determinato intervallo. 241 00:11:42,590 --> 00:11:46,610 E questo intervallo specifico è il differenza tra b meno una. 242 00:11:46,610 --> 00:11:50,030 >> E, infine, che ti do solo da - dire l'intervallo tra b meno una 243 00:11:50,030 --> 00:11:52,520 è 5, che ti do noi un numero da 0 a 5. 244 00:11:52,520 --> 00:11:56,000 Ma se a è in realtà 5, abbiamo bisogno di aumentare questo intervallo fino a dove è 245 00:11:56,000 --> 00:12:01,380 in realtà dovrebbe essere, con l'aggiunta di una. 246 00:12:01,380 --> 00:12:02,580 Così che ottiene il diritto di logica. 247 00:12:02,580 --> 00:12:03,745 E poi, avreste un'altra domanda? 248 00:12:03,745 --> 00:12:04,547 >> MICHAEL: No. 249 00:12:04,547 --> 00:12:06,010 Mi sento veramente stupido adesso. 250 00:12:06,010 --> 00:12:06,405 [Ride] 251 00:12:06,405 --> 00:12:06,730 >> JASON HIRSCHHORN: No. 252 00:12:06,730 --> 00:12:08,640 Non si sentono veramente stupido. 253 00:12:08,640 --> 00:12:10,560 Un certo numero di persone ha lottato con questa domanda. 254 00:12:10,560 --> 00:12:13,920 E poi, l'altra domanda è, Drand, hai detto, ti dà un galleggiante - 255 00:12:13,920 --> 00:12:14,940 restituisce un float. 256 00:12:14,940 --> 00:12:18,020 Ma questa funzione effettivamente chiesto per un numero intero da restituire. 257 00:12:18,020 --> 00:12:23,700 >> Non è necessario lanciare esplicitamente in un numero intero, perché questi 258 00:12:23,700 --> 00:12:29,090 operazioni saranno trattarlo come un tutto float - come un numero in virgola mobile. 259 00:12:29,090 --> 00:12:31,570 Ti piace questa volontà - anche se questo è un numero intero, questa volontà 260 00:12:31,570 --> 00:12:32,890 essere moltiplicati correttamente. 261 00:12:32,890 --> 00:12:34,000 Tutta la moltiplicazione funzionerà. 262 00:12:34,000 --> 00:12:35,060 Non c'è bisogno di lanciare qui. 263 00:12:35,060 --> 00:12:36,480 In realtà, non si dovrebbe lanciarla. 264 00:12:36,480 --> 00:12:37,310 >> Che sarebbe - 265 00:12:37,310 --> 00:12:40,750 se volesse lanciare un numero che è tra 0 e 1 - 266 00:12:40,750 --> 00:12:42,680 un numero casuale, a virgola mobile - 267 00:12:42,680 --> 00:12:47,850 allora o sarà solo 0 o 1, così perderai tutto ciò precisione. 268 00:12:47,850 --> 00:12:50,120 Ma alla fine, quando si torna, diventa automaticamente 269 00:12:50,120 --> 00:12:51,620 rispedito come un intero. 270 00:12:51,620 --> 00:12:56,870 Quindi non c'è bisogno di fare che la colata te. 271 00:12:56,870 --> 00:13:00,810 >> Quindi questa è stata la risposta di tale questione, il numero 7. 272 00:13:00,810 --> 00:13:02,190 Tutte le altre domande su Quiz 0? 273 00:13:02,190 --> 00:13:03,300 Sì, Annie. 274 00:13:03,300 --> 00:13:05,050 >> ANNIE: Quando usiamo ricorsiva - 275 00:13:05,050 --> 00:13:07,850 quando usiamo loop iterativi? 276 00:13:07,850 --> 00:13:10,210 >> JASON HIRSCHHORN: Quando si usa ricorsiva - in modo più generale, l' 277 00:13:10,210 --> 00:13:14,110 pro e contro di ricorsione contro un approccio iterativo. 278 00:13:14,110 --> 00:13:17,110 Qualcuno può offrire un pro o un contro? 279 00:13:17,110 --> 00:13:19,460 Si prega di? 280 00:13:19,460 --> 00:13:20,140 Non è possibile a nessuno. 281 00:13:20,140 --> 00:13:22,526 Chi può offrire un pro o un contro? 282 00:13:22,526 --> 00:13:26,963 >> [CARTA STORMIR] 283 00:13:26,963 --> 00:13:29,730 >> STUDENT 1: ricorsiva è meno codifica - meno di battitura? 284 00:13:29,730 --> 00:13:33,170 >> JASON HIRSCHHORN: Quindi in generale, ricorsione soprattutto, una funzione - 285 00:13:33,170 --> 00:13:35,750 o un algoritmo simile unione liste - che si presta 286 00:13:35,750 --> 00:13:37,300 ad un approccio ricorsivo - 287 00:13:37,300 --> 00:13:40,710 potrebbe essere più semplice di codificare in modo ricorsivo. 288 00:13:40,710 --> 00:13:43,940 E proprio più senso per farlo in modo ricorsivo. 289 00:13:43,940 --> 00:13:46,230 Quindi sarebbe un professionista per ricorsione. 290 00:13:46,230 --> 00:13:46,610 Altri? 291 00:13:46,610 --> 00:13:47,467 Sì? 292 00:13:47,467 --> 00:13:49,240 >> STUDENTE 2: Con per ricorsione - 293 00:13:49,240 --> 00:13:50,940 Esso utilizza più memoria. 294 00:13:50,940 --> 00:13:52,200 >> JASON HIRSCHHORN: So esattamente a destra. 295 00:13:52,200 --> 00:13:55,720 Una funzione ricorsiva manterrà aggiungendo dello stack frame nello stack. 296 00:13:55,720 --> 00:13:59,690 Quindi, se si opera su un lotto di numeri, e chiamare questo 297 00:13:59,690 --> 00:14:02,560 funzionare molto, allora si avrà certamente occupano più memoria, mentre 298 00:14:02,560 --> 00:14:05,810 un approccio iterativo solo mettere uno impilare fotogramma sullo stack, perché 299 00:14:05,810 --> 00:14:08,420 tutto avviene all'interno di una funzione. 300 00:14:08,420 --> 00:14:11,010 >> Eventuali altri pro ei contro? 301 00:14:11,010 --> 00:14:11,500 Già. 302 00:14:11,500 --> 00:14:12,550 >> STUDENTE 3: Pro per ricorsione. 303 00:14:12,550 --> 00:14:15,950 Non è necessario determinare in anticipo quante volte l' 304 00:14:15,950 --> 00:14:17,660 codice doveva essere ripetuto. 305 00:14:17,660 --> 00:14:22,810 Si può avere un numero predeterminato di volte che si deve scorrere, poi 306 00:14:22,810 --> 00:14:26,420 ricorsione è meglio, perché prende tale risultato. 307 00:14:26,420 --> 00:14:27,780 >> JASON HIRSCHHORN: Penso che sia vero. 308 00:14:27,780 --> 00:14:30,770 Ma credo che in entrambi i casi si farebbe mai - 309 00:14:30,770 --> 00:14:33,290 si sarebbe probabilmente ottenere qualche input dall'utente. 310 00:14:33,290 --> 00:14:35,990 O questa funzione dovrebbe avere un po 'di ingresso che avrebbe determinare quante volte 311 00:14:35,990 --> 00:14:36,730 dovrebbe funzionare. 312 00:14:36,730 --> 00:14:39,520 Quindi in generale, non sarebbe codificare - anche in un approccio iterativo - come 313 00:14:39,520 --> 00:14:40,940 molte volte che ciclo deve essere eseguito. 314 00:14:40,940 --> 00:14:46,100 315 00:14:46,100 --> 00:14:48,670 >> Hai avuto un altro eri pensando, Annie? 316 00:14:48,670 --> 00:14:49,330 OK. 317 00:14:49,330 --> 00:14:51,650 Così quelli sono probabilmente i due - 318 00:14:51,650 --> 00:14:54,370 il più grande pro e il più grande confermare una ricorsiva contro 319 00:14:54,370 --> 00:14:57,080 un approccio iterativo. 320 00:14:57,080 --> 00:14:57,690 OK. 321 00:14:57,690 --> 00:14:59,465 Tutto il resto su Quiz 0? 322 00:14:59,465 --> 00:15:08,940 323 00:15:08,940 --> 00:15:09,920 >> Andiamo avanti. 324 00:15:09,920 --> 00:15:15,260 File I / O. C'è un meraviglioso corto questa settimana sul file I / O che si spera 325 00:15:15,260 --> 00:15:19,270 avete visto multiplo volte, e ammirato. 326 00:15:19,270 --> 00:15:22,910 Un sacco di lavoro è andato in questo, e ho sentito dire che è follemente disponibile. 327 00:15:22,910 --> 00:15:25,740 Ho inserito anche il link in questa diapositiva, nel caso in cui non hai avuto un 328 00:15:25,740 --> 00:15:29,160 possibilità di vedere 10 volte. 329 00:15:29,160 --> 00:15:35,280 >> Quindi, ci accingiamo ad andare brevemente il grandi passi verso l'apertura e di lavoro 330 00:15:35,280 --> 00:15:38,400 con i file, e quindi ci accingiamo a tuffarsi in un problema di codifica prima 331 00:15:38,400 --> 00:15:40,400 esaminare il problema proposto. 332 00:15:40,400 --> 00:15:44,330 Quindi, di nuovo, ho intenzione di mettere questo su lo schermo, ma ho intenzione di parlare per 333 00:15:44,330 --> 00:15:47,630 appena un minuto su ciò che siamo facendo qui con il file I/O-- 334 00:15:47,630 --> 00:15:49,090 che cosa significa? 335 00:15:49,090 --> 00:15:55,280 >> Questo significa che possiamo creare il nostro programmi, e quindi avere i nostri programmi 336 00:15:55,280 --> 00:16:00,370 uscita, e non hanno fatto alcun impatto sulla il mondo esterno del nostro programma. 337 00:16:00,370 --> 00:16:04,630 Ma quando cominciamo a lavorare con i file - sia la loro lettura e la creazione di 338 00:16:04,630 --> 00:16:10,460 loro - possiamo avere qualche effetto sulla al di fuori del nostro programma di mondo. 339 00:16:10,460 --> 00:16:15,440 >> Proprio come se Microsoft Word non era in grado per fare tutti i documenti di Word, quindi 340 00:16:15,440 --> 00:16:18,710 una volta Microsoft Word smettere, tutti i tuoi lavoro sarebbe andato, e sarebbe 341 00:16:18,710 --> 00:16:19,740 davvero inutile. 342 00:16:19,740 --> 00:16:23,620 Facciamo infine vogliamo essere in grado di scrivere programmi che possono influenzare l' 343 00:16:23,620 --> 00:16:31,350 mondo che li circonda, sia prendendo in Ingressi complesse - in termini di file e 344 00:16:31,350 --> 00:16:37,080 tramite file, e anche la creazione di interessante e uscite convincenti - 345 00:16:37,080 --> 00:16:39,520 in termini di diversi tipi di file. 346 00:16:39,520 --> 00:16:43,730 >> Ecco perché stiamo iniziando a imparare a lavorare con i file. 347 00:16:43,730 --> 00:16:47,080 Più specificamente, ciò che facciamo è la seguente. 348 00:16:47,080 --> 00:16:47,680 E 'molto semplice. 349 00:16:47,680 --> 00:16:51,530 Ci sono solo un paio di passi, e sono elencati qui su questo codice. 350 00:16:51,530 --> 00:16:55,130 Quindi stiamo per passare attraverso questo codice riga per riga. 351 00:16:55,130 --> 00:16:57,630 >> In primo luogo, si vede evidenziato - 352 00:16:57,630 --> 00:17:01,330 quando si lavora con un file, indipendentemente dal tipo di file è, 353 00:17:01,330 --> 00:17:02,670 è necessario aprirlo. 354 00:17:02,670 --> 00:17:05,130 E cioè con una chiamata a fopen - 355 00:17:05,130 --> 00:17:05,950 proprio qui. 356 00:17:05,950 --> 00:17:07,980 Di includere il nome del file. 357 00:17:07,980 --> 00:17:11,930 Se il file non si trova nella directory, o la cartella in cui questo programma 358 00:17:11,930 --> 00:17:15,910 vita, allora si devono anche includere un percorso in cui il file è. 359 00:17:15,910 --> 00:17:19,099 >> Stiamo andando a supporre che questa file chiamato "text.txt" - 360 00:17:19,099 --> 00:17:24,220 un semplice documento di testo - è in stessa cartella di questo programma. 361 00:17:24,220 --> 00:17:26,859 Quindi, questa è un'altra cosa da tenere in mente - che se si desidera aprire un file 362 00:17:26,859 --> 00:17:30,050 da qualche altra parte, hai veramente bisogno per includere la sua posizione. 363 00:17:30,050 --> 00:17:33,520 >> In secondo luogo, è possibile passare un argomento fopen, ed è quello che si vuole fare 364 00:17:33,520 --> 00:17:34,620 con il file. 365 00:17:34,620 --> 00:17:38,450 Ci sono tre principali argomenti che avete intenzione di passare a fopen. 366 00:17:38,450 --> 00:17:40,060 Chi mi può dare quei tre? 367 00:17:40,060 --> 00:17:44,960 368 00:17:44,960 --> 00:17:47,130 Chi mi può dare una di loro? 369 00:17:47,130 --> 00:17:48,130 Sì. 370 00:17:48,130 --> 00:17:50,010 >> STUDENT 4: Il nome del file? 371 00:17:50,010 --> 00:17:50,440 >> JASON HIRSCHHORN: Mi dispiace. 372 00:17:50,440 --> 00:17:55,490 Tre argomenti principali è possibile passare come secondo argomento di fopen. 373 00:17:55,490 --> 00:17:57,060 Hai ragione - il nome del file è il primo argomento. 374 00:17:57,060 --> 00:18:01,620 Ma il secondo argomento di fopen sono generalmente tre corde, e - sì. 375 00:18:01,620 --> 00:18:02,210 Aleja. 376 00:18:02,210 --> 00:18:03,490 >> ALEJA: A per l'aggiunta. 377 00:18:03,490 --> 00:18:06,840 >> JASON HIRSCHHORN: A, se si vuole aggiungere a un file già esistente. 378 00:18:06,840 --> 00:18:07,810 >> STUDENTE 5: R per la lettura. 379 00:18:07,810 --> 00:18:09,930 >> JASON HIRSCHHORN: R, se si vuole leggere da un file. 380 00:18:09,930 --> 00:18:10,670 >> STUDENTE 6: W per la scrittura. 381 00:18:10,670 --> 00:18:12,840 >> JASON HIRSCHHORN: E w, se si voglia di scrivere in un file. 382 00:18:12,840 --> 00:18:17,570 Quindi, in questo caso, stiamo scrivendo al file, così abbiamo w. 383 00:18:17,570 --> 00:18:22,360 Si apre, si hanno anche per salvare l' file da qualche parte, e questo è il 384 00:18:22,360 --> 00:18:26,000 codice alla sinistra delle l'operatore di assegnazione - 385 00:18:26,000 --> 00:18:31,220 Sto creando un puntatore a un file chiamato, in questo caso, file. 386 00:18:31,220 --> 00:18:36,070 >> Non stiamo andando a preoccuparsi che cosa questo tutti i tappi cosa FILE è. 387 00:18:36,070 --> 00:18:40,600 Basti dire, è un lungo flusso di zero e uno. 388 00:18:40,600 --> 00:18:44,970 Ed è così che ci accingiamo a operare e capire. 389 00:18:44,970 --> 00:18:47,300 >> La prossima cosa che dobbiamo fare - e questo è incredibilmente importante - 390 00:18:47,300 --> 00:18:49,070 ogni volta che si apre un file - 391 00:18:49,070 --> 00:18:54,250 infatti, ogni volta che si chiama malloc, per esempio, e un po 'di memoria e provare 392 00:18:54,250 --> 00:18:57,980 e salvarlo in un puntatore, è sempre vuole controllare per assicurarsi che tale 393 00:18:57,980 --> 00:19:00,230 funzione non ha restituito nulla. 394 00:19:00,230 --> 00:19:05,230 >> Quindi, in questo caso, stiamo verificando fare certo che abbiamo effettivamente aperto la 395 00:19:05,230 --> 00:19:10,230 il file correttamente, e non c'era nessun errore nel nostro programma. 396 00:19:10,230 --> 00:19:15,160 Poi, una volta che abbiamo controllato per assicurarsi che abbiamo un file di lavoro, possiamo 397 00:19:15,160 --> 00:19:18,520 scrivere o leggere, o aggiungere al file. 398 00:19:18,520 --> 00:19:24,270 In questo caso, sto semplicemente stampando una riga a questo file. 399 00:19:24,270 --> 00:19:25,450 >> Come faccio a sapere che? 400 00:19:25,450 --> 00:19:27,990 Beh, io sto usando questa funzione chiamato fprintf. 401 00:19:27,990 --> 00:19:30,970 Tutte le funzioni si intende utilizzare durante la scrittura o lettura da, o 402 00:19:30,970 --> 00:19:34,950 la gestione di file sarà simile a funzioni che hai visto prima, ma 403 00:19:34,950 --> 00:19:38,420 inizia con la lettera F, in piedi per il file. 404 00:19:38,420 --> 00:19:43,440 E fprintf, a differenza nostra stampa normale app, prende un argomento aggiuntivo, 405 00:19:43,440 --> 00:19:47,800 e questo è il file in cui si consiglia di stampare questa linea. 406 00:19:47,800 --> 00:19:50,640 >> Io non ho nulla da il diritto di ohai. 407 00:19:50,640 --> 00:19:52,860 Non ho la terza argomento di printf - 408 00:19:52,860 --> 00:19:57,030 o il secondo argomento a printf, l' terzo argomento fprintf, perché io 409 00:19:57,030 --> 00:19:59,480 non hanno alcun segnaposto qui. 410 00:19:59,480 --> 00:20:01,070 Io non sono comprese le eventuali variabili. 411 00:20:01,070 --> 00:20:06,070 Ma ancora una volta, fprintf e tutti questi file di funzioni che operano con i file 412 00:20:06,070 --> 00:20:09,820 sono generalmente andando ad avere bisogno del file su cui sono operativi. 413 00:20:09,820 --> 00:20:15,960 >> Infine, l'ultima cosa importante fare è chiudere il file, proprio come 414 00:20:15,960 --> 00:20:19,530 con - ogni volta che malloc qualcosa, vogliamo liberare qualcosa, per non 415 00:20:19,530 --> 00:20:22,730 una perdita di memoria - vogliamo per chiudere il nostro file. 416 00:20:22,730 --> 00:20:28,180 Se questo programma esce senza chiusura il file, le probabilità sono niente sarebbe andato 417 00:20:28,180 --> 00:20:30,050 sbagliato, soprattutto se era un piccolo file. 418 00:20:30,050 --> 00:20:35,020 >> Ma è certamente un buon stile di codifica e la pratica di chiudere sempre il file 419 00:20:35,020 --> 00:20:38,050 quando hai finito di usarlo. 420 00:20:38,050 --> 00:20:43,630 In modo che sia le basi di file I / O. Avete probabilmente visto che prima, o 421 00:20:43,630 --> 00:20:45,710 guardato in quel fantastico breve. 422 00:20:45,710 --> 00:20:48,410 Qualcuno ha domande, prima di andiamo in qualche codifica pratica 423 00:20:48,410 --> 00:20:51,800 problemi, circa file I / O o passi che ho appena andato oltre? 424 00:20:51,800 --> 00:21:00,198 425 00:21:00,198 --> 00:21:03,162 >> [DATTILOGRAFIA SUONI] 426 00:21:03,162 --> 00:21:04,150 >> JASON HIRSCHHORN: Ti una domanda, Avi? 427 00:21:04,150 --> 00:21:04,660 >> AVI: No. 428 00:21:04,660 --> 00:21:04,740 >> JASON HIRSCHHORN: OK. 429 00:21:04,740 --> 00:21:06,746 Ho intenzione di aspettare un altro sette secondi. 430 00:21:06,746 --> 00:21:07,590 [Ride] 431 00:21:07,590 --> 00:21:08,620 Questo è davvero un buon suggerimento. 432 00:21:08,620 --> 00:21:10,750 Voi ragazzi proprio non mi piace domande. 433 00:21:10,750 --> 00:21:11,660 Va bene. 434 00:21:11,660 --> 00:21:12,330 OK. 435 00:21:12,330 --> 00:21:17,620 Quindi il nostro problema prima pratica è, siamo andando a duplicare la funzione di 436 00:21:17,620 --> 00:21:22,330 uno strumento a riga di comando che probabilmente usato prima - copia - 437 00:21:22,330 --> 00:21:23,500 lo strumento di copia. 438 00:21:23,500 --> 00:21:28,050 Se si digita cp e poi passarlo due argomenti nel vostro terminale, è possibile 439 00:21:28,050 --> 00:21:28,980 copiare un file. 440 00:21:28,980 --> 00:21:31,220 Ed è quello che stiamo andando scrivere adesso. 441 00:21:31,220 --> 00:21:35,830 >> Quindi, di nuovo, leggendo di questa diapositiva, mi piacerebbe di scrivere un programma che prende 442 00:21:35,830 --> 00:21:38,130 due e solo due da riga di comando argomenti - 443 00:21:38,130 --> 00:21:40,750 un file di origine e un file di destinazione - 444 00:21:40,750 --> 00:21:44,590 e copia il contenuto della sorgente file per il file di destinazione 445 00:21:44,590 --> 00:21:46,960 un byte alla volta. 446 00:21:46,960 --> 00:21:48,510 Quindi questo è molto da chiedere. 447 00:21:48,510 --> 00:21:52,200 >> Ancora una volta, un buon approccio a questo è di Non andare dritto al codice C, ma 448 00:21:52,200 --> 00:21:54,280 scomposizione in un paio di passaggi. 449 00:21:54,280 --> 00:21:58,400 In primo luogo, pensare la logica - esattamente quello che ti sto chiedendo di fare - 450 00:21:58,400 --> 00:22:00,620 e comprendere tutte le passi per questo problema. 451 00:22:00,620 --> 00:22:04,410 Non in C, solo in alcuni pseudocodice, o anche un modello mentale di 452 00:22:04,410 --> 00:22:06,030 cosa sta succedendo. 453 00:22:06,030 --> 00:22:10,050 >> Poi, una volta che hai il pseudocodice verso il basso, capire come lo pseudocodice 454 00:22:10,050 --> 00:22:14,600 mappe sul strumenti e tutte le cose che abbiamo imparato ad usare in C. 455 00:22:14,600 --> 00:22:19,070 >> E, infine, una volta che avete tutto quello che insieme, è possibile codificare il problema. 456 00:22:19,070 --> 00:22:23,370 Prendere 5 a 10 minuti per lavorare su questo problema. 457 00:22:23,370 --> 00:22:25,800 Metterò le istruzioni back up in un secondo. 458 00:22:25,800 --> 00:22:27,990 E poi stiamo per andare oltre pseudocodice, e codice 459 00:22:27,990 --> 00:22:29,230 dal vivo come gruppo. 460 00:22:29,230 --> 00:22:31,640 >> Se avete domande, mentre sei lavorare su questo, sentitevi liberi di aumentare 461 00:22:31,640 --> 00:22:34,260 la tua mano, e io verrò intorno e rispondere loro. 462 00:22:34,260 --> 00:22:37,020 463 00:22:37,020 --> 00:22:39,330 >> STUDENTE 7: Posso strisciare un pezzo di carta? 464 00:22:39,330 --> 00:22:41,537 >> JASON HIRSCHHORN: Che cosa succede? 465 00:22:41,537 --> 00:26:46,047 466 00:26:46,047 --> 00:26:48,043 >> [DATTILOGRAFIA SUONI] 467 00:26:48,043 --> 00:26:48,730 >> JASON HIRSCHHORN: OK. 468 00:26:48,730 --> 00:26:51,710 Andiamo oltre il pseudocodice prima, e allora ti darò un paio di più 469 00:26:51,710 --> 00:26:52,960 minuti per finire la codifica. 470 00:26:52,960 --> 00:26:55,540 471 00:26:55,540 --> 00:26:58,650 >> Chi vorrebbe cominciare fuori di me con la prima linea di 472 00:26:58,650 --> 00:27:00,030 pseudocodice per questa funzione? 473 00:27:00,030 --> 00:27:03,330 474 00:27:03,330 --> 00:27:05,740 >> STUDENTE 8: Verificare che vi è stata data due file. 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 E se non siamo? 478 00:27:22,990 --> 00:27:25,974 >> STUDENTE 8: Vorrei restituire 0. 479 00:27:25,974 --> 00:27:27,872 >> JASON HIRSCHHORN: Dovremmo tornare 0? 480 00:27:27,872 --> 00:27:30,182 >> STUDENTE 8: Ritorno a - 481 00:27:30,182 --> 00:27:30,650 tranciatura. 482 00:27:30,650 --> 00:27:30,850 Scusi. 483 00:27:30,850 --> 00:27:31,210 >> JASON HIRSCHHORN: Già. 484 00:27:31,210 --> 00:27:32,710 Probabilmente no 0. 485 00:27:32,710 --> 00:27:34,680 Poiché 0 significa tutto era buono. 486 00:27:34,680 --> 00:27:35,030 OK. 487 00:27:35,030 --> 00:27:36,730 Ecco, questo è la prima linea di pseudocodice. 488 00:27:36,730 --> 00:27:38,715 Chi ha la seconda linea di pseudocodice? 489 00:27:38,715 --> 00:27:40,630 >> STUDENTE 9: Aprire entrambi i file? 490 00:27:40,630 --> 00:27:41,880 >> JASON HIRSCHHORN: Aprire entrambi i file. 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 >> STUDENTE 10: Verificare se il file è NULL? 494 00:27:52,850 --> 00:28:10,906 495 00:28:10,906 --> 00:28:12,580 >> JASON HIRSCHHORN: Verificare certo non sono NULL. 496 00:28:12,580 --> 00:28:15,800 Per inciso - 497 00:28:15,800 --> 00:28:17,540 tagliare 0 - 498 00:28:17,540 --> 00:28:18,887 è che NULL? 499 00:28:18,887 --> 00:28:20,080 >> STUDENTE 11: No. 500 00:28:20,080 --> 00:28:21,190 >> JASON HIRSCHHORN: Questo non è NULL. 501 00:28:21,190 --> 00:28:23,400 Che si chiama il terminatore NULL. 502 00:28:23,400 --> 00:28:25,580 In realtà è scritto con una sola l. 503 00:28:25,580 --> 00:28:28,580 Quindi la verifica qualcosa contro questo - che in realtà è un personaggio - 504 00:28:28,580 --> 00:28:31,710 in modo da controllare qualcosa contro che è non lo stesso controllo per vedere se 505 00:28:31,710 --> 00:28:32,690 è uguale a NULL. 506 00:28:32,690 --> 00:28:34,100 >> E alcune persone - 507 00:28:34,100 --> 00:28:36,040 sulle loro quiz e il loro problema set - hanno ottenuto l' 508 00:28:36,040 --> 00:28:36,890 due di quelli confusi. 509 00:28:36,890 --> 00:28:38,830 Ma i due di questi sono infatti differente. 510 00:28:38,830 --> 00:28:40,220 Uno finisce una stringa - 511 00:28:40,220 --> 00:28:43,210 uno è un puntatore a 0. 512 00:28:43,210 --> 00:28:46,490 >> STUDENTE 12: Perché non si dovrebbe verificare assicurarsi che i file non sono NULL 513 00:28:46,490 --> 00:28:48,670 prima di aprirli? 514 00:28:48,670 --> 00:28:54,772 >> JASON HIRSCHHORN: So aperto salva qualcosa in quel file. 515 00:28:54,772 --> 00:28:57,780 E se si torna qui - 516 00:28:57,780 --> 00:28:59,520 quindi questa linea - fopen - 517 00:28:59,520 --> 00:29:05,300 vi darà un indirizzo e negozio tale indirizzo nel file se funziona. 518 00:29:05,300 --> 00:29:07,650 Se non funziona, memorizza NULL - 519 00:29:07,650 --> 00:29:08,020 >> STUDENTE 12: Oh. 520 00:29:08,020 --> 00:29:08,180 OK. 521 00:29:08,180 --> 00:29:08,500 Avete ottenuto. 522 00:29:08,500 --> 00:29:09,050 >> JASON HIRSCHHORN: In file. 523 00:29:09,050 --> 00:29:11,990 Così non si può controllare NULL prima di aver aperto. 524 00:29:11,990 --> 00:29:13,520 NULL significa qualcosa non ha funzionare correttamente. 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 Quindi, verificare che nessuno dei due è? 528 00:29:22,590 --> 00:29:23,200 O sono? 529 00:29:23,200 --> 00:29:23,770 Che cosa pensiamo? 530 00:29:23,770 --> 00:29:24,310 Andremo con quello. 531 00:29:24,310 --> 00:29:24,520 >> STUDENTE 13: Is. 532 00:29:24,520 --> 00:29:25,020 >> JASON HIRSCHHORN: Is? 533 00:29:25,020 --> 00:29:25,930 Nessuno dei due è? 534 00:29:25,930 --> 00:29:26,350 >> STUDENTE 13: Is. 535 00:29:26,350 --> 00:29:26,390 >> JASON HIRSCHHORN: OK. 536 00:29:26,390 --> 00:29:28,510 Ci sembra di avere un po ' consenso su questo. 537 00:29:28,510 --> 00:29:30,520 Nessuno dei due è NULL. 538 00:29:30,520 --> 00:29:32,250 OK, prossima linea di pseudocodice. 539 00:29:32,250 --> 00:29:33,600 Chi non mi ha ancora dato una linea? 540 00:29:33,600 --> 00:29:37,350 541 00:29:37,350 --> 00:29:38,295 Vi aspettiamo per voi. 542 00:29:38,295 --> 00:29:39,020 Già. 543 00:29:39,020 --> 00:29:40,895 >> STUDENTE 14: Devi leggere dal primo file? 544 00:29:40,895 --> 00:29:42,290 >> JASON HIRSCHHORN: OK. 545 00:29:42,290 --> 00:29:46,240 >> STUDENTE 14: O usiamo fscanf o qualcosa di simile al primo file? 546 00:29:46,240 --> 00:29:50,650 >> JASON HIRSCHHORN: Così vogliamo leggere dal primo file e - 547 00:29:50,650 --> 00:29:51,900 mettiamo che proprio qui. 548 00:29:51,900 --> 00:30:00,600 549 00:30:00,600 --> 00:30:01,880 Leggere dal file di origine. 550 00:30:01,880 --> 00:30:05,370 E poi, cosa facciamo dopo che abbiamo leggere dal file di origine? 551 00:30:05,370 --> 00:30:06,620 Qualcun altro? 552 00:30:06,620 --> 00:30:09,150 553 00:30:09,150 --> 00:30:12,190 >> STUDENTE 15: Scrivere in il file di destinazione? 554 00:30:12,190 --> 00:30:22,080 555 00:30:22,080 --> 00:30:25,620 >> JASON HIRSCHHORN: Scriviamo a il file di destinazione, e - 556 00:30:25,620 --> 00:30:26,210 OK. 557 00:30:26,210 --> 00:30:30,030 Che cosa ci manca? 558 00:30:30,030 --> 00:30:32,460 Qualcun altro che non mi ha dato una riga di codice ancora - di pseudocodice. 559 00:30:32,460 --> 00:30:33,510 Già. 560 00:30:33,510 --> 00:30:36,540 >> STUDENTE 16: Forse si può sempre controllare se c'è qualcosa da leggere per, 561 00:30:36,540 --> 00:30:37,970 come la prossima linea? 562 00:30:37,970 --> 00:30:39,550 Che sono come la linea successiva, vedere se esiste. 563 00:30:39,550 --> 00:30:40,660 >> [ELETTRONICA BEEP] 564 00:30:40,660 --> 00:30:41,095 >> JASON HIRSCHHORN: Oops. 565 00:30:41,095 --> 00:30:43,120 Questo è il mio software journaling. 566 00:30:43,120 --> 00:30:43,580 Sì? 567 00:30:43,580 --> 00:30:44,960 >> STUDENTE 16: Già. 568 00:30:44,960 --> 00:30:48,940 >> JASON HIRSCHHORN: Quindi dare a me ancora una volta. 569 00:30:48,940 --> 00:30:51,640 >> STUDENTE 16: Verificare se c'è ancora una riga successiva dal 570 00:30:51,640 --> 00:30:52,920 file sorgente da leggere. 571 00:30:52,920 --> 00:30:53,500 >> JASON HIRSCHHORN: OK. 572 00:30:53,500 --> 00:30:56,060 Quindi noi non stiamo leggendo righe - leggevano bytes qui - 573 00:30:56,060 --> 00:30:57,590 ma siete sulla strada giusta. 574 00:30:57,590 --> 00:31:00,040 Vogliamo leggere e scrivere fino a non ci sono più byte. 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 E così questi dovrebbero davvero essere rientrato un po ', perché sono lì sotto. 578 00:31:16,940 --> 00:31:17,470 Giusto? 579 00:31:17,470 --> 00:31:20,620 Fino a quando siamo fuori di byte, stiamo andando a leggere dal file di origine e scrivere 580 00:31:20,620 --> 00:31:22,160 per il file di destinazione. 581 00:31:22,160 --> 00:31:24,510 >> E allora, che cosa è l'ultimo linea di pseudocodice? 582 00:31:24,510 --> 00:31:26,380 Qualcuno che non è dato me qualcosa ancora. 583 00:31:26,380 --> 00:31:29,270 584 00:31:29,270 --> 00:31:30,260 >> STUDENTE 17: Chiudere i file? 585 00:31:30,260 --> 00:31:31,510 >> JASON HIRSCHHORN: Esattamente. 586 00:31:31,510 --> 00:31:36,370 587 00:31:36,370 --> 00:31:37,450 Chiudere i file. 588 00:31:37,450 --> 00:31:38,400 Quindi c'è il nostro pseudocodice. 589 00:31:38,400 --> 00:31:41,870 Ho intenzione di mettere il pseudocodice in gedit, e in un paio di minuti siamo 590 00:31:41,870 --> 00:31:44,626 sarà codificare questo insieme. 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 Cerchiamo di iniziare come un gruppo. 594 00:33:58,290 --> 00:33:59,940 Nishant, ho il mio nuovo file. 595 00:33:59,940 --> 00:34:01,130 Ho appena aperto questo. 596 00:34:01,130 --> 00:34:01,880 Documento senza titolo 1. 597 00:34:01,880 --> 00:34:05,490 Qual è la prima cosa che dovrei fare? 598 00:34:05,490 --> 00:34:07,040 >> Nishant: Includere librerie? 599 00:34:07,040 --> 00:34:08,219 >> JASON HIRSCHHORN: OK. 600 00:34:08,219 --> 00:34:11,070 Quali biblioteche? 601 00:34:11,070 --> 00:34:17,570 >> Nishant: stdio.h, stdlib.h, credo? 602 00:34:17,570 --> 00:34:18,000 >> JASON HIRSCHHORN: OK. 603 00:34:18,000 --> 00:34:21,592 Che cosa è stdlib per? 604 00:34:21,592 --> 00:34:23,010 >> Nishant: ho dimenticato. 605 00:34:23,010 --> 00:34:23,219 >> JASON HIRSCHHORN: OK. 606 00:34:23,219 --> 00:34:24,179 Quindi includere stdio. 607 00:34:24,179 --> 00:34:28,630 Cosa devo fare anche prima Comincio codifica? 608 00:34:28,630 --> 00:34:29,710 >> Nishant: Scrivere un colpo di testa? 609 00:34:29,710 --> 00:34:31,830 >> JASON HIRSCHHORN: How posso farlo colorato? 610 00:34:31,830 --> 00:34:34,060 >> [VOCI interponendo] 611 00:34:34,060 --> 00:34:35,040 >> Nishant: Come si ottiene è di colore? 612 00:34:35,040 --> 00:34:38,060 >> JASON HIRSCHHORN: How faccio codifica a colori? 613 00:34:38,060 --> 00:34:38,570 >> Nishant: Non lo so. 614 00:34:38,570 --> 00:34:38,830 Oh. 615 00:34:38,830 --> 00:34:39,389 Salva. 616 00:34:39,389 --> 00:34:39,929 >> JASON HIRSCHHORN: Salva. 617 00:34:39,929 --> 00:34:40,270 Sì. 618 00:34:40,270 --> 00:34:41,760 Dovrei salvarlo come. C. 619 00:34:41,760 --> 00:34:46,239 Quindi salvarlo sul desktop come cp.c. 620 00:34:46,239 --> 00:34:47,280 Dolce. 621 00:34:47,280 --> 00:34:51,199 E se voglio ottenere pieno stile punti, cosa dovrei 622 00:34:51,199 --> 00:34:53,085 includere in alto? 623 00:34:53,085 --> 00:34:58,390 >> Nishant: Si potrebbe scrivere il vostro nome, il nome del programma, e lo scopo 624 00:34:58,390 --> 00:34:59,640 del programma come bene? 625 00:34:59,640 --> 00:35:08,400 626 00:35:08,400 --> 00:35:10,040 >> JASON HIRSCHHORN: Sembra buono. 627 00:35:10,040 --> 00:35:10,470 Eccellente. 628 00:35:10,470 --> 00:35:12,940 Così ci hai iniziato fuori perfettamente. 629 00:35:12,940 --> 00:35:13,720 # Include - 630 00:35:13,720 --> 00:35:15,365 faremo anche scrivere - 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 Quindi penso che sto tutto pronto per andare. 634 00:35:33,520 --> 00:35:38,003 Chi ha la prima riga di codice per me - o le prime righe di codice che 635 00:35:38,003 --> 00:35:41,280 ci vorrà per soddisfare il nostro primo commentare in pseudocodice? 636 00:35:41,280 --> 00:35:41,985 Tu. 637 00:35:41,985 --> 00:35:48,780 >> STUDENTE 18: Non dovrebbe essere int argc, e quindi char * argv? 638 00:35:48,780 --> 00:35:49,490 >> JASON HIRSCHHORN: Penso hai ragione. 639 00:35:49,490 --> 00:35:56,270 Cambiamo a int main, parentesi aperte, int argc, virgola, char * argv? 640 00:35:56,270 --> 00:35:57,150 Ti piace questo? 641 00:35:57,150 --> 00:35:57,410 >> STUDENTE 18: staffe. 642 00:35:57,410 --> 00:35:58,260 >> JASON HIRSCHHORN: staffe. 643 00:35:58,260 --> 00:35:59,860 Aprire la staffa, vicino staffa, close genitore. 644 00:35:59,860 --> 00:36:00,240 Perfetto. 645 00:36:00,240 --> 00:36:02,160 Ora posso prendere gli argomenti della riga di comando. 646 00:36:02,160 --> 00:36:02,430 OK. 647 00:36:02,430 --> 00:36:04,250 Assicuriamo che stiamo dato due file. 648 00:36:04,250 --> 00:36:07,905 Potete darmi anche quello. 649 00:36:07,905 --> 00:36:09,180 >> STUDENTE 18: Se argc - 650 00:36:09,180 --> 00:36:11,060 questo non è uguale a 3. 651 00:36:11,060 --> 00:36:14,360 >> JASON HIRSCHHORN: Se parentesi aperte argc non uguale a 3? 652 00:36:14,360 --> 00:36:16,970 >> STUDENTE 18: Sì, si torna 1 o nulla. 653 00:36:16,970 --> 00:36:17,460 >> JASON HIRSCHHORN: Mi dispiace. 654 00:36:17,460 --> 00:36:19,120 >> STUDENTE 18: Ritorno 1 o nulla. 655 00:36:19,120 --> 00:36:20,270 >> JASON HIRSCHHORN: ritorno 1. 656 00:36:20,270 --> 00:36:22,230 OK? 657 00:36:22,230 --> 00:36:22,970 Grande. 658 00:36:22,970 --> 00:36:24,290 Aprire entrambi i file. 659 00:36:24,290 --> 00:36:26,160 Chi può aiutarmi ad aprire entrambi i file? 660 00:36:26,160 --> 00:36:28,125 Chi non mi ha ancora dato il codice? 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: Quindi tutti i tappi F-I-L-E di origine stelle. 664 00:36:36,145 --> 00:36:39,390 665 00:36:39,390 --> 00:36:40,920 >> JASON HIRSCHHORN: Io vado per eliminare le vocali. 666 00:36:40,920 --> 00:36:41,570 Quelli sono cool. 667 00:36:41,570 --> 00:36:42,716 E 'come Tumblr. 668 00:36:42,716 --> 00:36:44,610 >> STUDENTE 18: Equals fopen - 669 00:36:44,610 --> 00:36:46,612 >> JASON HIRSCHHORN: Uguale fopen? 670 00:36:46,612 --> 00:36:49,870 >> STUDENTE 18: Aperto parentesi, argv, parentesi aperta. 671 00:36:49,870 --> 00:36:50,055 >> JASON HIRSCHHORN: Aspetta. 672 00:36:50,055 --> 00:36:50,240 Scusi. 673 00:36:50,240 --> 00:36:51,050 Aperto parentesi. 674 00:36:51,050 --> 00:36:51,456 OK. 675 00:36:51,456 --> 00:36:53,080 >> STUDENTE 18: Già. 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 >> STUDENTE 18: Già. 679 00:36:56,140 --> 00:36:58,540 Argv parentesi aperta 1 - 680 00:36:58,540 --> 00:36:59,730 Sì. 681 00:36:59,730 --> 00:37:06,470 E poi virgola, e quindi aprire doppia citazione, r, doppia citazione, 682 00:37:06,470 --> 00:37:08,250 chiudi parentesi, punto e virgola. 683 00:37:08,250 --> 00:37:09,450 >> JASON HIRSCHHORN: Sweet. 684 00:37:09,450 --> 00:37:10,950 E per quanto riguarda l'altro? 685 00:37:10,950 --> 00:37:16,030 >> STUDENTE 18: Molto simile, ma invece di S-R-C, che ci chiama D-S-T. 686 00:37:16,030 --> 00:37:17,060 >> JASON HIRSCHHORN: Oo! 687 00:37:17,060 --> 00:37:17,772 Mi piace. 688 00:37:17,772 --> 00:37:20,010 >> STUDENTE 18: Just D-S-T. Già. 689 00:37:20,010 --> 00:37:23,057 E poi argv, parentesi aperta, 2. 690 00:37:23,057 --> 00:37:23,200 Già. 691 00:37:23,200 --> 00:37:26,720 E allora w invece di r. 692 00:37:26,720 --> 00:37:27,620 Già. 693 00:37:27,620 --> 00:37:29,630 >> JASON HIRSCHHORN: Great. 694 00:37:29,630 --> 00:37:31,360 Avanti paio di righe. 695 00:37:31,360 --> 00:37:34,040 Inoltre, se qualcuno ha cose da aggiungere linee che abbiamo fatto, sentiti libero di 696 00:37:34,040 --> 00:37:35,690 aggiungere anche quelli. 697 00:37:35,690 --> 00:37:37,520 Controllare per assicurarsi che nessuno dei due è NULL. 698 00:37:37,520 --> 00:37:41,450 Chi mi può dare il codice ho bisogno di soddisfare quella linea di pseudocodice? 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: Se src uguale uguale NULL o dst uguale uguale 702 00:37:58,645 --> 00:38:04,590 NULL, allora si torna - 703 00:38:04,590 --> 00:38:07,130 704 00:38:07,130 --> 00:38:07,976 >> JASON HIRSCHHORN: Cosa? 705 00:38:07,976 --> 00:38:08,890 >> ARCHER: Ritorno 2? 706 00:38:08,890 --> 00:38:09,760 >> JASON HIRSCHHORN: Ritorno 2. 707 00:38:09,760 --> 00:38:14,400 Quindi, se parentesi aperta src uguale è uguale a NULL, o - 708 00:38:14,400 --> 00:38:15,590 qualunque cosa thing's - pipa? 709 00:38:15,590 --> 00:38:16,346 Tubo? 710 00:38:16,346 --> 00:38:17,140 Ti chiamiamo tubo. 711 00:38:17,140 --> 00:38:22,340 Tubo, tubo, dst uguale uguale NULL, ritorno 2. 712 00:38:22,340 --> 00:38:23,900 OK? 713 00:38:23,900 --> 00:38:26,060 Fino a quando siamo fuori di byte - 714 00:38:26,060 --> 00:38:29,820 abbiamo una sorta di saltato su questo passaggio da la parte pseudocodice di andare a qui. 715 00:38:29,820 --> 00:38:31,970 >> Ma fino a quando siamo fuori di byte - cosa fa quel suono mi piace? 716 00:38:31,970 --> 00:38:34,680 Che tipo di struttura C - 717 00:38:34,680 --> 00:38:36,160 ma io non uso la struttura della parola, perché stiamo per iniziare a utilizzare 718 00:38:36,160 --> 00:38:37,350 che in altri casi - 719 00:38:37,350 --> 00:38:39,495 ma strumento C non vi sembra? 720 00:38:39,495 --> 00:38:39,970 >> STUDENTE 19: Un loop. 721 00:38:39,970 --> 00:38:40,980 >> JASON HIRSCHHORN: un loop. 722 00:38:40,980 --> 00:38:43,060 Suona come un loop. 723 00:38:43,060 --> 00:38:49,670 Allora, chi mi può dare la prima linea del codice ciclo proprio qui? 724 00:38:49,670 --> 00:38:56,320 725 00:38:56,320 --> 00:39:01,980 È anche possibile scegliere il tipo di ciclo che vuoi, se mi dai 726 00:39:01,980 --> 00:39:03,215 questa riga di codice. 727 00:39:03,215 --> 00:39:04,150 Ci sono tre tipi. 728 00:39:04,150 --> 00:39:06,530 Si arriva a scegliere. 729 00:39:06,530 --> 00:39:08,080 Vorrei suggerire uno di quelli. 730 00:39:08,080 --> 00:39:08,410 Avi. 731 00:39:08,410 --> 00:39:09,230 Quale vuoi? 732 00:39:09,230 --> 00:39:09,960 >> AVI: PER. 733 00:39:09,960 --> 00:39:11,460 >> JASON HIRSCHHORN: PER. 734 00:39:11,460 --> 00:39:15,180 >> AVI: INT uguale a zero. 735 00:39:15,180 --> 00:39:17,360 >> JASON HIRSCHHORN: OK. 736 00:39:17,360 --> 00:39:18,570 >> AVI: Questa parte non sono sicuro circa. 737 00:39:18,570 --> 00:39:29,080 Ma i è minore dimensione di sorgente stella? 738 00:39:29,080 --> 00:39:31,128 Non sono sicuro di questo. 739 00:39:31,128 --> 00:39:32,580 >> JASON HIRSCHHORN: OK. 740 00:39:32,580 --> 00:39:35,870 >> AVI: Perché si desidera che il dimensione di un file, giusto? 741 00:39:35,870 --> 00:39:41,090 >> JASON HIRSCHHORN: Quindi questo probabilmente non lo farà diaci la dimensione del reale 742 00:39:41,090 --> 00:39:43,010 file in byte. 743 00:39:43,010 --> 00:39:47,680 Quindi, che cosa potevamo fare? 744 00:39:47,680 --> 00:39:48,810 Che è un altro tipo di ciclo? 745 00:39:48,810 --> 00:39:50,180 O dovremmo rimanere con il ciclo FOR? 746 00:39:50,180 --> 00:39:55,350 747 00:39:55,350 --> 00:39:57,900 >> STUDENTE 20: Puoi fare un ciclo WHILE? 748 00:39:57,900 --> 00:40:01,350 E allora, che cosa faresti è you'd - 749 00:40:01,350 --> 00:40:03,930 perché abbiamo un char * per il file. 750 00:40:03,930 --> 00:40:07,950 Quindi, se dobbiamo solo continuare incremento che fino a quando avremmo trovato il carattere NULL a 751 00:40:07,950 --> 00:40:08,500 alla fine di esso? 752 00:40:08,500 --> 00:40:11,130 Oppure no, è che non è come funzionano i file? 753 00:40:11,130 --> 00:40:14,300 >> JASON HIRSCHHORN: Così possiamo continuare incrementare il char * 754 00:40:14,300 --> 00:40:16,340 fino a trovare la NULL - 755 00:40:16,340 --> 00:40:18,580 >> STUDENTE 20: Essenzialmente andare avanti carattere per carattere fino a quando ci ha colpito 756 00:40:18,580 --> 00:40:21,250 la fine del file. 757 00:40:21,250 --> 00:40:21,600 >> JASON HIRSCHHORN: sì. 758 00:40:21,600 --> 00:40:22,560 Ecco, questo è quello che vogliamo fare. 759 00:40:22,560 --> 00:40:24,545 Vogliamo continuare a leggere, carattere per carattere, fino ad arrivare a 760 00:40:24,545 --> 00:40:25,080 la fine del file. 761 00:40:25,080 --> 00:40:25,375 >> STUDENTE 20: Già. 762 00:40:25,375 --> 00:40:25,860 Find - 763 00:40:25,860 --> 00:40:28,540 qual è la fine o stop alla fine di un file di testo. 764 00:40:28,540 --> 00:40:28,620 >> JASON HIRSCHHORN: OK. 765 00:40:28,620 --> 00:40:30,140 Così, quando arriviamo alla fine del file - come facciamo a sapere che abbiamo raggiunto 766 00:40:30,140 --> 00:40:33,200 la fine di un file? 767 00:40:33,200 --> 00:40:34,710 Se sto chiamando - 768 00:40:34,710 --> 00:40:35,910 così facciamo un passo indietro. 769 00:40:35,910 --> 00:40:37,550 Che cos'è una funzione? 770 00:40:37,550 --> 00:40:39,360 Andiamo a questa linea qui. 771 00:40:39,360 --> 00:40:40,630 Leggere dal file di origine. 772 00:40:40,630 --> 00:40:41,880 Chi mi può dare quella riga di codice? 773 00:40:41,880 --> 00:40:45,592 774 00:40:45,592 --> 00:40:47,590 >> STUDENTE 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 Cosa succede se voglio leggere, molto specificamente, un byte? 778 00:40:52,240 --> 00:40:55,012 779 00:40:55,012 --> 00:40:56,860 >> STUDENTE 21: non lo so. 780 00:40:56,860 --> 00:40:57,110 >> JASON HIRSCHHORN: OK. 781 00:40:57,110 --> 00:40:59,380 Anche più semplice di fscanf - che è un - 782 00:40:59,380 --> 00:41:01,890 Voglio leggere da un file di origine? 783 00:41:01,890 --> 00:41:03,720 Leggere da un file di origine. 784 00:41:03,720 --> 00:41:04,850 Che cosa è una funzione - sì. 785 00:41:04,850 --> 00:41:05,380 >> STUDENTE 22: E 'fread? 786 00:41:05,380 --> 00:41:06,070 >> JASON HIRSCHHORN: Fread. 787 00:41:06,070 --> 00:41:07,550 Penso che cerchiamo di bastone con quella per ora. 788 00:41:07,550 --> 00:41:10,380 789 00:41:10,380 --> 00:41:13,650 Che tipo di argomenti Non fread prende? 790 00:41:13,650 --> 00:41:17,410 >> STUDENTE 22: Probabilmente il tipo di file, e poi posizione nel file? 791 00:41:17,410 --> 00:41:19,550 >> JASON HIRSCHHORN: Cosa posso scrivere qui per capire che tipo di argomenti 792 00:41:19,550 --> 00:41:20,950 fread prende? 793 00:41:20,950 --> 00:41:23,710 >> STUDENTI PIÙ: Man fread. 794 00:41:23,710 --> 00:41:24,740 >> JASON HIRSCHHORN: Uomo fread e fwrite. 795 00:41:24,740 --> 00:41:25,980 Sembra che appendere fuori insieme. 796 00:41:25,980 --> 00:41:29,589 Così fread prende come molti argomenti? 797 00:41:29,589 --> 00:41:30,920 >> STUDENTE 23: Four. 798 00:41:30,920 --> 00:41:32,690 >> JASON HIRSCHHORN: Richiede quattro argomenti. 799 00:41:32,690 --> 00:41:41,100 Ci vuole un puntatore, una dimensione, e che cosa, che è strano, e qualche file. 800 00:41:41,100 --> 00:41:42,000 OK? 801 00:41:42,000 --> 00:41:43,990 Leggiamo a questo proposito proprio qui. 802 00:41:43,990 --> 00:41:49,370 "La funzione fread legge n memb elementi di dati, ogni formato byte 803 00:41:49,370 --> 00:41:53,840 lunga, dal flusso puntato da streaming, la loro memorizzazione nella posizione 804 00:41:53,840 --> 00:41:56,170 data dal pointer ". 805 00:41:56,170 --> 00:41:57,960 >> Così quattro argomenti. 806 00:41:57,960 --> 00:42:04,510 Perché non basta copiare questo, e incollarlo qui. 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 Allora, chi può iniziare la compilazione questi argomenti per me? 810 00:42:13,673 --> 00:42:15,840 Avi. 811 00:42:15,840 --> 00:42:17,720 >> AVI: Estrarre il vuoto. 812 00:42:17,720 --> 00:42:20,530 Mettere solo src. 813 00:42:20,530 --> 00:42:23,142 Estrarre puntatore e la stella. 814 00:42:23,142 --> 00:42:26,102 Mettere src. 815 00:42:26,102 --> 00:42:27,050 Poi - 816 00:42:27,050 --> 00:42:28,500 >> JASON HIRSCHHORN: Quindi ho intenzione di smettere lì, perché è errata. 817 00:42:28,500 --> 00:42:32,590 818 00:42:32,590 --> 00:42:34,710 Hai ragione con src, ma dove dovrebbe src andare? 819 00:42:34,710 --> 00:42:35,960 >> [VOCI interponendo] 820 00:42:35,960 --> 00:42:38,976 821 00:42:38,976 --> 00:42:41,610 >> JASON HIRSCHHORN: dovrebbe andate qui. 822 00:42:41,610 --> 00:42:43,790 Questo è il src - il nostro src è un tipo. 823 00:42:43,790 --> 00:42:44,610 Diamo un'occhiata qui. 824 00:42:44,610 --> 00:42:49,610 Questo sta chiedendo per un tipo FILE *, abbiamo in realtà di solito li vedi così. 825 00:42:49,610 --> 00:42:57,630 Quindi questo chiede un argomento di tipo FILE * chiamato ruscello che è src. 826 00:42:57,630 --> 00:42:58,480 OK? 827 00:42:58,480 --> 00:43:00,410 >> Quali sono le dimensioni delle cose fare vogliamo leggere? 828 00:43:00,410 --> 00:43:03,340 Ti ho dato questo in descrizione del problema. 829 00:43:03,340 --> 00:43:04,370 >> STUDENTE 24: Un byte alla volta. 830 00:43:04,370 --> 00:43:05,340 >> JASON HIRSCHHORN: Un byte. 831 00:43:05,340 --> 00:43:08,205 Quanto è grande un byte? 832 00:43:08,205 --> 00:43:11,642 La sua dimensione è in byte, così che cosa posso mettere proprio lì? 833 00:43:11,642 --> 00:43:12,910 >> STUDENTE 25: One. 834 00:43:12,910 --> 00:43:14,730 >> JASON HIRSCHHORN: One. 835 00:43:14,730 --> 00:43:17,020 Giusto. 836 00:43:17,020 --> 00:43:19,940 La sua dimensione è in unità di byte, così 1 è 1 byte. 837 00:43:19,940 --> 00:43:22,284 Quanti voglio leggere alla volta. 838 00:43:22,284 --> 00:43:23,520 >> STUDENTE 26: One? 839 00:43:23,520 --> 00:43:24,270 >> JASON HIRSCHHORN: una cosa. 840 00:43:24,270 --> 00:43:28,540 Voglio leggere una cosa di dimensioni 1, un morso alla volta. 841 00:43:28,540 --> 00:43:32,110 E dove lo metto, una volta che ho letto? 842 00:43:32,110 --> 00:43:35,050 843 00:43:35,050 --> 00:43:36,510 >> STUDENTE 27: Destinazione? 844 00:43:36,510 --> 00:43:39,270 >> JASON HIRSCHHORN: Quindi non posso mettere dritto in meta. 845 00:43:39,270 --> 00:43:40,800 >> STUDENTE 28: Stai andando mettere in una terza puntatore? 846 00:43:40,800 --> 00:43:41,780 >> STUDENTE 27: Per la destinazione. 847 00:43:41,780 --> 00:43:42,270 >> JASON HIRSCHHORN: OK. 848 00:43:42,270 --> 00:43:42,630 Già. 849 00:43:42,630 --> 00:43:46,820 >> STUDENTE 29: È possibile dichiarare qualcosa agire come un deposito temporaneo prima. 850 00:43:46,820 --> 00:43:47,350 >> JASON HIRSCHHORN: OK. 851 00:43:47,350 --> 00:43:50,080 Dammi quello. 852 00:43:50,080 --> 00:43:53,930 >> STUDENTE 29: Un altro file puntatore, forse? 853 00:43:53,930 --> 00:43:54,220 >> JASON HIRSCHHORN: OK. 854 00:43:54,220 --> 00:43:55,585 Quindi questo è nulla star - 855 00:43:55,585 --> 00:43:57,750 è un tipo void stella, in modo che non deve essere un puntatore al file. 856 00:43:57,750 --> 00:44:02,520 E se sto leggendo un byte, dove sarebbe un buon posto 857 00:44:02,520 --> 00:44:03,850 memorizzare un byte? 858 00:44:03,850 --> 00:44:04,660 >> STUDENTE 29: Un array? 859 00:44:04,660 --> 00:44:05,770 >> JASON HIRSCHHORN: Un array. 860 00:44:05,770 --> 00:44:07,730 OK. 861 00:44:07,730 --> 00:44:14,040 E che altro è qualcosa che è basta dimensionare un byte? 862 00:44:14,040 --> 00:44:16,980 863 00:44:16,980 --> 00:44:18,060 >> STUDENTE 30: un char *? 864 00:44:18,060 --> 00:44:18,530 >> STUDENTE 29: Già. 865 00:44:18,530 --> 00:44:19,880 >> JASON HIRSCHHORN: A char * non è un byte. 866 00:44:19,880 --> 00:44:20,440 >> STUDENTE 29: A char. 867 00:44:20,440 --> 00:44:21,810 >> JASON HIRSCHHORN: Un char è un byte. 868 00:44:21,810 --> 00:44:22,920 Giusto? 869 00:44:22,920 --> 00:44:26,740 Quindi chiamiamo questo buffer è un generico nome usato per queste cose da memorizzare 870 00:44:26,740 --> 00:44:27,910 qualcosa di temporaneo. 871 00:44:27,910 --> 00:44:30,880 Quindi creo un buffer. 872 00:44:30,880 --> 00:44:31,150 Giusto? 873 00:44:31,150 --> 00:44:32,990 Ma ci vuole un void *. 874 00:44:32,990 --> 00:44:38,660 Così forse hai ragione, che dovrebbe essere un buffer di dimensione 0. 875 00:44:38,660 --> 00:44:41,070 Così memorizza uno - 876 00:44:41,070 --> 00:44:41,280 destra. 877 00:44:41,280 --> 00:44:43,560 >> Perché questo proprio qui - char buffer è un personaggio, ma 878 00:44:43,560 --> 00:44:45,110 questo richiede un void * - 879 00:44:45,110 --> 00:44:45,870 un puntatore. 880 00:44:45,870 --> 00:44:50,640 Così ho potuto farlo e ora buffer è un puntatore. 881 00:44:50,640 --> 00:44:53,214 Che altro potevo fare? 882 00:44:53,214 --> 00:44:55,775 >> STUDENTE 31: Metti una stella accanto a char. 883 00:44:55,775 --> 00:44:58,380 >> JASON HIRSCHHORN: potevo hanno creato char *. 884 00:44:58,380 --> 00:45:00,216 OK. 885 00:45:00,216 --> 00:45:03,131 Cosa c'è un'altra cosa che potevo fare? 886 00:45:03,131 --> 00:45:04,050 O andiamo con questo. 887 00:45:04,050 --> 00:45:05,740 Char * tampone, così che cosa metto qui? 888 00:45:05,740 --> 00:45:08,290 889 00:45:08,290 --> 00:45:09,310 >> STUDENTE 31: Buffer. 890 00:45:09,310 --> 00:45:10,560 >> JASON HIRSCHHORN: Buffer. 891 00:45:10,560 --> 00:45:12,640 892 00:45:12,640 --> 00:45:14,500 Buffer è un puntatore ad un char. 893 00:45:14,500 --> 00:45:19,480 E in quella posizione, stiamo mettendo un byte di qualcosa che abbiamo letto. 894 00:45:19,480 --> 00:45:19,980 Già. 895 00:45:19,980 --> 00:45:20,700 Avi. 896 00:45:20,700 --> 00:45:21,230 >> AVI: Solo una domanda veloce. 897 00:45:21,230 --> 00:45:24,440 Vuoi malloc tampone? 898 00:45:24,440 --> 00:45:25,930 >> JASON HIRSCHHORN: Chi può rispondere a questa domanda? 899 00:45:25,930 --> 00:45:30,210 >> STUDENTE 32: Beh, non proprio punto a nulla adesso, quindi - 900 00:45:30,210 --> 00:45:32,610 >> JASON HIRSCHHORN: Ma fare vogliamo malloc esso? 901 00:45:32,610 --> 00:45:35,600 >> STUDENTE 32: Se si dovesse fare in modo che modo, credo, sì, perché avresti bisogno 902 00:45:35,600 --> 00:45:36,990 un posto per poter puntare a. 903 00:45:36,990 --> 00:45:38,350 >> JASON HIRSCHHORN: Dobbiamo devono malloc esso? 904 00:45:38,350 --> 00:45:40,580 >> STUDENTE 33: Se avete intenzione di usarlo all'esterno del ciclo. 905 00:45:40,580 --> 00:45:42,524 >> JASON HIRSCHHORN: Stiamo andando a usarlo all'esterno del ciclo? 906 00:45:42,524 --> 00:45:44,392 >> STUDENTE 34: sì. 907 00:45:44,392 --> 00:45:44,860 >> STUDENTE 35: Aspetta. 908 00:45:44,860 --> 00:45:46,980 Vogliamo dichiararla nel circuito di là? 909 00:45:46,980 --> 00:45:50,100 >> JASON HIRSCHHORN: Quindi penso che abbiamo Qualche tempo ciclo pseudo qui che siamo 910 00:45:50,100 --> 00:45:51,950 cercando di capire, che non abbiamo ancora ottenuto a. 911 00:45:51,950 --> 00:45:54,710 912 00:45:54,710 --> 00:45:56,010 Non abbiamo bisogno di malloc esso. 913 00:45:56,010 --> 00:45:59,310 Stiamo operando in principale, è solo andare da utilizzare all'interno di questo ciclo. 914 00:45:59,310 --> 00:46:00,540 Non ha bisogno di esistere all'esterno di questo. 915 00:46:00,540 --> 00:46:02,340 >> Così può essere una variabile locale. 916 00:46:02,340 --> 00:46:03,925 Hai un puntatore a una variabile locale. 917 00:46:03,925 --> 00:46:07,984 918 00:46:07,984 --> 00:46:09,590 >> STUDENTE 36: Ma non è che punta a nulla. 919 00:46:09,590 --> 00:46:11,540 >> JASON HIRSCHHORN: No, non è inizializzato a nulla. 920 00:46:11,540 --> 00:46:12,790 Ma noi non stiamo andando a usarlo anche. 921 00:46:12,790 --> 00:46:15,300 Stiamo per mettere qualcosa in è la prima volta che lo usano. 922 00:46:15,300 --> 00:46:16,580 Così che sembra OK. 923 00:46:16,580 --> 00:46:17,780 Quindi non abbiamo bisogno malloc qui. 924 00:46:17,780 --> 00:46:19,360 E credo che sia OK come è. 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 Abbiamo la linea fread. 928 00:46:27,190 --> 00:46:28,490 Facciamo la riga successiva. 929 00:46:28,490 --> 00:46:32,984 >> Se vogliamo scrivere in un file, quello che è una buona funzione da utilizzare per farlo? 930 00:46:32,984 --> 00:46:33,770 >> STUDENTE 37: fwrite? 931 00:46:33,770 --> 00:46:35,140 >> STUDENTE 38: fprintf? 932 00:46:35,140 --> 00:46:36,010 >> JASON HIRSCHHORN: fprintf è uno. 933 00:46:36,010 --> 00:46:37,260 Qual è un altro? 934 00:46:37,260 --> 00:46:37,680 >> STUDENTE 39: fwrite. 935 00:46:37,680 --> 00:46:38,510 >> JASON HIRSCHHORN: fwrite. 936 00:46:38,510 --> 00:46:41,250 E per i nostri scopi, fwrite, che abbiamo visto qui, è 937 00:46:41,250 --> 00:46:42,500 probabilmente la scelta migliore. 938 00:46:42,500 --> 00:46:51,970 939 00:46:51,970 --> 00:46:53,950 Prende quattro argomenti pure. 940 00:46:53,950 --> 00:46:57,570 Nishant, si può dare me gli argomenti? 941 00:46:57,570 --> 00:47:00,570 >> Nishant: La prima di uno che va essere solo tampone. 942 00:47:00,570 --> 00:47:02,210 >> JASON HIRSCHHORN: OK. 943 00:47:02,210 --> 00:47:06,752 >> Nishant: Il secondo di solo andando a 1. 944 00:47:06,752 --> 00:47:09,510 Terzo sarà 1. 945 00:47:09,510 --> 00:47:11,470 E il quarto sta per essere dst. 946 00:47:11,470 --> 00:47:18,010 947 00:47:18,010 --> 00:47:19,550 >> JASON HIRSCHHORN: Qualcuno ha domande su quella linea? 948 00:47:19,550 --> 00:47:28,370 949 00:47:28,370 --> 00:47:29,130 Che sembra buono. 950 00:47:29,130 --> 00:47:29,590 OK. 951 00:47:29,590 --> 00:47:34,250 Così ora sembra che l'unica cosa che siamo mancante - in realtà, scriviamo 952 00:47:34,250 --> 00:47:35,090 quest'ultima linea. 953 00:47:35,090 --> 00:47:36,300 Chiudere i file. 954 00:47:36,300 --> 00:47:38,880 Chi ci può finire di scrittura queste ultime due righe? 955 00:47:38,880 --> 00:47:39,120 Sì. 956 00:47:39,120 --> 00:47:39,850 Siamo spiacenti, qual è il tuo nome? 957 00:47:39,850 --> 00:47:40,580 >> LUCY: Lucy. 958 00:47:40,580 --> 00:47:41,580 >> JASON HIRSCHHORN: Lucy. 959 00:47:41,580 --> 00:47:47,560 >> LUCY: src fclose e poi destinazione fclose. 960 00:47:47,560 --> 00:47:52,430 >> JASON HIRSCHHORN: fclose, parentesi aperta, src, chiudere parentesi, punto e virgola. 961 00:47:52,430 --> 00:47:53,680 E fclose - 962 00:47:53,680 --> 00:47:57,560 963 00:47:57,560 --> 00:47:58,090 sì? 964 00:47:58,090 --> 00:48:01,710 >> LUCY: aperta parentesi, dst e poi virgola. 965 00:48:01,710 --> 00:48:02,520 >> JASON HIRSCHHORN: Great. 966 00:48:02,520 --> 00:48:04,338 E cosa dovrei includere alla fine? 967 00:48:04,338 --> 00:48:05,210 >> LUCY: di ritorno 0. 968 00:48:05,210 --> 00:48:05,570 >> JASON HIRSCHHORN: ritorno 0. 969 00:48:05,570 --> 00:48:06,820 Devo? 970 00:48:06,820 --> 00:48:10,560 971 00:48:10,560 --> 00:48:12,590 Solo una domanda. 972 00:48:12,590 --> 00:48:14,957 Dobbiamo includere return 0? 973 00:48:14,957 --> 00:48:16,240 >> STUDENTI MULTIPLE: No. 974 00:48:16,240 --> 00:48:16,430 >> JASON HIRSCHHORN: No. 975 00:48:16,430 --> 00:48:18,090 Fa Principale automaticamente se si arriva alla fine. 976 00:48:18,090 --> 00:48:20,580 Ma penso che è bello includere esplicitamente. 977 00:48:20,580 --> 00:48:23,860 Soprattutto quando stiamo tornando altro cose tutto il programma. 978 00:48:23,860 --> 00:48:24,810 OK. 979 00:48:24,810 --> 00:48:26,230 Questo è ciò che ci manca - 980 00:48:26,230 --> 00:48:28,520 MENTRE cosa? 981 00:48:28,520 --> 00:48:31,630 Chi può pensare a qualche - 982 00:48:31,630 --> 00:48:35,240 ha qualche senso di ciò che le cose potrebbe andare in là? 983 00:48:35,240 --> 00:48:37,350 Anche se è solo in alcuni pseudocodice come il linguaggio? 984 00:48:37,350 --> 00:48:41,330 >> Ciò che siamo veramente - quello che vogliamo andare fino a quando? 985 00:48:41,330 --> 00:48:41,980 Sì, Lucy. 986 00:48:41,980 --> 00:48:43,240 >> LUCY: La fine del file. 987 00:48:43,240 --> 00:48:44,990 >> JASON HIRSCHHORN: La fine del file. 988 00:48:44,990 --> 00:48:49,280 Allora, cosa si intende per fine del file? 989 00:48:49,280 --> 00:48:50,955 >> LUCY: Una volta raggiunta la fine del file, stop. 990 00:48:50,955 --> 00:48:51,240 >> JASON HIRSCHHORN: OK. 991 00:48:51,240 --> 00:48:53,460 Quindi, una volta che si raggiunge la fine del file. 992 00:48:53,460 --> 00:48:56,893 Come facciamo a sapere quando abbiamo raggiunto la fine del file? 993 00:48:56,893 --> 00:48:59,900 >> STUDENTE 40: Penso tampone sarà impostato a NULL. 994 00:48:59,900 --> 00:49:01,885 >> STUDENTE 41: Buffer è dichiarata all'interno del ciclo. 995 00:49:01,885 --> 00:49:03,670 >> JASON HIRSCHHORN: Quindi pensi buffer verrà impostato su NULL. 996 00:49:03,670 --> 00:49:05,850 Perché sarebbe tampone essere impostato a NULL? 997 00:49:05,850 --> 00:49:10,420 >> STUDENTE 40: Perché quando si fread, si sta cercando di mettere 998 00:49:10,420 --> 00:49:13,528 nulla nel buffer. 999 00:49:13,528 --> 00:49:13,980 >> JASON HIRSCHHORN: OK. 1000 00:49:13,980 --> 00:49:15,550 Quindi stai pensando fread - 1001 00:49:15,550 --> 00:49:19,000 quando abbiamo raggiunto la fine della il file, cosa sta fread intenzione di fare? 1002 00:49:19,000 --> 00:49:21,230 Penso che sia la domanda dobbiamo capire. 1003 00:49:21,230 --> 00:49:21,960 Cosa fa fread fare? 1004 00:49:21,960 --> 00:49:25,640 Ha messo NULL in tampone, o fa fare qualcos'altro? 1005 00:49:25,640 --> 00:49:27,510 Come possiamo capire che cosa fa? 1006 00:49:27,510 --> 00:49:28,190 >> STUDENTE 42: Man. 1007 00:49:28,190 --> 00:49:28,810 >> JASON HIRSCHHORN: Uomo. 1008 00:49:28,810 --> 00:49:32,280 Quindi diamo un'occhiata qui. 1009 00:49:32,280 --> 00:49:34,000 Valore di ritorno. 1010 00:49:34,000 --> 00:49:39,620 In caso di successo, fread e fwrite restituire l' numero di articoli letti o scritti. 1011 00:49:39,620 --> 00:49:43,700 Questo numero è uguale al numero di byte trasferiti solo quando la dimensione è 1. 1012 00:49:43,700 --> 00:49:47,780 Se si verifica un errore, o alla fine del file viene raggiunto, il valore di ritorno è un 1013 00:49:47,780 --> 00:49:51,490 breve count articolo o 0. 1014 00:49:51,490 --> 00:49:57,860 >> Quindi, per i nostri scopi, se raggiunge fread la fine del file, e legge dalla 1015 00:49:57,860 --> 00:50:02,100 la fine del file, non c'è niente di sinistra leggere, che cosa sta andando a tornare? 1016 00:50:02,100 --> 00:50:03,290 >> STUDENTE 43: Zero? 1017 00:50:03,290 --> 00:50:04,540 >> JASON HIRSCHHORN: Cosa? 1018 00:50:04,540 --> 00:50:05,300 >> STUDENTE 43: Zero? 1019 00:50:05,300 --> 00:50:05,690 >> JASON HIRSCHHORN: Zero. 1020 00:50:05,690 --> 00:50:06,940 E 'intenzione di restituire zero. 1021 00:50:06,940 --> 00:50:09,360 1022 00:50:09,360 --> 00:50:13,010 Così sappiamo che fread, quando abbiamo raggiunta la fine del file, sta 1023 00:50:13,010 --> 00:50:13,690 per tornare a zero. 1024 00:50:13,690 --> 00:50:17,460 Come possiamo usare a nostro vantaggio? 1025 00:50:17,460 --> 00:50:21,733 >> AVI: È possibile dichiarare una variabile esterna del ciclo denominato controllo. 1026 00:50:21,733 --> 00:50:27,040 Se la verifica è uguale - 1027 00:50:27,040 --> 00:50:28,190 per ora - uno. 1028 00:50:28,190 --> 00:50:28,920 >> JASON HIRSCHHORN: OK. 1029 00:50:28,920 --> 00:50:38,050 >> AVI: E poi si può mettere un IF dichiarazione subito dopo fread dicendo che se 1030 00:50:38,050 --> 00:50:42,600 fread uguale a zero - 1031 00:50:42,600 --> 00:50:43,850 n. 1032 00:50:43,850 --> 00:50:46,002 1033 00:50:46,002 --> 00:50:47,252 >> JASON HIRSCHHORN: Chi può aiutare Avi fuori? 1034 00:50:47,252 --> 00:50:49,690 1035 00:50:49,690 --> 00:50:52,410 >> AVI: Qual è il valore restituito da fread? 1036 00:50:52,410 --> 00:50:54,060 >> JASON HIRSCHHORN: Abbiamo appena andato oltre quello. 1037 00:50:54,060 --> 00:50:55,450 >> AVI: Come si fa a rappresentare questo? 1038 00:50:55,450 --> 00:50:57,190 >> JASON HIRSCHHORN: Quindi torna - LET'S cercare qui - restituisce un 1039 00:50:57,190 --> 00:50:59,340 size_t, che è essenzialmente un numero intero. 1040 00:50:59,340 --> 00:51:02,240 1041 00:51:02,240 --> 00:51:03,410 Quindi restituisce un numero intero. 1042 00:51:03,410 --> 00:51:05,160 E nel nostro caso, sarà ritorno 1 o 0 - 1043 00:51:05,160 --> 00:51:08,760 1 se leggi una cosa - un byte, e 0 se abbiamo raggiunto la fine. 1044 00:51:08,760 --> 00:51:13,560 1045 00:51:13,560 --> 00:51:16,450 Quindi, se fread - 1046 00:51:16,450 --> 00:51:16,855 sì? 1047 00:51:16,855 --> 00:51:20,330 >> STUDENTE 45: non puoi semplicemente mettere il pieno fread (buffer, 1, 1, src) nella 1048 00:51:20,330 --> 00:51:21,660 ciclo while? 1049 00:51:21,660 --> 00:51:26,510 >> JASON HIRSCHHORN: Allora proponete facendo questo in là? 1050 00:51:26,510 --> 00:51:27,600 >> [VOCI interponendo] 1051 00:51:27,600 --> 00:51:29,520 >> JASON HIRSCHHORN: Aspetta. 1052 00:51:29,520 --> 00:51:30,885 Quindi stiamo liberare di questo. 1053 00:51:30,885 --> 00:51:33,300 Quindi stai proponendo di mettere fread in là? 1054 00:51:33,300 --> 00:51:35,457 Che cosa dovremmo anche muoversi se si vuole fare questo? 1055 00:51:35,457 --> 00:51:36,740 >> STUDENTE 45: Il buffer esterno. 1056 00:51:36,740 --> 00:51:38,110 >> JASON HIRSCHHORN: Dovremmo anche spostare questa qui. 1057 00:51:38,110 --> 00:51:41,700 >> STUDENTE 45: Ma fa che costantemente spostarlo in avanti? 1058 00:51:41,700 --> 00:51:42,950 >> [VOCI interponendo] 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 Quindi questo è ciò che propone Okshar. 1062 00:51:50,570 --> 00:51:51,930 Creiamo il nostro buffer. 1063 00:51:51,930 --> 00:51:57,020 Noi MENTRE fread, poi abbiamo fwrite. 1064 00:51:57,020 --> 00:51:59,760 Pensieri su questo? 1065 00:51:59,760 --> 00:52:04,050 >> STUDENTE 46: La mia unica domanda è, sarebbe in realtà eseguire il comando fread? 1066 00:52:04,050 --> 00:52:06,175 >> JASON HIRSCHHORN: Ottima domanda. 1067 00:52:06,175 --> 00:52:11,050 Quando avete deciso di mettere una chiamata di funzione all'interno di una condizione, che fa 1068 00:52:11,050 --> 00:52:12,300 chiamata di funzione execute? 1069 00:52:12,300 --> 00:52:15,760 1070 00:52:15,760 --> 00:52:17,770 Abbiamo visto esempi di questo prima. 1071 00:52:17,770 --> 00:52:24,900 1072 00:52:24,900 --> 00:52:25,660 Giusto? 1073 00:52:25,660 --> 00:52:26,125 >> STUDENTE 46: OK. 1074 00:52:26,125 --> 00:52:26,590 Già. 1075 00:52:26,590 --> 00:52:30,140 Così lo fa eseguire. 1076 00:52:30,140 --> 00:52:31,790 >> JASON HIRSCHHORN: Abbiamo visto cose come prima, dove abbiamo un 1077 00:52:31,790 --> 00:52:33,550 chiamata di funzione all'interno di una condizione. 1078 00:52:33,550 --> 00:52:35,540 Ritiene che la chiamata di funzione esegue? 1079 00:52:35,540 --> 00:52:36,350 Sì. 1080 00:52:36,350 --> 00:52:37,410 Quindi la risposta è sì. 1081 00:52:37,410 --> 00:52:41,010 Questa chiamata di funzione verrà eseguita. 1082 00:52:41,010 --> 00:52:42,418 Ma ancora una volta, è quello che vogliamo? 1083 00:52:42,418 --> 00:52:49,250 1084 00:52:49,250 --> 00:52:52,204 >> Qual è un modo siamo riusciti a capire se è quello che vogliamo? 1085 00:52:52,204 --> 00:52:53,470 >> STUDENTI PIÙ: Run It? 1086 00:52:53,470 --> 00:52:54,460 >> JASON HIRSCHHORN: Potremmo farlo funzionare. 1087 00:52:54,460 --> 00:52:57,500 Ma prima di farlo, potremmo ragionare anche attraverso questo. 1088 00:52:57,500 --> 00:52:57,920 Se - 1089 00:52:57,920 --> 00:53:01,920 dire che abbiamo un byte nella nostra FILE, ci arriveremo qui, 1090 00:53:01,920 --> 00:53:02,660 ci arriveremo a questo codice. 1091 00:53:02,660 --> 00:53:03,620 Questo verrà eseguito. 1092 00:53:03,620 --> 00:53:07,780 fread restituisce un byte e memorizzare nel buffer. 1093 00:53:07,780 --> 00:53:11,290 E questo restituirà 1, a destra, dopo aver restituisce 1. 1094 00:53:11,290 --> 00:53:12,640 >> Così, mentre 1. 1095 00:53:12,640 --> 00:53:15,325 Questo significa che il codice all'interno il ciclo WHILE viene eseguito? 1096 00:53:15,325 --> 00:53:15,453 >> STUDENTE 47: Già. 1097 00:53:15,453 --> 00:53:16,040 E 'vero. 1098 00:53:16,040 --> 00:53:16,290 >> JASON HIRSCHHORN: sì. 1099 00:53:16,290 --> 00:53:17,490 1 è vero. 1100 00:53:17,490 --> 00:53:18,240 Non è 0. 1101 00:53:18,240 --> 00:53:20,360 Quindi il codice qui dentro verrà eseguito. 1102 00:53:20,360 --> 00:53:22,300 Quindi noi scriveremo che. 1103 00:53:22,300 --> 00:53:25,340 Ci spostiamo di nuovo a questo linea ancora una volta. 1104 00:53:25,340 --> 00:53:26,850 Ora abbiamo - 1105 00:53:26,850 --> 00:53:28,550 siamo alla fine del nostro file. 1106 00:53:28,550 --> 00:53:30,980 Leggiamo dalla fine del nostro file, perché avevamo un solo byte in esso. 1107 00:53:30,980 --> 00:53:34,270 >> Fread restituisce 0, negozi qualcosa in tampone. 1108 00:53:34,270 --> 00:53:35,890 Onestamente non so cosa memorizza nel buffer. 1109 00:53:35,890 --> 00:53:38,380 Potremmo probabilmente guardare in alto per vedere cosa fa. 1110 00:53:38,380 --> 00:53:40,130 Che onestamente non lo so. 1111 00:53:40,130 --> 00:53:43,090 Non sappiamo, chi se ne frega cosa memorizza in tampone? 1112 00:53:43,090 --> 00:53:44,010 Ma non ritorno 0. 1113 00:53:44,010 --> 00:53:45,440 E sarà mentre 0 execute? 1114 00:53:45,440 --> 00:53:49,950 1115 00:53:49,950 --> 00:53:51,180 >> MENTRE 0 non verrà eseguito. 1116 00:53:51,180 --> 00:53:54,030 Allora ci sposteremo qui. 1117 00:53:54,030 --> 00:53:58,870 Quindi cerchiamo di ottenere per alzata di mano, se questo è il codice che dovremmo correre, o se ci 1118 00:53:58,870 --> 00:54:00,140 dovrebbe fare le modifiche. 1119 00:54:00,140 --> 00:54:02,180 Quindi, se si pensa - si deve votare. 1120 00:54:02,180 --> 00:54:06,885 Se pensi che dovremmo eseguire questo codice come è, per favore alzi la mano. 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 Ce n'è uno - 1124 00:54:14,315 --> 00:54:17,260 hai una domanda, preoccupazione? 1125 00:54:17,260 --> 00:54:18,080 Già. 1126 00:54:18,080 --> 00:54:21,240 >> STUDENTE 48: Dopo ci spostiamo tampone al di fuori del ciclo, facciamo 1127 00:54:21,240 --> 00:54:22,670 devono malloc esso? 1128 00:54:22,670 --> 00:54:23,310 >> JASON HIRSCHHORN: Ottima domanda. 1129 00:54:23,310 --> 00:54:26,670 Dopo ci spostiamo tamponare al di fuori del loop, abbiamo di malloc esso? 1130 00:54:26,670 --> 00:54:28,400 Questa è una domanda ambito. 1131 00:54:28,400 --> 00:54:32,130 Se si inizializza il buffer esterno di questo ciclo, sarà esisterà 1132 00:54:32,130 --> 00:54:33,534 all'interno del ciclo? 1133 00:54:33,534 --> 00:54:35,230 >> STUDENTI PIÙ: sì. 1134 00:54:35,230 --> 00:54:35,580 >> JASON HIRSCHHORN: sì. 1135 00:54:35,580 --> 00:54:40,100 Il suo campo di applicazione copre all'interno del ciclo, e, in realtà, nulla di sotto di essa all'interno 1136 00:54:40,100 --> 00:54:42,460 di questo codice, compresa la le cose qui dentro. 1137 00:54:42,460 --> 00:54:43,930 Quindi non abbiamo bisogno di malloc esso. 1138 00:54:43,930 --> 00:54:47,766 E 'una variabile locale, e la sua portata comprende ancora il ciclo. 1139 00:54:47,766 --> 00:54:49,540 >> STUDENTE 49: Abbiamo bisogno di liberarlo? 1140 00:54:49,540 --> 00:54:51,770 >> JASON HIRSCHHORN: Dobbiamo bisogno di buffer libero? 1141 00:54:51,770 --> 00:54:53,860 >> STUDENTE 49: Sì, se non lo facciamo malloc. 1142 00:54:53,860 --> 00:54:55,750 >> JASON HIRSCHHORN: Dobbiamo bisogno di buffer libero? 1143 00:54:55,750 --> 00:54:57,160 Noi non lo facciamo. 1144 00:54:57,160 --> 00:55:01,280 Di nuovo, è una variabile locale, quindi non abbiamo bisogno di liberarlo. 1145 00:55:01,280 --> 00:55:02,170 OK. 1146 00:55:02,170 --> 00:55:03,480 Vediamo cosa succede. 1147 00:55:03,480 --> 00:55:17,290 1148 00:55:17,290 --> 00:55:18,220 Così è inizializzata. 1149 00:55:18,220 --> 00:55:20,830 Questo è ciò che una cosa che Marcus ha proposto in precedenza. 1150 00:55:20,830 --> 00:55:25,340 Così abbiamo che l'errore, tampone variabile non è inizializzata quando viene utilizzato qui. 1151 00:55:25,340 --> 00:55:26,590 >> Come possiamo risolvere questo problema? 1152 00:55:26,590 --> 00:55:29,460 1153 00:55:29,460 --> 00:55:30,960 >> STUDENTE 50: malloc è? 1154 00:55:30,960 --> 00:55:31,770 >> STUDENTE 51: Equals NULL? 1155 00:55:31,770 --> 00:55:33,000 >> STUDENTE 52: Say tampone è uguale a 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 Sembra buono. 1159 00:55:40,770 --> 00:55:42,410 Abbiamo ora. 1160 00:55:42,410 --> 00:55:45,630 Creiamo qualcosa da provare a copiare. 1161 00:55:45,630 --> 00:56:08,990 1162 00:56:08,990 --> 00:56:10,490 Quindi abbiamo il nostro file di testo. 1163 00:56:10,490 --> 00:56:11,740 Come possiamo eseguire questo programma? 1164 00:56:11,740 --> 00:56:14,140 1165 00:56:14,140 --> 00:56:15,472 Già. 1166 00:56:15,472 --> 00:56:22,230 >> STUDENTE 53: È possibile fare punti tagliare cp, test.txt. 1167 00:56:22,230 --> 00:56:25,140 E poi si può nominare un altro file che si memorizza in. 1168 00:56:25,140 --> 00:56:25,510 >> JASON HIRSCHHORN: OK. 1169 00:56:25,510 --> 00:56:27,380 Ti chiamiamo out.txt. 1170 00:56:27,380 --> 00:56:28,630 Cool? 1171 00:56:28,630 --> 00:56:31,700 1172 00:56:31,700 --> 00:56:34,320 Guasto Seg. 1173 00:56:34,320 --> 00:56:35,570 Pensieri sulla guasto seg? 1174 00:56:35,570 --> 00:56:40,900 1175 00:56:40,900 --> 00:56:41,390 Questo è grande. 1176 00:56:41,390 --> 00:56:45,040 Come possiamo scoprire dove la colpa è seg? 1177 00:56:45,040 --> 00:56:45,680 Cosa? 1178 00:56:45,680 --> 00:56:45,990 >> STUDENTE 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 Corriamo gdb scrivendo gdb dot barra, il nome del nostro programma. 1182 00:56:55,300 --> 00:56:57,020 Nessun argomento della riga di comando lì. 1183 00:56:57,020 --> 00:56:59,570 Stiamo andando a impostare un punto di interruzione alla principale. 1184 00:56:59,570 --> 00:57:02,190 Se voglio iniziare gdb, cosa faccio? 1185 00:57:02,190 --> 00:57:02,730 >> STUDENTE 55: R. 1186 00:57:02,730 --> 00:57:08,910 >> JASON HIRSCHHORN: R. E poi cosa? 1187 00:57:08,910 --> 00:57:09,400 >> STUDENTE 55: Gli argomenti? 1188 00:57:09,400 --> 00:57:10,650 >> JASON HIRSCHHORN: Poi l' argomenti della riga di comando. 1189 00:57:10,650 --> 00:57:15,890 1190 00:57:15,890 --> 00:57:17,120 Camminiamo attraverso. 1191 00:57:17,120 --> 00:57:19,090 N è solo prendendo me riga per riga. 1192 00:57:19,090 --> 00:57:21,450 Ho intenzione di andare fino Ottengo colpa mia seg. 1193 00:57:21,450 --> 00:57:22,700 Non c'è colpa mia seg. 1194 00:57:22,700 --> 00:57:24,960 1195 00:57:24,960 --> 00:57:27,875 Sembra fread causato colpa mia seg. 1196 00:57:27,875 --> 00:57:30,570 1197 00:57:30,570 --> 00:57:32,770 So fread ha causato la mia colpa seg, perché quello era il 1198 00:57:32,770 --> 00:57:34,950 linea che abbiamo appena eseguito. 1199 00:57:34,950 --> 00:57:36,530 >> E l'unica cosa che era accadendo in quella linea - 1200 00:57:36,530 --> 00:57:37,520 due cose stavano accadendo. 1201 00:57:37,520 --> 00:57:40,610 Fread stava andando, e poi siamo stati facendo qualche controllo WHILE. 1202 00:57:40,610 --> 00:57:44,820 Sono pronto a scommettere che il WHILE controllo non stava causando colpa mia seg. 1203 00:57:44,820 --> 00:57:46,950 Molto probabilmente, era fread causando colpa mia seg. 1204 00:57:46,950 --> 00:57:49,260 Vedo anche qualcosa qui, memcopy. 1205 00:57:49,260 --> 00:57:50,500 >> Copia in memoria. 1206 00:57:50,500 --> 00:57:53,820 Suona come muoversi memoria dalla una posizione all'altra. 1207 00:57:53,820 --> 00:57:56,890 Suona come qualcosa che potrebbe accadere in fread, magari un po 'di memoria 1208 00:57:56,890 --> 00:57:58,910 muoversi da qui a qui. 1209 00:57:58,910 --> 00:58:01,740 1210 00:58:01,740 --> 00:58:03,860 Andiamo con questo nuovo. 1211 00:58:03,860 --> 00:58:06,900 Come faccio a iniziare sopra ed eseguirlo di nuovo? 1212 00:58:06,900 --> 00:58:08,092 Già. 1213 00:58:08,092 --> 00:58:15,140 >> STUDENTE 56: Avete bisogno di mettere una commerciale prima che il buffer? 1214 00:58:15,140 --> 00:58:17,800 >> JASON HIRSCHHORN: Quindi Ampersand prima tampone mi avrebbe dato l'indirizzo del 1215 00:58:17,800 --> 00:58:22,330 tampone, che è un char *. 1216 00:58:22,330 --> 00:58:25,250 Corriamo attraverso questo ancora una volta. 1217 00:58:25,250 --> 00:58:28,248 Come faccio a eseguire attraverso di essa ancora una volta? 1218 00:58:28,248 --> 00:58:29,210 >> STUDENTE 57: si può solo digitare nuovamente Run? 1219 00:58:29,210 --> 00:58:32,050 >> JASON HIRSCHHORN: Basta digitare nuovamente esecuzione. 1220 00:58:32,050 --> 00:58:33,415 Quindi non stiamo andando a eseguire questa linea. 1221 00:58:33,415 --> 00:58:36,250 1222 00:58:36,250 --> 00:58:39,240 Quindi buffer è un puntatore NULL. 1223 00:58:39,240 --> 00:58:40,490 Correggere? 1224 00:58:40,490 --> 00:58:45,870 1225 00:58:45,870 --> 00:58:47,060 Si sta puntando - vediamo. 1226 00:58:47,060 --> 00:58:48,500 Se abbiamo il nostro - 1227 00:58:48,500 --> 00:58:50,430 tracciare un rapido quadro di questo. 1228 00:58:50,430 --> 00:58:53,500 Chiunque può vedere se Scrivo qui? 1229 00:58:53,500 --> 00:59:02,890 >> Così nello stack, abbiamo un locale variabile e si chiama tampone e 1230 00:59:02,890 --> 00:59:08,230 è un puntatore a char. 1231 00:59:08,230 --> 00:59:10,325 Che indirizzo è questo char a? 1232 00:59:10,325 --> 00:59:12,550 >> STUDENTE 58: 0x0. 1233 00:59:12,550 --> 00:59:13,400 >> JASON HIRSCHHORN: Giusto. 1234 00:59:13,400 --> 00:59:14,200 Ecco di cosa si tratta. 1235 00:59:14,200 --> 00:59:17,600 In qui, all'interno del buffer, viene memorizzato 0x0. 1236 00:59:17,600 --> 00:59:20,480 Questo è quello che abbiamo - l' Impostazione abbiamo in questo momento. 1237 00:59:20,480 --> 00:59:27,540 Così questa linea, fread, mette qualcosa dalla sorgente dove? 1238 00:59:27,540 --> 00:59:30,560 In questa casella o questa scatola? 1239 00:59:30,560 --> 00:59:31,060 Quale scatola? 1240 00:59:31,060 --> 00:59:33,290 Box o box di destra e sinistra? 1241 00:59:33,290 --> 00:59:34,750 Questa casella a destra. 1242 00:59:34,750 --> 00:59:38,440 >> Ne consegue il puntatore, e lo mette in qui. 1243 00:59:38,440 --> 00:59:42,620 Quando cerchiamo di memoria di tocco a posizione 0, cosa otteniamo? 1244 00:59:42,620 --> 00:59:45,050 Un errore di segmentazione. 1245 00:59:45,050 --> 00:59:46,550 Questo è l'errore che abbiamo adesso. 1246 00:59:46,550 --> 00:59:46,970 Già. 1247 00:59:46,970 --> 00:59:48,410 >> STUDENTE 59: Non avete mettere tampone stella? 1248 00:59:48,410 --> 00:59:49,180 O no? 1249 00:59:49,180 --> 00:59:50,050 Per fread? 1250 00:59:50,050 --> 00:59:51,450 >> JASON HIRSCHHORN: Così fread prende un puntatore. 1251 00:59:51,450 --> 00:59:54,920 1252 00:59:54,920 --> 00:59:55,900 Quindi passa in tampone. 1253 00:59:55,900 --> 00:59:58,980 E allora sarà de-riferimento da qualche parte dentro fread. 1254 00:59:58,980 --> 01:00:00,700 Ma ancora una volta, abbiamo visto, ci vuole un puntatore. 1255 01:00:00,700 --> 01:00:02,560 Non abbiamo bisogno di passare buffer di stelle. 1256 01:00:02,560 --> 01:00:05,350 Ciò sarebbe passato è tutto ciò che è qui. 1257 01:00:05,350 --> 01:00:07,980 E che probabilmente ci darà un errore perché stiamo de-riferimento di esso. 1258 01:00:07,980 --> 01:00:08,150 >> Giusto? 1259 01:00:08,150 --> 01:00:10,690 Quando abbiamo de-riferimento questo puntatore, quando proviamo ad accedere a questa posizione, 1260 01:00:10,690 --> 01:00:13,140 stiamo ottenendo un errore - il nostro segmentation fault. 1261 01:00:13,140 --> 01:00:15,800 So - 1262 01:00:15,800 --> 01:00:16,690 oops. 1263 01:00:16,690 --> 01:00:19,090 Stiamo per uscire da gdb. 1264 01:00:19,090 --> 01:00:20,160 La nostra linea - 1265 01:00:20,160 --> 01:00:22,990 il nostro problema - è giusto qui su questa linea. 1266 01:00:22,990 --> 01:00:26,410 Ed è un problema perché di questa linea. 1267 01:00:26,410 --> 01:00:31,780 >> Come possiamo creare una casella che è accessibile in fread. 1268 01:00:31,780 --> 01:00:31,980 Giusto? 1269 01:00:31,980 --> 01:00:35,190 Abbiamo bisogno di creare una casella che è uno byte grande, la dimensione di un char. 1270 01:00:35,190 --> 01:00:38,590 Ma abbiamo bisogno che il dialogo sia accessibile quando questa funzione viene eseguita. 1271 01:00:38,590 --> 01:00:39,390 Allora, dove - 1272 01:00:39,390 --> 01:00:39,640 sì. 1273 01:00:39,640 --> 01:00:40,440 Tutte le idee? 1274 01:00:40,440 --> 01:00:43,615 >> STUDENTE 60: Basta impostare come qualsiasi carattere casuale. 1275 01:00:43,615 --> 01:00:49,150 1276 01:00:49,150 --> 01:00:51,640 Basta fare equals char buffer il carattere. 1277 01:00:51,640 --> 01:00:53,795 E poi, quando hai tampone lì - 1278 01:00:53,795 --> 01:00:54,110 >> JASON HIRSCHHORN: Aspetta. 1279 01:00:54,110 --> 01:00:55,110 Char tampone? 1280 01:00:55,110 --> 01:00:55,880 Quindi nessuna stella? 1281 01:00:55,880 --> 01:00:56,390 >> STUDENTE 60: Già. 1282 01:00:56,390 --> 01:00:58,560 Estrarre la stella. 1283 01:00:58,560 --> 01:01:00,690 Uguale un carattere casuale. 1284 01:01:00,690 --> 01:01:01,460 >> JASON HIRSCHHORN: OK. 1285 01:01:01,460 --> 01:01:02,420 Allora dammi uno. 1286 01:01:02,420 --> 01:01:03,170 >> STUDENTE 60: Come una o qualcosa del genere. 1287 01:01:03,170 --> 01:01:06,160 E poi quando hai tampone lì, si utilizza un - 1288 01:01:06,160 --> 01:01:06,420 >> STUDENTE 61: Star? 1289 01:01:06,420 --> 01:01:07,650 Oh no, la commerciale. 1290 01:01:07,650 --> 01:01:09,000 >> STUDENTE 60: Utilizzare la e commerciale. 1291 01:01:09,000 --> 01:01:09,470 >> JASON HIRSCHHORN: OK. 1292 01:01:09,470 --> 01:01:11,320 E per quanto riguarda in fwrite? 1293 01:01:11,320 --> 01:01:14,150 >> STUDENTE 60: Utilizzare nuovamente la commerciale. 1294 01:01:14,150 --> 01:01:14,320 >> JASON HIRSCHHORN: Va bene. 1295 01:01:14,320 --> 01:01:20,970 Quindi la tua idea è, creiamo un char e mettere qualcosa in esso, e quindi 1296 01:01:20,970 --> 01:01:22,612 scrivere in quella char. 1297 01:01:22,612 --> 01:01:23,760 >> STUDENTE 60: Già. 1298 01:01:23,760 --> 01:01:25,916 >> JASON HIRSCHHORN: Cosa pensa la gente? 1299 01:01:25,916 --> 01:01:27,770 >> STUDENTE 62: E 'contorta. 1300 01:01:27,770 --> 01:01:28,460 >> JASON HIRSCHHORN: OK. 1301 01:01:28,460 --> 01:01:29,760 Facciamo disegnare fuori. 1302 01:01:29,760 --> 01:01:35,720 Così questa volta, ho intenzione di disegnare questo rosso in pila qui, e poi 1303 01:01:35,720 --> 01:01:36,410 avrà - 1304 01:01:36,410 --> 01:01:36,822 ooh! 1305 01:01:36,822 --> 01:01:38,060 Scusi. 1306 01:01:38,060 --> 01:01:45,930 Così questa volta abbiamo qualcosa chiamato tampone, ed è in pila. 1307 01:01:45,930 --> 01:01:48,430 Correggere? 1308 01:01:48,430 --> 01:01:51,520 E stiamo risparmiando in una, inizialmente. 1309 01:01:51,520 --> 01:01:53,830 >> Poi abbiamo la nostra chiamata a fread. 1310 01:01:53,830 --> 01:02:01,300 Che fread fa è ci vuole un byte da il nostro file e lo mette da qualche parte. 1311 01:02:01,300 --> 01:02:04,570 Essa mette in qualunque cosa sta indicando. 1312 01:02:04,570 --> 01:02:09,130 Bene, prima abbiamo avuto questo indirizzo - 1313 01:02:09,130 --> 01:02:10,250 0x0. 1314 01:02:10,250 --> 01:02:13,349 Ora, quale indirizzo abbiamo? 1315 01:02:13,349 --> 01:02:14,650 >> STUDENTE 63: Qualunque buffer di indirizzo è. 1316 01:02:14,650 --> 01:02:15,970 >> JASON HIRSCHHORN: Qualunque buffer di indirizzo è. 1317 01:02:15,970 --> 01:02:22,370 E 'probabilmente sarà qualcosa di simile. 1318 01:02:22,370 --> 01:02:26,950 Probabilmente intenzione di iniziare con un b and Un F, e quindi avere altri sei 1319 01:02:26,950 --> 01:02:27,970 cifre esadecimali. 1320 01:02:27,970 --> 01:02:28,480 Non importa. 1321 01:02:28,480 --> 01:02:29,470 Qualche indirizzo. 1322 01:02:29,470 --> 01:02:31,410 E stiamo passando questo indirizzo trovi 1323 01:02:31,410 --> 01:02:34,790 >> E stiamo andando a mettere il nostro unico cosa byte a tale indirizzo. 1324 01:02:34,790 --> 01:02:38,470 Quindi stiamo andando a mettere il nostro unico cosa byte qui dentro. 1325 01:02:38,470 --> 01:02:40,800 E poi andremo a scrivere dalla che cosa è mai qui dentro. 1326 01:02:40,800 --> 01:02:43,425 1327 01:02:43,425 --> 01:02:45,380 Qualcuno ha domande a tale proposito? 1328 01:02:45,380 --> 01:02:50,990 1329 01:02:50,990 --> 01:02:54,690 Chi pensa questo codice funzionerà? 1330 01:02:54,690 --> 01:02:56,020 >> Alzi la mano se si pensa questo codice funzionerà. 1331 01:02:56,020 --> 01:02:57,270 Dovete prendere una posizione. 1332 01:02:57,270 --> 01:03:00,670 1333 01:03:00,670 --> 01:03:02,500 E chi pensa che questo codice non funziona? 1334 01:03:02,500 --> 01:03:04,610 Alzi la mano. 1335 01:03:04,610 --> 01:03:06,750 Tutti gli altri dovrebbero essere alzare la mano. 1336 01:03:06,750 --> 01:03:07,670 OK. 1337 01:03:07,670 --> 01:03:09,390 Michael, dove stai in piedi? 1338 01:03:09,390 --> 01:03:10,680 >> MICHAEL: Non posso decidere. 1339 01:03:10,680 --> 01:03:12,070 Tipo di nel mezzo. 1340 01:03:12,070 --> 01:03:12,736 >> JASON HIRSCHHORN: Sei nel mezzo. 1341 01:03:12,736 --> 01:03:13,092 Scegli uno. 1342 01:03:13,092 --> 01:03:14,400 >> MICHAEL: Io ho fede e dire che funzionerà. 1343 01:03:14,400 --> 01:03:14,660 >> JASON HIRSCHHORN: OK. 1344 01:03:14,660 --> 01:03:16,047 Avrete fede e dire che funziona? 1345 01:03:16,047 --> 01:03:26,490 1346 01:03:26,490 --> 01:03:27,020 Che cosa è successo? 1347 01:03:27,020 --> 01:03:28,270 >> [VOCI interponendo] 1348 01:03:28,270 --> 01:03:35,170 1349 01:03:35,170 --> 01:03:35,950 >> JASON HIRSCHHORN: Nessun guasto seg. 1350 01:03:35,950 --> 01:03:40,320 Come possiamo controllare per vedere se due cose sono uguali? 1351 01:03:40,320 --> 01:03:42,060 Due file sono uguali. 1352 01:03:42,060 --> 01:03:43,300 >> STUDENTE 64: Diff. 1353 01:03:43,300 --> 01:03:45,490 >> JASON HIRSCHHORN: Diff. 1354 01:03:45,490 --> 01:03:51,630 Controlli diff per le differenze tra due file, e se restituisce 1355 01:03:51,630 --> 01:03:52,890 niente, sono identici. 1356 01:03:52,890 --> 01:03:59,030 E se ci apriamo, otteniamo il nostro file. 1357 01:03:59,030 --> 01:04:00,490 Così che era la soluzione corretta. 1358 01:04:00,490 --> 01:04:01,780 Guardiamo indietro ancora una volta. 1359 01:04:01,780 --> 01:04:04,080 Noi in realtà non ha nemmeno necessario inizializzare. 1360 01:04:04,080 --> 01:04:05,520 >> Sarebbe probabilmente cercare un po ' pulito se non hai messo 1361 01:04:05,520 --> 01:04:07,680 qualcosa di casuale in là. 1362 01:04:07,680 --> 01:04:13,070 Il punto è, avete bisogno di creare po 'di spazio per memorizzare qualcosa da 1363 01:04:13,070 --> 01:04:15,530 fread e prendere qualcosa di fwrite. 1364 01:04:15,530 --> 01:04:18,400 E che cosa doveva essere un locale variabile sullo stack - si 1365 01:04:18,400 --> 01:04:19,890 potrebbe aver malloc'd po 'di spazio. 1366 01:04:19,890 --> 01:04:23,030 >> Così abbiamo effettivamente potuto malloc scritto qui, e 1367 01:04:23,030 --> 01:04:25,420 che avrebbe funzionato. 1368 01:04:25,420 --> 01:04:28,660 E poi ci sarebbe stato memorizzando le nostre cose da qualche parte sul mucchio. 1369 01:04:28,660 --> 01:04:31,940 Ma questo è in realtà, probabilmente, la soluzione più elegante. 1370 01:04:31,940 --> 01:04:34,490 Basta creare un pò di spazio sullo stack per queste cose vadano. 1371 01:04:34,490 --> 01:04:37,690 1372 01:04:37,690 --> 01:04:38,990 >> Avrei altre due osservazioni. 1373 01:04:38,990 --> 01:04:44,650 Se si dovesse prendere in giro questo, e poi vengono segnati su questo, i miei commenti 1374 01:04:44,650 --> 01:04:47,400 sarebbe come segue. 1375 01:04:47,400 --> 01:04:54,300 Questi 1 è qui, per me, guardare come numeri magici. 1376 01:04:54,300 --> 01:04:56,860 Questo 1, in termini di fread, senso. 1377 01:04:56,860 --> 01:04:59,580 Questo è il numero di cose per leggere o scrivere. 1378 01:04:59,580 --> 01:05:03,740 >> Ma questo qui dovrebbe probabilmente qualcos'altro. 1379 01:05:03,740 --> 01:05:05,180 Allora, qual è una soluzione? 1380 01:05:05,180 --> 01:05:06,545 >> STUDENTE 65: Formato di byte. 1381 01:05:06,545 --> 01:05:10,100 1382 01:05:10,100 --> 01:05:11,080 >> JASON HIRSCHHORN: Ti piace questo? 1383 01:05:11,080 --> 01:05:13,130 >> STUDENTE 65: Formato di char. 1384 01:05:13,130 --> 01:05:13,820 >> JASON HIRSCHHORN: Formato di char. 1385 01:05:13,820 --> 01:05:15,290 Sì, byte non è un tipo. 1386 01:05:15,290 --> 01:05:16,320 Così dimensioni delle opere char. 1387 01:05:16,320 --> 01:05:30,270 Potremmo avere, in cima nostro codice, # definito che. 1388 01:05:30,270 --> 01:05:33,410 Chiamato qualcosa BYTE e è davvero un char. 1389 01:05:33,410 --> 01:05:37,675 In realtà, un approccio ancora migliore avrebbe potuto essere questa - 1390 01:05:37,675 --> 01:05:39,391 uint. 1391 01:05:39,391 --> 01:05:40,780 Qualcuno sa di cosa si tratta? 1392 01:05:40,780 --> 01:05:44,388 1393 01:05:44,388 --> 01:05:44,840 >> Scusi. 1394 01:05:44,840 --> 01:05:46,090 Ho all'indietro. 1395 01:05:46,090 --> 01:05:51,620 1396 01:05:51,620 --> 01:05:52,200 Aspetta, no. 1397 01:05:52,200 --> 01:05:53,450 Da che parte va? 1398 01:05:53,450 --> 01:05:58,071 1399 01:05:58,071 --> 01:05:59,660 Qualcuno sa di cosa si tratta? 1400 01:05:59,660 --> 01:06:00,950 Già. 1401 01:06:00,950 --> 01:06:05,650 >> STUDENTE 67: Dovrebbe aiutare a standardizzare attraverso sistemi di cose che 1402 01:06:05,650 --> 01:06:08,760 hanno - come numeri interi senza segno che hanno 8 byte? 1403 01:06:08,760 --> 01:06:11,785 >> JASON HIRSCHHORN: Ecco esattamente a destra. 1404 01:06:11,785 --> 01:06:14,310 Su macchine diverse, la dimensione di un char - 1405 01:06:14,310 --> 01:06:15,180 di solito non un char. 1406 01:06:15,180 --> 01:06:16,100 Caratteri sono di solito un byte. 1407 01:06:16,100 --> 01:06:19,590 Ma le dimensioni di altri tipi di dati sono diverse dimensioni su una macchina a 32-bit 1408 01:06:19,590 --> 01:06:21,370 contro una macchina a 64 bit. 1409 01:06:21,370 --> 01:06:25,180 Un uint8_t è sempre 8 bit - 1410 01:06:25,180 --> 01:06:27,210 sempre un byte. 1411 01:06:27,210 --> 01:06:29,580 >> E ho bisogno di includere tale int file di intestazione standard. 1412 01:06:29,580 --> 01:06:35,040 Così ora, questo sarebbe stato probabilmente il modo migliore per scrivere questo codice. 1413 01:06:35,040 --> 01:06:40,160 1414 01:06:40,160 --> 01:06:41,450 Così mi libero dei numeri magici. 1415 01:06:41,450 --> 01:06:44,690 E ho anche un più logico tipo di buffer. 1416 01:06:44,690 --> 01:06:49,450 Non è semplicemente un char è un byte, che è quello che ci aspettiamo che sia. 1417 01:06:49,450 --> 01:06:53,400 >> E qui, abbiamo effettivamente essere un po 'più robusto. 1418 01:06:53,400 --> 01:06:55,190 Non stiamo definendolo un char, che - 1419 01:06:55,190 --> 01:06:58,630 forse, chissà - potrebbe essere un diverso Dimensioni su macchine diverse. 1420 01:06:58,630 --> 01:07:02,025 Noi stiamo in realtà dicendo che questo è esattamente un byte, da sempre, non importa cosa. 1421 01:07:02,025 --> 01:07:05,810 E se guardiamo qui, facciamo cp. 1422 01:07:05,810 --> 01:07:08,340 Uh-oh. 1423 01:07:08,340 --> 01:07:09,590 Che cosa è successo? 1424 01:07:09,590 --> 01:07:14,470 1425 01:07:14,470 --> 01:07:16,170 >> STUDENTE 68: Potrebbe essere acceso. 1426 01:07:16,170 --> 01:07:17,880 >> JASON HIRSCHHORN: Cosa? 1427 01:07:17,880 --> 01:07:19,130 >> STUDENTE 69: è vero? 1428 01:07:19,130 --> 01:07:21,940 1429 01:07:21,940 --> 01:07:25,080 >> STUDENTE 70: Non l'hai fatto definirlo come un tipo. 1430 01:07:25,080 --> 01:07:28,684 >> STUDENTE 71: Ma dovrebbe essere definito nella norma. 1431 01:07:28,684 --> 01:07:29,934 >> STUDENTE 72: Che cosa sta succedendo? 1432 01:07:29,934 --> 01:07:37,660 1433 01:07:37,660 --> 01:07:40,210 >> STUDENTE 73: Dovrebbe definire essere tutto maiuscolo? 1434 01:07:40,210 --> 01:07:41,370 >> JASON HIRSCHHORN: Quindi non è # define. 1435 01:07:41,370 --> 01:07:45,490 In realtà, in questo caso, sono intenzione di utilizzare typedef. 1436 01:07:45,490 --> 01:07:48,590 Poiché stiamo usando come un tipo in una posizione. 1437 01:07:48,590 --> 01:07:51,990 Quindi, in questo caso, vogliamo davvero typedef che stiamo stampa di un nuovo tipo di 1438 01:07:51,990 --> 01:07:54,490 byte, ed è, in sostanza, questa. 1439 01:07:54,490 --> 01:07:56,590 E 'un po' diverso rispetto # define. 1440 01:07:56,590 --> 01:08:02,740 >> E ora, il nostro codice funziona perfettamente. 1441 01:08:02,740 --> 01:08:05,230 Così, ancora una volta, # define prende qualcosa, sostituisce ovunque 1442 01:08:05,230 --> 01:08:06,780 con l'altra cosa. 1443 01:08:06,780 --> 01:08:07,920 E 'solo un macro - 1444 01:08:07,920 --> 01:08:09,420 stenografia per sbarazzarsi di numeri magici. 1445 01:08:09,420 --> 01:08:11,360 Ma in questo caso, perché siamo usarlo come un tipo - 1446 01:08:11,360 --> 01:08:12,180 proprio qui - 1447 01:08:12,180 --> 01:08:19,880 al fine di conseguire tale obiettivo, abbiamo bisogno di a typedef qualunque byte è. 1448 01:08:19,880 --> 01:08:21,840 >> E stiamo definendo proprio qui. 1449 01:08:21,840 --> 01:08:24,750 Non è una struct, in realtà è solo un numero intero senza segno. 1450 01:08:24,750 --> 01:08:27,680 E 'lunga un byte. 1451 01:08:27,680 --> 01:08:31,910 Questo codice sarà disponibile on-line, e tutti voi dovreste avere adesso. 1452 01:08:31,910 --> 01:08:33,830 >> Così abbiamo - 1453 01:08:33,830 --> 01:08:34,250 perfetto - 1454 01:08:34,250 --> 01:08:41,359 13 minuti lasciati andare problema su set 5. 1455 01:08:41,359 --> 01:08:44,270 Voglio camminare attraverso copy.c insieme, e poi parleremo brevemente 1456 01:08:44,270 --> 01:08:47,120 sulle altre parti del problema posto. 1457 01:08:47,120 --> 01:08:48,899 Così mi permetta di tirare su copy.c. 1458 01:08:48,899 --> 01:09:03,930 1459 01:09:03,930 --> 01:09:08,810 E la cosa interessante è che abbiamo effettivamente già scritto un sacco di codice. 1460 01:09:08,810 --> 01:09:11,180 >> Il codice che abbiamo scritto letteralmente appena è venuto fuori di qui quando ero 1461 01:09:11,180 --> 01:09:13,120 scrivendo questo per conto mio. 1462 01:09:13,120 --> 01:09:16,990 Ma questo è copy.c, costituisce il fondamento per le prime due parti 1463 01:09:16,990 --> 01:09:22,340 il problema impostato per whodunit.c, che è necessario scrivere, e resize.c. 1464 01:09:22,340 --> 01:09:27,050 Recover.c, che è la terza e ultima parte del problema proposto, non è 1465 01:09:27,050 --> 01:09:29,529 in base al largo di questo file. 1466 01:09:29,529 --> 01:09:32,200 >> Stai andando ad avere bisogno di scrivere quel file, vi diamo un modello per tale 1467 01:09:32,200 --> 01:09:34,620 il file, ma non ha nulla a che fare con copy.c. 1468 01:09:34,620 --> 01:09:38,675 Ma perché copy.c è il fondamento per le prime due parti, stiamo andando 1469 01:09:38,675 --> 01:09:42,000 a piedi attraverso di essa ora, in modo da avere un buon senso di ciò che fa. 1470 01:09:42,000 --> 01:09:43,640 >> E le osservazioni danno alcuni lontano. 1471 01:09:43,640 --> 01:09:45,120 Abbiamo già scritto una parte di questo. 1472 01:09:45,120 --> 01:09:49,220 In primo luogo, stiamo facendo in modo otteniamo tre argomenti. 1473 01:09:49,220 --> 01:09:50,560 Quindi, stiamo ricordando il nome del file. 1474 01:09:50,560 --> 01:09:52,960 Così abbiamo saltato questo passaggio quando abbiamo scritto la nostra cosa - 1475 01:09:52,960 --> 01:09:54,700 quando il nostro cp. 1476 01:09:54,700 --> 01:09:56,750 Ma qui, stanno facendo un po 'più pulito. 1477 01:09:56,750 --> 01:09:59,350 >> Stanno controllo per assicurarsi che entrambi i file sono buoni, in 1478 01:09:59,350 --> 01:10:00,450 Oltre alla loro apertura. 1479 01:10:00,450 --> 01:10:04,760 Abbiamo scritto tutto questo codice solo ora, quindi sono non andare a soffermarsi su questo codice. 1480 01:10:04,760 --> 01:10:09,670 Successivo è certo roba che è specifico per i tipi di file che stiamo usando, che 1481 01:10:09,670 --> 01:10:12,240 sono file bitmap. 1482 01:10:12,240 --> 01:10:15,660 File bitmap hanno alcuni metadati essi associati. 1483 01:10:15,660 --> 01:10:20,190 >> Quindi, la prima coppia di byte raccontarvi il file. 1484 01:10:20,190 --> 01:10:23,460 Non sono i colori dei il pixel in quella immagine. 1485 01:10:23,460 --> 01:10:25,120 Ti dicono sul file. 1486 01:10:25,120 --> 01:10:28,220 E se leggete attraverso il problema insieme, avrete molte più informazioni 1487 01:10:28,220 --> 01:10:33,100 su quali tipi di strutture di metadati sono inclusi con le bitmap. 1488 01:10:33,100 --> 01:10:39,350 >> Ma è per questo che abbiamo questo primo set di - questo codice proprio qui. 1489 01:10:39,350 --> 01:10:42,490 Stiamo leggendo i metadati - 1490 01:10:42,490 --> 01:10:45,800 due pezzi di metadata - il fascicolo intestazione e le informazioni nell'intestazione. 1491 01:10:45,800 --> 01:10:51,030 E stiamo verificando alcune parti di esso a assicurarsi che sia un file bitmap vero 1492 01:10:51,030 --> 01:10:52,420 prima di continuare. 1493 01:10:52,420 --> 01:10:55,470 >> E ancora, questi sono dettagli che non c'è bisogno di andare in ora. 1494 01:10:55,470 --> 01:10:57,720 Se leggete attraverso il problema insieme, capirai questi. 1495 01:10:57,720 --> 01:11:01,370 Per farla breve, questi sono solo dicendo, questo è un file bitmap, e 1496 01:11:01,370 --> 01:11:02,810 confermando che. 1497 01:11:02,810 --> 01:11:05,180 >> Quindi, stiamo scrivendo quelle al file fuori. 1498 01:11:05,180 --> 01:11:05,660 Vediamo che qui. 1499 01:11:05,660 --> 01:11:06,910 Stiamo scrivendo al puntatore fuori. 1500 01:11:06,910 --> 01:11:09,260 1501 01:11:09,260 --> 01:11:11,320 Quindi, stiamo determinando imbottitura. 1502 01:11:11,320 --> 01:11:15,240 Quindi, di nuovo, come è particolarità con un file bitmap, alcune linee comprendono 1503 01:11:15,240 --> 01:11:16,840 imbottitura alla fine. 1504 01:11:16,840 --> 01:11:19,000 E se leggete attraverso il problema insieme, per conoscere di più su imbottitura. 1505 01:11:19,000 --> 01:11:22,330 Questa è la formula per trovare imbottitura. 1506 01:11:22,330 --> 01:11:23,610 >> Importante da ricordare - 1507 01:11:23,610 --> 01:11:29,720 quando si modificano le dimensioni di una bitmap il file, le modifiche imbottitura. 1508 01:11:29,720 --> 01:11:31,970 Quando si modificano le dimensioni di un il file, le modifiche imbottitura. 1509 01:11:31,970 --> 01:11:34,310 Non è mai sarà maggiore di 3 - 1510 01:11:34,310 --> 01:11:36,510 sarà da 0 a 3, compreso. 1511 01:11:36,510 --> 01:11:38,930 Ma quando si modifica la dimensione del qualcosa, le modifiche imbottitura. 1512 01:11:38,930 --> 01:11:47,100 >> Se ho solo un pixel in quella riga, io bisogno di tre byte di padding, perché 1513 01:11:47,100 --> 01:11:51,190 ogni riga deve essere multipli di quattro byte a lungo in un file bitmap. 1514 01:11:51,190 --> 01:11:56,120 Ma se faccio doppio che, per andare da un pixel di due pixel, ciascuno dei quali, 1515 01:11:56,120 --> 01:11:59,510 diciamo, è un byte, quindi ho bisogno due byte di padding per fare 1516 01:11:59,510 --> 01:12:00,970 che uguale a quattro. 1517 01:12:00,970 --> 01:12:04,200 >> Così, quando cambio la dimensione di qualcosa, Ho bisogno di modificare la quantità 1518 01:12:04,200 --> 01:12:06,551 di imbottitura che ho. 1519 01:12:06,551 --> 01:12:08,100 Questo fa senso per tutti? 1520 01:12:08,100 --> 01:12:12,020 1521 01:12:12,020 --> 01:12:18,720 Successivamente, abbiamo iterare su ogni riga, o attraverso tutte le righe. 1522 01:12:18,720 --> 01:12:21,400 E poi iteriamo ogni colonna di ogni riga. 1523 01:12:21,400 --> 01:12:25,330 Stiamo trattando questa bitmap come una griglia, come abbiamo trattato 1524 01:12:25,330 --> 01:12:26,490 la scheda in 15. 1525 01:12:26,490 --> 01:12:29,200 >> Come abbiamo trattato i mattoni quando li abbiamo stampato sullo schermo. 1526 01:12:29,200 --> 01:12:31,350 Una griglia di righe e colonne. 1527 01:12:31,350 --> 01:12:32,350 Poi - abbiamo visto questo. 1528 01:12:32,350 --> 01:12:33,840 In realtà abbiamo appena codificato questo. 1529 01:12:33,840 --> 01:12:35,780 Abbiamo creato qualche deposito temporaneo. 1530 01:12:35,780 --> 01:12:38,710 Leggiamo in là, e poi scriviamo fuori. 1531 01:12:38,710 --> 01:12:42,680 Questo è esattamente quello che abbiamo appena fatto. 1532 01:12:42,680 --> 01:12:46,760 >> Poi, perché ho detto ogni linea finisce in qualche imbottitura, abbiamo 1533 01:12:46,760 --> 01:12:48,260 saltare quella imbottitura - 1534 01:12:48,260 --> 01:12:51,000 il vecchio imbottitura. 1535 01:12:51,000 --> 01:12:52,630 E poi ci aggiungiamo indietro. 1536 01:12:52,630 --> 01:12:55,140 In questo caso, stiamo creando lo stesso file esatto. 1537 01:12:55,140 --> 01:12:56,180 Stiamo solo copiarlo. 1538 01:12:56,180 --> 01:12:57,700 Quindi questa linea è una specie di sciocco. 1539 01:12:57,700 --> 01:12:59,660 Potremmo letteralmente appena mettere l'imbottitura dentro 1540 01:12:59,660 --> 01:13:04,290 >> Ma se si modifica la dimensione del file, Vuoi ancora questa linea? 1541 01:13:04,290 --> 01:13:08,510 1542 01:13:08,510 --> 01:13:11,560 Quindi, se cambiamo la dimensione di un file, Non abbiamo ancora voglia di saltare 1543 01:13:11,560 --> 01:13:12,810 sopra la vecchia imbottitura? 1544 01:13:12,810 --> 01:13:15,170 1545 01:13:15,170 --> 01:13:15,970 >> STUDENTE 74: sì. 1546 01:13:15,970 --> 01:13:17,090 >> JASON HIRSCHHORN: Così facciamo. 1547 01:13:17,090 --> 01:13:19,290 Perché questo, ancora una volta, offerte con il file di origine. 1548 01:13:19,290 --> 01:13:21,570 Non ci preoccupiamo per l'imbottitura dal file di origine. 1549 01:13:21,570 --> 01:13:23,410 Vogliamo passare alla riga successiva. 1550 01:13:23,410 --> 01:13:28,850 Ma non basta mettere indietro la vecchia quantità di imbottitura. 1551 01:13:28,850 --> 01:13:31,540 Abbiamo bisogno di mettere indietro l' nuovo importo di imbottitura. 1552 01:13:31,540 --> 01:13:35,810 >> Così, quando stiamo cambiando la dimensione di un dei file, abbiamo ancora voglia di saltare il 1553 01:13:35,810 --> 01:13:38,270 imbottitura nel vecchio file - cosa stiamo leggendo in da. 1554 01:13:38,270 --> 01:13:40,370 Ma quello che stiamo scrivendo a, stiamo andando per necessità di rimettere un po 'diverso 1555 01:13:40,370 --> 01:13:41,890 Numero di riempimento che abbiamo determinato. 1556 01:13:41,890 --> 01:13:42,780 Già. 1557 01:13:42,780 --> 01:13:44,550 >> STUDENTE 75: L'ordine di questi due le linee non importa, giusto? 1558 01:13:44,550 --> 01:13:46,160 Perché stai movimentazione diversi file. 1559 01:13:46,160 --> 01:13:46,620 >> JASON HIRSCHHORN: Esattamente. 1560 01:13:46,620 --> 01:13:48,220 L'ordine di queste due linee non importa. 1561 01:13:48,220 --> 01:13:49,790 Scriviamo questa linea. 1562 01:13:49,790 --> 01:13:51,430 Questo è qui per il file stiamo scrivendo a. 1563 01:13:51,430 --> 01:13:54,370 Questo è importante, in modo da ottenere la giusta quantità di imbottitura. 1564 01:13:54,370 --> 01:13:57,560 Questo ha a che fare con il file in. 1565 01:13:57,560 --> 01:13:58,560 Vogliamo passare direttamente sopra l'imbottitura. 1566 01:13:58,560 --> 01:13:59,470 >> Non vogliamo leggere - 1567 01:13:59,470 --> 01:14:01,500 se stiamo leggendo un byte alla volta, non si preoccupano di quei byte di riempimento. 1568 01:14:01,500 --> 01:14:04,070 Vogliamo passare alla riga successiva. 1569 01:14:04,070 --> 01:14:11,800 Infine, proprio come Lucy ha dato per noi, chiudiamo i file e torniamo 0. 1570 01:14:11,800 --> 01:14:13,890 Quindi questo è copy.c. 1571 01:14:13,890 --> 01:14:17,850 E abbiamo effettivamente scritto - abbiamo trascorso la maggior parte sezione di scrivere questo, in sostanza. 1572 01:14:17,850 --> 01:14:18,740 >> Hai fatto questo. 1573 01:14:18,740 --> 01:14:22,440 Quindi spero di avere un buon senso di quello che sta succedendo qui. 1574 01:14:22,440 --> 01:14:25,890 La grande differenza, onestamente, è solo questa prima parte che si occupa di 1575 01:14:25,890 --> 01:14:29,970 peculiarità di file bitmap. 1576 01:14:29,970 --> 01:14:33,570 Così ho la mia diapositiva successiva, che cosa dobbiamo fare? 1577 01:14:33,570 --> 01:14:35,510 Beh, pensiamo giallo. 1578 01:14:35,510 --> 01:14:38,080 >> E per qualcuno che lesse il problema set, cosa facciamo 1579 01:14:38,080 --> 01:14:41,410 bisogno di fare in giallo? 1580 01:14:41,410 --> 01:14:42,080 Semplicemente. 1581 01:14:42,080 --> 01:14:42,460 Aleja. 1582 01:14:42,460 --> 01:14:48,570 >> ALEJA: Riesci a prendere la parte di ogni pixel che denota rosso. 1583 01:14:48,570 --> 01:14:49,730 E poi - 1584 01:14:49,730 --> 01:14:50,730 tipo? 1585 01:14:50,730 --> 01:14:51,860 >> JASON HIRSCHHORN: OK. 1586 01:14:51,860 --> 01:14:54,460 Quindi prendere la parte di ogni pixel che denota rosso. 1587 01:14:54,460 --> 01:14:57,234 Che è vicino, ma non tutto. 1588 01:14:57,234 --> 01:14:59,780 >> STUDENTE 76: Beh, c'è diversi modi per farlo. 1589 01:14:59,780 --> 01:14:59,870 >> JASON HIRSCHHORN: OK. 1590 01:14:59,870 --> 01:15:03,070 Dammi un modo. 1591 01:15:03,070 --> 01:15:08,240 >> STUDENTE 76: Estrarre tutto il rosso, e poi sottolineare il blu e il verde. 1592 01:15:08,240 --> 01:15:10,010 >> JASON HIRSCHHORN: OK. 1593 01:15:10,010 --> 01:15:11,830 Quindi, dato entrambi i modi - 1594 01:15:11,830 --> 01:15:15,210 suona come diamo un pixel, ha un livello di rosso, blu e verde. 1595 01:15:15,210 --> 01:15:19,350 Vogliamo cambiare i relativi livelli di il rosso, blu e verde, a seconda 1596 01:15:19,350 --> 01:15:20,740 su quel pixel. 1597 01:15:20,740 --> 01:15:28,380 Se in questo codice dovremmo cambiare la relativa rosso, blu e verde 1598 01:15:28,380 --> 01:15:29,720 livelli di un dato pixel. 1599 01:15:29,720 --> 01:15:30,600 Dopo che abbiamo letto è - 1600 01:15:30,600 --> 01:15:32,520 prima che noi scriviamo? 1601 01:15:32,520 --> 01:15:34,564 Dammi il numero di riga. 1602 01:15:34,564 --> 01:15:35,950 >> STUDENTI PIÙ: 83. 1603 01:15:35,950 --> 01:15:37,320 >> JASON HIRSCHHORN: 83. 1604 01:15:37,320 --> 01:15:38,570 Quindi, proprio qui. 1605 01:15:38,570 --> 01:15:40,830 1606 01:15:40,830 --> 01:15:45,710 Per il giallo, il codice è necessario scrittura dovrebbe andare tutti lì. 1607 01:15:45,710 --> 01:15:47,640 E questo è l'unico codice è necessario scrivere. 1608 01:15:47,640 --> 01:15:51,520 Perché, come abbiamo sentito, tutto è necessario fare è cambiare queste relativa blu, 1609 01:15:51,520 --> 01:15:54,420 i livelli di rosso e verdi da ogni pixel. 1610 01:15:54,420 --> 01:15:58,250 >> Avete letto in, e ora sei intenzione di scrivere fuori. 1611 01:15:58,250 --> 01:16:03,100 Come faccio a ottenere - se ho questa cosa chiamato tripla, proprio qui, ed è di 1612 01:16:03,100 --> 01:16:04,570 tipo RGBTRIPLE - 1613 01:16:04,570 --> 01:16:08,650 bene, se abbiamo guardato in bmp.h, ciò è RGBTRIPLE? 1614 01:16:08,650 --> 01:16:11,450 1615 01:16:11,450 --> 01:16:12,700 >> STUDENTE 77: E 'una struct. 1616 01:16:12,700 --> 01:16:17,440 1617 01:16:17,440 --> 01:16:18,900 >> JASON HIRSCHHORN: RGBTRIPLE è una struct. 1618 01:16:18,900 --> 01:16:22,330 Vediamo che proprio qui. 1619 01:16:22,330 --> 01:16:26,600 E così, se volevo accedere, ad esempio, il Livello rosso della struttura, come faccio 1620 01:16:26,600 --> 01:16:30,005 accedere al livello rosso di questa struttura? 1621 01:16:30,005 --> 01:16:37,280 >> [CLASS mormora] 1622 01:16:37,280 --> 01:16:38,530 >> STUDENTE 78: RGBTRIPLE.rgbtred? 1623 01:16:38,530 --> 01:16:47,250 1624 01:16:47,250 --> 01:16:48,856 >> JASON HIRSCHHORN: E 'esatto? 1625 01:16:48,856 --> 01:16:53,040 >> STUDENTE 79: Dovrebbe essere triplo dot, invece di RGBTRIPLE dot? 1626 01:16:53,040 --> 01:16:54,120 >> JASON HIRSCHHORN: Triple. 1627 01:16:54,120 --> 01:16:56,700 Triple è la variabile locale, quindi Qui, non ci sono puntatori qui. 1628 01:16:56,700 --> 01:16:58,400 Così abbiamo appena usato la notazione del punto. 1629 01:16:58,400 --> 01:17:00,480 Questo mi darà il livello di rosso. 1630 01:17:00,480 --> 01:17:06,180 Se voglio cambiare, ho appena impostato uguale a qualcosa di diverso. 1631 01:17:06,180 --> 01:17:13,190 Quindi, di nuovo, questa riga di codice accessi questa variabile all'interno di questa struttura, e 1632 01:17:13,190 --> 01:17:15,070 possiamo impostare a qualcosa di nuovo. 1633 01:17:15,070 --> 01:17:20,040 >> Così per giallo, ancora una volta, questo è, in sostanza, quello che dobbiamo fare. 1634 01:17:20,040 --> 01:17:21,170 Molto semplice. 1635 01:17:21,170 --> 01:17:25,020 Basta cambiare alcuni livelli relativi, e è qui che il codice va. 1636 01:17:25,020 --> 01:17:27,720 Ridimensionare, d'altra parte, è un po 'più complicato. 1637 01:17:27,720 --> 01:17:30,900 In realtà, il ridimensionamento è probabilmente l' parte più difficile di questo problema set. 1638 01:17:30,900 --> 01:17:32,720 Abbiamo tre minuti per andare su di esso. 1639 01:17:32,720 --> 01:17:34,910 >> Ma ancora una volta, abbiamo già scritto la maggior parte di questo codice, in modo da 1640 01:17:34,910 --> 01:17:36,500 dovrebbe essere abbastanza familiare. 1641 01:17:36,500 --> 01:17:40,750 Quali sono alcune cose che vogliamo fare in ridimensionare, se avete letto sopra il 1642 01:17:40,750 --> 01:17:43,470 set problema? 1643 01:17:43,470 --> 01:17:45,290 Se li dai a me, si può parlare di loro. 1644 01:17:45,290 --> 01:17:47,340 Quali sono alcune cose che vogliamo fare? 1645 01:17:47,340 --> 01:17:47,970 >> STUDENTE 80: verticale - 1646 01:17:47,970 --> 01:17:52,360 quindi bisogna orizzontale ridimensionarlo, ma verticalmente ridimensionarla come bene? 1647 01:17:52,360 --> 01:17:58,475 >> JASON HIRSCHHORN: Quindi se stiamo dato una pixel, e vogliamo ridimensionarlo da un 1648 01:17:58,475 --> 01:18:03,460 fattore due, la guida deve essere ridimensionata orizzontalmente e ridimensionato 1649 01:18:03,460 --> 01:18:05,220 verticalmente. 1650 01:18:05,220 --> 01:18:06,640 Ritiene che senso? 1651 01:18:06,640 --> 01:18:07,060 Già. 1652 01:18:07,060 --> 01:18:09,300 Ecco, questo è probabilmente il sfida più grande. 1653 01:18:09,300 --> 01:18:10,430 E noi parleremo in un secondo. 1654 01:18:10,430 --> 01:18:11,065 Già. 1655 01:18:11,065 --> 01:18:15,270 >> STUDENTE 81: Il modo in cui ho pensato che era il necessario stampare fuori - 1656 01:18:15,270 --> 01:18:15,490 >> JASON HIRSCHHORN: Aspetta. 1657 01:18:15,490 --> 01:18:17,580 Non dirci che cosa hai fatto. 1658 01:18:17,580 --> 01:18:20,620 Stiamo per parlare di logica. 1659 01:18:20,620 --> 01:18:21,870 >> STUDENTE 81: OK. 1660 01:18:21,870 --> 01:18:25,090 1661 01:18:25,090 --> 01:18:27,410 Qual era la domanda? 1662 01:18:27,410 --> 01:18:28,892 >> JASON HIRSCHHORN: Hai appena alzato la mano. 1663 01:18:28,892 --> 01:18:31,600 Non c'era alcun dubbio. 1664 01:18:31,600 --> 01:18:32,520 Fammi presento. 1665 01:18:32,520 --> 01:18:34,560 Vorrei solo discutere brevemente. 1666 01:18:34,560 --> 01:18:38,400 Così abbiamo un pixel, vogliamo replicare, sia in orizzontale che 1667 01:18:38,400 --> 01:18:39,360 verticalmente. 1668 01:18:39,360 --> 01:18:48,920 Quindi idealmente quello che facciamo qui è, si leggere nella nostra pixel, lo scriviamo 1669 01:18:48,920 --> 01:18:51,690 tuttavia molti di volte. 1670 01:18:51,690 --> 01:18:54,720 >> Ma poi abbiamo il nostro trucco, perché poi vogliamo passare al 1671 01:18:54,720 --> 01:18:57,660 riga successiva e scrivere al inizio della riga successiva. 1672 01:18:57,660 --> 01:19:02,960 Quindi, se vogliamo replicare sia orizzontalmente e verticalmente, ciò che è 1673 01:19:02,960 --> 01:19:05,050 un buon modo per farlo - 1674 01:19:05,050 --> 01:19:06,780 uno buono, anche se per farlo? 1675 01:19:06,780 --> 01:19:11,950 Quindi non abbiamo bisogno di cercare costantemente intorno al nostro file per mettere le cose. 1676 01:19:11,950 --> 01:19:14,360 >> Tale questione potrebbe non avere aveva un senso, ma penso che un 1677 01:19:14,360 --> 01:19:15,800 rispondere ad esso sarà di aiuto. 1678 01:19:15,800 --> 01:19:17,210 >> STUDENTE 82: Creare un array? 1679 01:19:17,210 --> 01:19:20,090 >> JASON HIRSCHHORN: Quindi cerchiamo di pensare di ogni file come una riga. 1680 01:19:20,090 --> 01:19:22,550 Pensiamo in termini di righe. 1681 01:19:22,550 --> 01:19:26,670 Se abbiamo la nostra prima fila dal nostro piccolo foto, possiamo fare la riga 1682 01:19:26,670 --> 01:19:30,640 in un grande riga da una grande immagine, e quindi replicare quella riga però 1683 01:19:30,640 --> 01:19:34,250 molte volte ha bisogno di essere replicati, piuttosto che andare pixel per pixel, 1684 01:19:34,250 --> 01:19:37,260 che ottiene confusa quando la gestione dei file. 1685 01:19:37,260 --> 01:19:38,730 >> Perché se avessimo - 1686 01:19:38,730 --> 01:19:41,260 Sono a corto di spazio. 1687 01:19:41,260 --> 01:19:46,490 Se questo è il nostro file, e abbiamo che un pixel lì, e vogliamo metterlo 1688 01:19:46,490 --> 01:19:49,840 proprio lì, abbiamo ancora alcune cose che hanno bisogno di andare lì quando siamo 1689 01:19:49,840 --> 01:19:51,450 scrivere e creare il nostro nuovo file - 1690 01:19:51,450 --> 01:19:53,250 il nostro file che è due volte più grande. 1691 01:19:53,250 --> 01:19:56,820 >> Ma è davvero difficile con funzioni di file per saltare intorno per nuove linee 1692 01:19:56,820 --> 01:20:00,260 così, e poi tornare qui e mettere le cose in là. 1693 01:20:00,260 --> 01:20:04,500 E 'quasi impossibile fare qualcosa che, se questo ha un senso. 1694 01:20:04,500 --> 01:20:10,180 Quindi, se pensiamo in termini di righe, possiamo prendere la nostra fila, e poi metterlo - 1695 01:20:10,180 --> 01:20:11,720 replicare le righe in verticale. 1696 01:20:11,720 --> 01:20:15,860 >> Ed è così che abbiamo a che fare con il ridimensionamento verticale anziché in orizzontale. 1697 01:20:15,860 --> 01:20:18,810 Quella era una sorta di rapida e un po 'di confusione. 1698 01:20:18,810 --> 01:20:22,375 Purtroppo il nostro tempo è scaduto. 1699 01:20:22,375 --> 01:20:27,340 Io starò fuori per quelli di voi qui che hanno domande circa la 1700 01:20:27,340 --> 01:20:30,500 set problema, compresi recuperare. 1701 01:20:30,500 --> 01:20:32,320 >> Quindi cerchiamo di rinviare per ora. 1702 01:20:32,320 --> 01:20:34,480 E ancora, se avete domande, possiamo chiacchierare fuori. 1703 01:20:34,480 --> 01:20:38,294