1 00:00:00,000 --> 00:00:07,810 2 00:00:07,810 --> 00:00:09,840 >> JASON HIRSCHHORN: Bienvenue, tout le monde, à la semaine 6. 3 00:00:09,840 --> 00:00:14,790 Je suis heureux de vous voir tous en vie et bien après Quiz 0, parce que je sais que 4 00:00:14,790 --> 00:00:15,810 était un peu rude. 5 00:00:15,810 --> 00:00:18,370 Mais heureusement, vous tous fait incroyablement bien. 6 00:00:18,370 --> 00:00:21,680 Et ce qui est merveilleux. 7 00:00:21,680 --> 00:00:25,840 Si vous êtes dans mon article, j'ai donné plus de vous soutenir déjà vos tests. 8 00:00:25,840 --> 00:00:28,050 >> Un couple d'entre vous, je vais rencontrer après la classe. 9 00:00:28,050 --> 00:00:32,360 Et si vous êtes un étudiant d'extension et vous n'avez pas reçu votre quiz dos 10 00:00:32,360 --> 00:00:35,490 encore, votre carte de TF travaille probablement sur elle et le classement, et va le récupérer 11 00:00:35,490 --> 00:00:36,490 sous peu. 12 00:00:36,490 --> 00:00:39,650 Alors mes étudiants de vulgarisation qui sont regarder en ce moment - nous l'espérons vivre - 13 00:00:39,650 --> 00:00:42,880 Je vais faire vos tests peu de temps ainsi. 14 00:00:42,880 --> 00:00:45,670 >> Notre ordre du jour d'aujourd'hui est comme suit. 15 00:00:45,670 --> 00:00:50,170 Tout d'abord, nous allons passer en revue certains ressources qui CS50 vous offre. 16 00:00:50,170 --> 00:00:54,590 Nous allons passer en revue Quiz 0, et Je vais répondre à toutes les questions qui que ce soit 17 00:00:54,590 --> 00:00:57,360 a propos de problèmes particuliers. 18 00:00:57,360 --> 00:01:02,050 Et puis, nous allons nous rendre sur fichier I / O et le problème mis 5. 19 00:01:02,050 --> 00:01:07,360 Ces deux derniers sujets auront l'essentiel de l'article aujourd'hui. 20 00:01:07,360 --> 00:01:11,680 >> Je mets cette liste chaque semaine comme un rappel pour vous tous, mais de cœur 21 00:01:11,680 --> 00:01:14,650 section, nous avons seulement 90 minutes - nous ne sont pas en mesure de couvrir tout ce que je 22 00:01:14,650 --> 00:01:16,280 aimerait couvrir pour vous les gars. 23 00:01:16,280 --> 00:01:21,170 Mais nous avons une tonne de ressources pour vous dessinez sur que vous apprenez à connaître 24 00:01:21,170 --> 00:01:24,000 le matériel et le travail par votre problème fixe. 25 00:01:24,000 --> 00:01:30,810 >> Un rappel que j'ai en ligne un texte boîte, mis en place pour vous à remplir si vous 26 00:01:30,810 --> 00:01:33,250 avoir une rétroaction pour moi, à la fois positif et 27 00:01:33,250 --> 00:01:35,180 constructive, sur la section. 28 00:01:35,180 --> 00:01:38,600 Cette URL est situé ici. 29 00:01:38,600 --> 00:01:43,250 Alors s'il vous plaît, prenez un moment si vous avez une informations, que ce soit pendant section, 30 00:01:43,250 --> 00:01:48,030 ou après, ou après vous regardez la vidéo en ligne, à me donner votre avis. 31 00:01:48,030 --> 00:01:52,100 J'apprécie vraiment tout et tout. 32 00:01:52,100 --> 00:01:55,730 >> Donc, j'ai eu des petites conversations avec beaucoup de mon 33 00:01:55,730 --> 00:01:59,350 les étudiants tout au long de la semaine - que je remets quiz dos, parler de la 34 00:01:59,350 --> 00:02:01,480 Bien sûr, de voir comment vous faites. 35 00:02:01,480 --> 00:02:05,120 Et un thème est venu sur et plus en parler - dans 36 00:02:05,120 --> 00:02:05,660 particulier - 37 00:02:05,660 --> 00:02:07,710 problème fixe. 38 00:02:07,710 --> 00:02:13,090 Et j'ai encapsulé ce thème sur la carte en ce moment. 39 00:02:13,090 --> 00:02:16,630 >> Essentiellement, il ya une différence entre la mise en quelque chose qui est 40 00:02:16,630 --> 00:02:19,590 fait correctement et quelque chose qui est bien fait. 41 00:02:19,590 --> 00:02:22,920 La plupart des gens ont fait fantastique en termes d'exactitude - 42 00:02:22,920 --> 00:02:25,460 De 5 ou 4 est sur tous les psets. 43 00:02:25,460 --> 00:02:27,930 La plupart des gens sont ceux de tous les temps. 44 00:02:27,930 --> 00:02:31,150 >> Cependant, juste parce que vous avez fait quelque chose de bien ne veut pas dire que vous avez 45 00:02:31,150 --> 00:02:34,450 fait quelque chose avec autant d'élégance, ou efficace, ou plus proprement que vous 46 00:02:34,450 --> 00:02:35,270 aurait pu le faire. 47 00:02:35,270 --> 00:02:36,790 Et c'est ce que la conception - 48 00:02:36,790 --> 00:02:39,230 et à un degré moindre, le style - 49 00:02:39,230 --> 00:02:40,450 axes sont pour. 50 00:02:40,450 --> 00:02:45,130 Donc, je vous poussais tout, et d'autres facteurs de transcription poussent les gars, non seulement à son tour 51 00:02:45,130 --> 00:02:48,320 dans les choses qui sont correctes, mais se transforment dans les choses qui sont bien codées. 52 00:02:48,320 --> 00:02:53,060 >> Ne pas faire inutilement POUR boucles, pas recalculer les variables si 53 00:02:53,060 --> 00:02:53,800 vous n'avez pas à. 54 00:02:53,800 --> 00:02:58,520 Par exemple, en regardant en arrière à problème posé 4, lors du placement des briques sur le 55 00:02:58,520 --> 00:03:03,070 écran, chaque ligne - chaque brique dans un ligne donnée a la même coordonnée y - 56 00:03:03,070 --> 00:03:04,390 la même hauteur de coordonnées. 57 00:03:04,390 --> 00:03:07,930 >> Alors que la coordonnée y n'a pas besoin de calculer à l'intérieur de l'habitacle 58 00:03:07,930 --> 00:03:11,070 boucle FOR imbriquée que vous avez probablement utilisé de mettre ces briques sur l'écran. 59 00:03:11,070 --> 00:03:14,030 Il ne doit être calculé chaque temps vous avez changé une ligne, ou 60 00:03:14,030 --> 00:03:15,200 déplacé vers le bas une ligne. 61 00:03:15,200 --> 00:03:19,760 Donc, dire s'il ya 10 briques dans une rangée, chaque brique peut avoir le même 62 00:03:19,760 --> 00:03:22,260 coordonnée y, et que y coordonner peut seulement être calculée 63 00:03:22,260 --> 00:03:23,550 une fois pour toutes de ceux-ci. 64 00:03:23,550 --> 00:03:27,810 >> Il n'a pas besoin d'être calculé 10 temps, ni le fait que le calcul nécessité 65 00:03:27,810 --> 00:03:30,220 se passer dans le réel appel de fonction - 66 00:03:30,220 --> 00:03:33,020 le nouvel appel de fonction gracked. 67 00:03:33,020 --> 00:03:37,820 Donc, si c'était un peu déroutant pour vous, plus générique, des choses qui 68 00:03:37,820 --> 00:03:40,730 n'ont pas besoin de se produire à chaque fois vous passez par une boucle POUR devrait pas être 69 00:03:40,730 --> 00:03:42,900 mettre à l'intérieur de la boucle POUR, et ne devrait pas se produire chaque fois que vous allez 70 00:03:42,900 --> 00:03:44,080 à travers la boucle POUR. 71 00:03:44,080 --> 00:03:49,270 >> Un autre bon exemple de conception, nous avons vu à la semaine 3 à 15, vous pouvez conserver 72 00:03:49,270 --> 00:03:50,500 piste de zéro. 73 00:03:50,500 --> 00:03:53,600 Ainsi, lorsque vous initialisez la carte, vous sauver - dans une variable globale, peut-être - 74 00:03:53,600 --> 00:03:56,140 x et y coordonnées du zéro. 75 00:03:56,140 --> 00:03:57,520 Et puis quand vous - 76 00:03:57,520 --> 00:04:00,310 dans votre fonction de déplacement, à chaque fois que vous faites un déménagement réussi, vous mettez à jour le 77 00:04:00,310 --> 00:04:02,040 emplacement du zéro. 78 00:04:02,040 --> 00:04:06,240 >> Cela vous évitera d'avoir à faire boucles for imbriquées à regarder à travers la 79 00:04:06,240 --> 00:04:10,700 monter à chaque fois dans votre fonction de déplacement et trouver le zéro, ou trouver la tuile, 80 00:04:10,700 --> 00:04:12,460 puis vérifier ce qui est à côté de lui. 81 00:04:12,460 --> 00:04:16,329 Au lieu de cela, vous avez l'emplacement de l' zéro, il vous suffit de regarder au-dessus, au-dessous, 82 00:04:16,329 --> 00:04:21,160 et à la gauche et à droite de celui-ci, de trouver la tuile que vous recherchez. 83 00:04:21,160 --> 00:04:24,970 >> Donc, en ce qui concerne les programmes que nous sommes écrit, ils ne sont jamais assez grand 84 00:04:24,970 --> 00:04:28,580 que certains de ces choix de conception sont vraiment à nuire à votre 85 00:04:28,580 --> 00:04:31,670 programme, ou le faire tourner plus lentement, ou peut-être même à court de mémoire. 86 00:04:31,670 --> 00:04:35,030 Mais nous sommes toujours vous pousser gars d'écrire aussi élégant et 87 00:04:35,030 --> 00:04:36,450 code efficace que possible. 88 00:04:36,450 --> 00:04:39,910 >> Donc, si vous finissez par écrire des choses qui ont une beaucoup plus grande 89 00:04:39,910 --> 00:04:44,660 portée, ils seront écrits avec une bonne concevoir en plus d'être correct. 90 00:04:44,660 --> 00:04:46,300 Ainsi, un certain nombre d'entre vous avez apporté cela. 91 00:04:46,300 --> 00:04:48,560 C'est quelque chose que nous sommes à la recherche - quelque chose que nous allons continuer à 92 00:04:48,560 --> 00:04:49,840 vous pousser gars sur. 93 00:04:49,840 --> 00:04:52,460 >> Si jamais vous avez des questions au sujet de la conception de votre programme, n'hésitez pas 94 00:04:52,460 --> 00:04:56,870 à atteindre pour moi, et je suis heureux de marcher à travers votre programme avec vous, 95 00:04:56,870 --> 00:05:01,320 et souligner certains de la conception décisions que vous faites, et vous donner quelques 96 00:05:01,320 --> 00:05:06,240 des suggestions sur la façon de faire de même de meilleures décisions de conception. 97 00:05:06,240 --> 00:05:08,870 >> Nous allons donc passer à parler de Quiz 0. 98 00:05:08,870 --> 00:05:11,300 Avant cela, quelqu'un Pour toute question au sujet de ce 99 00:05:11,300 --> 00:05:14,252 J'ai abordé jusqu'à présent? 100 00:05:14,252 --> 00:05:21,500 >> [Bruissement] 101 00:05:21,500 --> 00:05:22,750 >> JASON HIRSCHHORN: Sept secondes. 102 00:05:22,750 --> 00:05:23,250 OK. 103 00:05:23,250 --> 00:05:24,970 Parlons Quiz 0 pour un peu. 104 00:05:24,970 --> 00:05:26,700 La plupart d'entre vous ont votre Quiz 0 le dos. 105 00:05:26,700 --> 00:05:29,820 Si vous ne le faites pas, je l'espère Vous souvenez-vous un peu. 106 00:05:29,820 --> 00:05:34,770 Mais si vous avez pris Quiz 0, alors vous ont également accès à la version PDF en ligne 107 00:05:34,770 --> 00:05:35,890 les solutions d'échantillon. 108 00:05:35,890 --> 00:05:39,480 >> Quelqu'un at-il des questions avant nous sautons dans le matériel de la semaine sur 109 00:05:39,480 --> 00:05:41,520 un problème particulier sur Quiz 0 - 110 00:05:41,520 --> 00:05:44,630 pourquoi la réponse est ce qu'elle est? 111 00:05:44,630 --> 00:05:47,255 Est ce que quelqu'un confus au sujet de quoi que ce soit? 112 00:05:47,255 --> 00:05:50,230 Même si vous avez le problème de droite, mais vous voulez juste moi d'expliquer un peu 113 00:05:50,230 --> 00:05:52,640 De plus, je suis heureux de le faire maintenant. 114 00:05:52,640 --> 00:05:57,800 >> Alors j'ai demandé à vous les gars pour se préparer avec une certaine 115 00:05:57,800 --> 00:05:59,440 réflexions sur Quiz 0. 116 00:05:59,440 --> 00:06:02,660 Alors, qui voudrait nous faire commencé avec une question ou 117 00:06:02,660 --> 00:06:04,655 commenter Quiz 0? 118 00:06:04,655 --> 00:06:07,435 119 00:06:07,435 --> 00:06:10,410 >> [Papier froissé] 120 00:06:10,410 --> 00:06:11,470 >> JASON HIRSCHHORN: Pas tout le monde fait parfaitement. 121 00:06:11,470 --> 00:06:12,720 Donc, je sais [RIRES] 122 00:06:12,720 --> 00:06:15,950 il doit y avoir quelques questions Quiz 0. 123 00:06:15,950 --> 00:06:27,940 124 00:06:27,940 --> 00:06:28,590 OK. 125 00:06:28,590 --> 00:06:29,210 Oui. 126 00:06:29,210 --> 00:06:29,600 Ompica. 127 00:06:29,600 --> 00:06:30,520 >> OMPICA: Numéro 10. 128 00:06:30,520 --> 00:06:33,560 >> JASON HIRSCHHORN: Numéro 10. 129 00:06:33,560 --> 00:06:35,400 Lequel était le numéro 10? 130 00:06:35,400 --> 00:06:35,840 >> OMPICA: Le - 131 00:06:35,840 --> 00:06:36,420 >> JASON HIRSCHHORN: Je haven't - 132 00:06:36,420 --> 00:06:37,670 >> OMPICA: Le incluent - 133 00:06:37,670 --> 00:06:40,060 134 00:06:40,060 --> 00:06:42,180 >> JASON HIRSCHHORN: Numéro 10 était huit i - écrit huit à i? 135 00:06:42,180 --> 00:06:42,980 >> OMPICA: Ouais. 136 00:06:42,980 --> 00:06:43,630 >> JASON HIRSCHHORN: OK. 137 00:06:43,630 --> 00:06:47,390 Donc, une autre question que vous pourriez avoir demandé est-ce que je prémonitoire? 138 00:06:47,390 --> 00:06:48,630 La réponse est oui. 139 00:06:48,630 --> 00:06:52,060 Dans la section avant le test, j'ai demandé vous les gars pour coder à la fois sterling et 140 00:06:52,060 --> 00:06:52,980 huit à i. 141 00:06:52,980 --> 00:06:54,770 Deux d'entre eux est arrivé à apparaître sur le questionnaire. 142 00:06:54,770 --> 00:06:57,510 Donc, j'espère, vous avez payé attention à cela. 143 00:06:57,510 --> 00:07:02,520 >> Et si vous aviez, vous auriez probablement bien fait sur les deux. 144 00:07:02,520 --> 00:07:06,030 Mais huit à i, nous n'avons pas réellement le code en classe, mais il était, encore une fois, 145 00:07:06,030 --> 00:07:07,500 demandé sur le questionnaire. 146 00:07:07,500 --> 00:07:13,270 Ainsi, un certain nombre de choses à prendre noter lors du codage huit à i. 147 00:07:13,270 --> 00:07:17,320 La première chose, par la question, était que vous avez besoin de vérifier si la chaîne 148 00:07:17,320 --> 00:07:20,300 était égal à zéro. 149 00:07:20,300 --> 00:07:28,060 >> Quelques personnes ont essayé de vérifier plus tard dans le programme de la console si j'ai été - 150 00:07:28,060 --> 00:07:30,940 donc un caractère spécifique dans ce chaîne - était égal à zéro. 151 00:07:30,940 --> 00:07:35,600 Mais rappelez-vous, que nul est essentiellement - il est bon de penser à 152 00:07:35,600 --> 00:07:39,100 null comme un pointeur zéro - un pointeur à zéro - 153 00:07:39,100 --> 00:07:40,920 quelque part dans la mémoire où vous ne pouvez jamais accéder. 154 00:07:40,920 --> 00:07:44,730 >> Donc, si quelque chose est égale à zéro, vous savoir qu'il n'a pas été initialisé, 155 00:07:44,730 --> 00:07:46,430 ou il n'y a rien. 156 00:07:46,430 --> 00:07:50,950 Donc s est une étoile de char, s support i est un caractère. 157 00:07:50,950 --> 00:07:57,410 Il est donc logique de comparer l null, mais pas de la tranche i à null. 158 00:07:57,410 --> 00:07:59,390 Mais encore une fois - de sorte que la première chose que vous étiez censé faire - 159 00:07:59,390 --> 00:08:03,510 assurez-vous que vous avez réellement obtenu une véritable chaîne. 160 00:08:03,510 --> 00:08:08,020 >> Ensuite, vous vouliez passer par chaque caractère dans la chaîne. 161 00:08:08,020 --> 00:08:12,500 Et ce serait comme un support de s i, par exemple, si i est votre itérateur. 162 00:08:12,500 --> 00:08:17,250 Et prendre ce personnage, et obtenir sa valeur réelle. 163 00:08:17,250 --> 00:08:21,800 Vous avez il stocké comme un char, mais la valeur ASCII zéro - 164 00:08:21,800 --> 00:08:23,010 zéro comme un personnage - 165 00:08:23,010 --> 00:08:25,450 n'est pas réellement le nombre entier zéro. 166 00:08:25,450 --> 00:08:28,700 C'est un autre numéro que vous pouvez rechercher dans la table ASCII. 167 00:08:28,700 --> 00:08:30,790 >> Donc, une façon de corriger pour que - probablement la meilleure façon de corriger les 168 00:08:30,790 --> 00:08:33,760 que - est soustrait de lui la valeur de caractère - 169 00:08:33,760 --> 00:08:35,140 zéro comme un personnage. 170 00:08:35,140 --> 00:08:38,490 Apostrophe donc moins, zéro, une autre apostrophe. 171 00:08:38,490 --> 00:08:44,620 Cela prendra quelque nombre vous avez comme un char, et obtenir égal à 172 00:08:44,620 --> 00:08:46,720 le nombre comme un entier réel. 173 00:08:46,720 --> 00:08:50,300 >> Et cela est très similaire à l'approche beaucoup de gens ont pris dans le 174 00:08:50,300 --> 00:08:52,800 problème réglé 2, avec César et Viginere - 175 00:08:52,800 --> 00:08:55,160 ces chiffres, lorsque vous ont été les faisant tourner. 176 00:08:55,160 --> 00:08:59,210 Donc, après vous avez comme un certain nombre de zéro à neuf, alors - selon 177 00:08:59,210 --> 00:09:02,750 où il va dans le nombre final - vous devez multiplier 178 00:09:02,750 --> 00:09:04,120 par une puissance de 10. 179 00:09:04,120 --> 00:09:07,340 >> Certaines personnes déplacées à l'arrière de la avant, et multiplié la personne 180 00:09:07,340 --> 00:09:08,940 nombre par une puissance de 10. 181 00:09:08,940 --> 00:09:11,160 Certaines personnes déplacées de l'avant vers l'arrière - 182 00:09:11,160 --> 00:09:14,430 et donc nous avons pris le plus grand pour les numéros de la première - 183 00:09:14,430 --> 00:09:18,190 et permettrait de sauver ceux qui sont en compteur variable globale. 184 00:09:18,190 --> 00:09:20,880 Et puis à chaque fois par la DE boucle, multipliez ce géant mondial 185 00:09:20,880 --> 00:09:25,640 variable compteur par 10, pour faire espace pour le caractère suivant. 186 00:09:25,640 --> 00:09:28,750 >> Donc, c'était un peu déroutant sans me l'écrire sur la carte. 187 00:09:28,750 --> 00:09:31,550 Mais la solution de l'échantillon est disponible pour vous. 188 00:09:31,550 --> 00:09:32,870 Mais ce sont les grandes choses nous cherchions. 189 00:09:32,870 --> 00:09:36,400 Également une vérification pour s'assurer que chaque caractère individuel était en effet un 190 00:09:36,400 --> 00:09:39,780 caractère entre zéro et neuf, et pas un autre caractère, comme un A, 191 00:09:39,780 --> 00:09:41,160 par exemple. 192 00:09:41,160 --> 00:09:43,150 >> Ce sont les choses que nous cherchions à cette question. 193 00:09:43,150 --> 00:09:46,510 194 00:09:46,510 --> 00:09:47,980 Est-ce que cela répond à votre question? 195 00:09:47,980 --> 00:09:49,320 >> OMPICA: Ouais. 196 00:09:49,320 --> 00:09:50,240 >> JASON HIRSCHHORN: OK. 197 00:09:50,240 --> 00:09:53,940 Y at-il d'autres questions Quiz 0? 198 00:09:53,940 --> 00:09:55,440 Qu'est-ce que sur la compilation? 199 00:09:55,440 --> 00:09:56,740 Tout le monde la compilation droit? 200 00:09:56,740 --> 00:09:58,370 Non. 201 00:09:58,370 --> 00:09:58,840 Il y avait un - 202 00:09:58,840 --> 00:10:01,010 [RIRES] 203 00:10:01,010 --> 00:10:03,265 Une question sur l' processus de compilation? 204 00:10:03,265 --> 00:10:06,050 205 00:10:06,050 --> 00:10:06,966 Wow. 206 00:10:06,966 --> 00:10:11,090 >> [Papier froissé] 207 00:10:11,090 --> 00:10:11,520 >> JASON HIRSCHHORN: Oui. 208 00:10:11,520 --> 00:10:11,700 Michael. 209 00:10:11,700 --> 00:10:14,140 >> MICHAEL: Est-numéro 7 - aléatoire? 210 00:10:14,140 --> 00:10:16,500 >> JASON HIRSCHHORN: Numéro 7. 211 00:10:16,500 --> 00:10:20,670 Numéro 7 a obtenir un nombre entier aléatoire. 212 00:10:20,670 --> 00:10:21,110 Excellent. 213 00:10:21,110 --> 00:10:25,630 Donc, vous êtes donné un entier a et un entier b, et que vous voulez un hasard 214 00:10:25,630 --> 00:10:28,710 entier compris entre a et b. 215 00:10:28,710 --> 00:10:31,740 Nous pouvons réellement écrire celui-ci sur le conseil, car celui-ci 216 00:10:31,740 --> 00:10:33,320 était une ligne de code - 217 00:10:33,320 --> 00:10:34,390 un moyen de le faire. 218 00:10:34,390 --> 00:10:37,810 >> Nous avons donc donné drand comme un fonction que nous pourrions utiliser. 219 00:10:37,810 --> 00:10:38,820 Et qu'est-ce que DRAND - 220 00:10:38,820 --> 00:10:40,290 en supposant qu'il a été ensemencé - 221 00:10:40,290 --> 00:10:42,316 ce qui ne DRAND revenir? 222 00:10:42,316 --> 00:10:44,840 >> MICHAEL: Un flotteur entre 0.0 et 1.0. 223 00:10:44,840 --> 00:10:45,530 >> JASON HIRSCHHORN: Un certain nombre - ouais. 224 00:10:45,530 --> 00:10:47,910 Un nombre entre 0 et 1. 225 00:10:47,910 --> 00:10:51,760 Et si nous avons b et a. 226 00:10:51,760 --> 00:10:55,480 Et puis nous avons notre numéro aléatoire entre 0 et 1 qui nous est donnée par drand. 227 00:10:55,480 --> 00:11:01,480 228 00:11:01,480 --> 00:11:06,630 Certaines personnes ont essayé de mettre b, ou b moins un, ou quelque chose dans les 229 00:11:06,630 --> 00:11:07,960 parenthèses. 230 00:11:07,960 --> 00:11:11,210 Cela signifie qu'ils sont arguments de cette fonction. 231 00:11:11,210 --> 00:11:13,450 >> drand ne prend pas d'arguments - comme getString fait 232 00:11:13,450 --> 00:11:14,330 pas prendre d'arguments. 233 00:11:14,330 --> 00:11:16,600 Donc, c'est juste parenthèse ouverte, près Paren - et qui, elle-même, est 234 00:11:16,600 --> 00:11:17,330 l'appel de fonction. 235 00:11:17,330 --> 00:11:19,770 Et qui vous donne un certain nombre entre 0 et 1. 236 00:11:19,770 --> 00:11:22,820 Bien sûr, nous avons toute une gamme que les nombres peuvent être po 237 00:11:22,820 --> 00:11:28,470 >> Dites, si b est 10 et un est de 5, nous avons vraiment veulent un numéro avec une gamme de 5. 238 00:11:28,470 --> 00:11:36,940 Alors, la prochaine chose que nous devons faire est multiplier par la gamme b moins un. 239 00:11:36,940 --> 00:11:40,380 Donc, en supposant que c'est multiplié. 240 00:11:40,380 --> 00:11:42,590 Et qui nous donnera un certain nombre dans une plage donnée. 241 00:11:42,590 --> 00:11:46,610 Et cette gamme spécifique étant la différence entre b moins un. 242 00:11:46,610 --> 00:11:50,030 >> Et finalement, ça ne lui donner de - dire l'écart entre b moins un 243 00:11:50,030 --> 00:11:52,520 est 5, ça va nous donner un nombre de 0 à 5. 244 00:11:52,520 --> 00:11:56,000 Mais si un est en fait 5, nous avons besoin de renforcer cette gamme jusqu'à l'endroit où il est 245 00:11:56,000 --> 00:12:01,380 en fait censé être, par addition d'un. 246 00:12:01,380 --> 00:12:02,580 Alors qui obtient le droit de logique. 247 00:12:02,580 --> 00:12:03,745 Et puis, auriez-vous une autre question? 248 00:12:03,745 --> 00:12:04,547 >> MICHAEL: Non 249 00:12:04,547 --> 00:12:06,010 Je me sens vraiment stupide maintenant. 250 00:12:06,010 --> 00:12:06,405 [RIRES] 251 00:12:06,405 --> 00:12:06,730 >> JASON HIRSCHHORN: Non 252 00:12:06,730 --> 00:12:08,640 Ne vous sentez pas vraiment stupide. 253 00:12:08,640 --> 00:12:10,560 Un certain nombre de personnes a lutté avec cette question. 254 00:12:10,560 --> 00:12:13,920 Et puis, l'autre question est, drand, vous avez dit, vous donne un flotteur - 255 00:12:13,920 --> 00:12:14,940 retourne un flotteur. 256 00:12:14,940 --> 00:12:18,020 Mais cette fonction fait demandé pour un nombre entier d'être retourné. 257 00:12:18,020 --> 00:12:23,700 >> Vous n'avez pas besoin de lancer cette explicitement à un nombre entier, parce que ce 258 00:12:23,700 --> 00:12:29,090 opérations seront traiter comme tout un flotter - comme un nombre à virgule flottante. 259 00:12:29,090 --> 00:12:31,570 Vous aimez cette volonté - même si ce est un nombre entier, cette volonté 260 00:12:31,570 --> 00:12:32,890 multiplier correctement. 261 00:12:32,890 --> 00:12:34,000 Toute la multiplication fonctionnera. 262 00:12:34,000 --> 00:12:35,060 Vous n'avez pas besoin de le lancer ici. 263 00:12:35,060 --> 00:12:36,480 En fait, vous ne devriez pas le lancer. 264 00:12:36,480 --> 00:12:37,310 >> Qui - 265 00:12:37,310 --> 00:12:40,750 si vous voulez jeter un numéro c'est entre 0 et 1 - 266 00:12:40,750 --> 00:12:42,680 un nombre aléatoire, une virgule flottante - 267 00:12:42,680 --> 00:12:47,850 puis il sera soit uniquement égal à 0 ou 1, de sorte que vous perdrez tout cela précision. 268 00:12:47,850 --> 00:12:50,120 Mais à la fin, quand vous reviendrez, il devient automatiquement 269 00:12:50,120 --> 00:12:51,620 renvoyé comme un entier. 270 00:12:51,620 --> 00:12:56,870 Donc, vous n'avez pas besoin de faire que vous la coulée. 271 00:12:56,870 --> 00:13:00,810 >> Donc, ce fut la réponse à cette question, le numéro 7. 272 00:13:00,810 --> 00:13:02,190 D'autres questions sur Quiz 0? 273 00:13:02,190 --> 00:13:03,300 Ouais, Annie. 274 00:13:03,300 --> 00:13:05,050 >> ANNIE: Quand est-ce que nous utilisons récursif - 275 00:13:05,050 --> 00:13:07,850 quand est-ce que nous utilisons boucles itératives? 276 00:13:07,850 --> 00:13:10,210 >> JASON HIRSCHHORN: Lorsque vous utilisez ne récursive - donc de façon plus générale, l' 277 00:13:10,210 --> 00:13:14,110 avantages et les inconvénients de la récursivité contre une approche itérative. 278 00:13:14,110 --> 00:13:17,110 Quelqu'un peut-il offrir un pro ou un con? 279 00:13:17,110 --> 00:13:19,460 S'il vous plaît? 280 00:13:19,460 --> 00:13:20,140 Ne peut pas tout le monde. 281 00:13:20,140 --> 00:13:22,526 Qui peut offrir un pro ou un con? 282 00:13:22,526 --> 00:13:26,963 >> [Papier froissé] 283 00:13:26,963 --> 00:13:29,730 >> ÉTUDIANT 1: récursif est moins codage - frappe moins? 284 00:13:29,730 --> 00:13:33,170 >> JASON HIRSCHHORN: Donc, en général, récursivité en particulier, une fonction - 285 00:13:33,170 --> 00:13:35,750 ou un algorithme comme fusion sorte - qui se prête 286 00:13:35,750 --> 00:13:37,300 à une approche récursive - 287 00:13:37,300 --> 00:13:40,710 peut-être plus simple de coder de façon récursive. 288 00:13:40,710 --> 00:13:43,940 Et plus de sens de le faire de manière récursive. 289 00:13:43,940 --> 00:13:46,230 Donc, ce serait un pro pour la récursivité. 290 00:13:46,230 --> 00:13:46,610 Autres? 291 00:13:46,610 --> 00:13:47,467 Ouais? 292 00:13:47,467 --> 00:13:49,240 >> ÉTUDIANT 2: Con de récursivité - 293 00:13:49,240 --> 00:13:50,940 Il utilise plus de mémoire. 294 00:13:50,940 --> 00:13:52,200 >> JASON HIRSCHHORN: Donc, tout à fait exact. 295 00:13:52,200 --> 00:13:55,720 Une fonction récursive sera continuer à ajouter stack frames de la pile. 296 00:13:55,720 --> 00:13:59,690 Donc, si vous êtes d'exploitation sur un terrain de numéros, et doivent appeler cette 297 00:13:59,690 --> 00:14:02,560 fonctionner beaucoup, alors vous aurez certainement prendre plus de mémoire, tandis que 298 00:14:02,560 --> 00:14:05,810 une approche itérative mettra seulement un frame de pile sur la pile, car 299 00:14:05,810 --> 00:14:08,420 tout se passe dans une fonction. 300 00:14:08,420 --> 00:14:11,010 >> Tous les autres avantages et les inconvénients? 301 00:14:11,010 --> 00:14:11,500 Ouais. 302 00:14:11,500 --> 00:14:12,550 >> ÉTUDIANT 3: Avantages pour la récursivité. 303 00:14:12,550 --> 00:14:15,950 Vous n'avez pas à déterminer dans progresser combien 304 00:14:15,950 --> 00:14:17,660 Code devait être répété. 305 00:14:17,660 --> 00:14:22,810 Vous pouvez avoir un nombre prédéterminé de fois que vous avez à parcourir, alors 306 00:14:22,810 --> 00:14:26,420 récursivité est mieux, parce que il prend ce résultat. 307 00:14:26,420 --> 00:14:27,780 >> JASON HIRSCHHORN: Je pense que c'est vrai. 308 00:14:27,780 --> 00:14:30,770 Mais je pense que dans les deux cas vous le feriez jamais - 309 00:14:30,770 --> 00:14:33,290 vous auriez probablement obtenir un peu entrée de l'utilisateur. 310 00:14:33,290 --> 00:14:35,990 Ou cette fonction aurait une certaine entrée qui permettrait de déterminer combien de fois il 311 00:14:35,990 --> 00:14:36,730 devrait fonctionner. 312 00:14:36,730 --> 00:14:39,520 Donc, généralement, vous ne seriez pas coder en dur - même dans une approche itérative - comment 313 00:14:39,520 --> 00:14:40,940 à plusieurs reprises que la boucle doit être exécutée. 314 00:14:40,940 --> 00:14:46,100 315 00:14:46,100 --> 00:14:48,670 >> Avez-vous eu une autre vous étiez penser, Annie? 316 00:14:48,670 --> 00:14:49,330 OK. 317 00:14:49,330 --> 00:14:51,650 Donc, ce sont probablement les deux - 318 00:14:51,650 --> 00:14:54,370 le plus grand pro et le plus grand con à un récursive contre 319 00:14:54,370 --> 00:14:57,080 une approche itérative. 320 00:14:57,080 --> 00:14:57,690 OK. 321 00:14:57,690 --> 00:14:59,465 Autre chose sur Quiz 0? 322 00:14:59,465 --> 00:15:08,940 323 00:15:08,940 --> 00:15:09,920 >> Passons. 324 00:15:09,920 --> 00:15:15,260 File I / O. Il est un merveilleux court cette semaine dans le dossier I / O qui, espérons- 325 00:15:15,260 --> 00:15:19,270 vous avez regardé multiple fois, et admiré. 326 00:15:19,270 --> 00:15:22,910 Beaucoup de travail a été en cela, et je n'ai entendu, il est incroyablement utile. 327 00:15:22,910 --> 00:15:25,740 J'ai aussi inclus le lien sur cette diapositive, au cas où vous n'avez pas eu un 328 00:15:25,740 --> 00:15:29,160 chance de regarder 10 fois. 329 00:15:29,160 --> 00:15:35,280 >> Donc, nous allons brièvement passer en revue la grandes étapes de l'ouverture et de travail 330 00:15:35,280 --> 00:15:38,400 avec les fichiers, puis nous allons plonger dans un problème de codage avant 331 00:15:38,400 --> 00:15:40,400 examinant le jeu de problème. 332 00:15:40,400 --> 00:15:44,330 Encore une fois, je vais mettre ceci sur l'écran, mais je vais parler pour 333 00:15:44,330 --> 00:15:47,630 juste une minute de ce que nous sommes faire ici avec le fichier I/O-- 334 00:15:47,630 --> 00:15:49,090 qu'est-ce que cela signifie? 335 00:15:49,090 --> 00:15:55,280 >> Cela signifie que nous pouvons créer notre programmes, et alors nos programmes 336 00:15:55,280 --> 00:16:00,370 sortie, et ne pas avoir fait un impact sur le monde en dehors de notre programme. 337 00:16:00,370 --> 00:16:04,630 Mais quand nous commençons à travailler avec des fichiers - à la fois les lire dans la création et 338 00:16:04,630 --> 00:16:10,460 eux - nous pouvons avoir un effet sur la monde en dehors de notre programme. 339 00:16:10,460 --> 00:16:15,440 >> Tout comme si Microsoft Word n'a pas pu d'apporter des documents Word, puis 340 00:16:15,440 --> 00:16:18,710 une fois Microsoft Word cesser de fumer, l'ensemble de votre travail serait parti, et il serait 341 00:16:18,710 --> 00:16:19,740 vraiment inutile. 342 00:16:19,740 --> 00:16:23,620 Nous ne voulons finalement de pouvoir écrire des programmes qui peuvent affecter la 343 00:16:23,620 --> 00:16:31,350 monde autour d'eux, à la fois par la prise en entrées complexes - en termes de fichiers et 344 00:16:31,350 --> 00:16:37,080 via des fichiers, et également de créer intéressante et les sorties convaincantes - 345 00:16:37,080 --> 00:16:39,520 en termes de différents types de fichiers. 346 00:16:39,520 --> 00:16:43,730 >> Donc, c'est pourquoi nous commençons à apprendre à travailler avec des fichiers. 347 00:16:43,730 --> 00:16:47,080 Plus précisément, ce nous faisons est la suivante. 348 00:16:47,080 --> 00:16:47,680 C'est très simple. 349 00:16:47,680 --> 00:16:51,530 Il ya seulement quelques étapes, et ils sont répertoriés ici sur ce code. 350 00:16:51,530 --> 00:16:55,130 Nous allons donc passer par cette ligne de code en ligne. 351 00:16:55,130 --> 00:16:57,630 >> Tout d'abord, vous voyez souligné - 352 00:16:57,630 --> 00:17:01,330 lorsque vous travaillez avec un fichier, quel que soit le type de fichier, il est, 353 00:17:01,330 --> 00:17:02,670 vous devez l'ouvrir. 354 00:17:02,670 --> 00:17:05,130 Et c'est avec un appel à la fonction fopen - 355 00:17:05,130 --> 00:17:05,950 ici. 356 00:17:05,950 --> 00:17:07,980 Vous incluez le nom du fichier. 357 00:17:07,980 --> 00:17:11,930 Si le fichier n'est pas dans votre répertoire, ou le dossier dans lequel ce programme 358 00:17:11,930 --> 00:17:15,910 vie, alors vous devez aussi inclure un chemin où ce fichier est. 359 00:17:15,910 --> 00:17:19,099 >> Nous allons supposer que cette fichier appelé "text.txt" - 360 00:17:19,099 --> 00:17:24,220 un simple document texte - est dans le même dossier que ce programme est. 361 00:17:24,220 --> 00:17:26,859 C'est donc une autre chose à garder à esprit - que si vous voulez ouvrir un fichier 362 00:17:26,859 --> 00:17:30,050 ailleurs, vous avez réellement besoin à inclure son emplacement. 363 00:17:30,050 --> 00:17:33,520 >> Deuxièmement, vous pouvez passer un argument à fopen, et c'est ce que vous voulez faire 364 00:17:33,520 --> 00:17:34,620 avec le fichier. 365 00:17:34,620 --> 00:17:38,450 Il existe trois principaux arguments que vous allez passer à la fonction fopen. 366 00:17:38,450 --> 00:17:40,060 Qui peut me donner les trois? 367 00:17:40,060 --> 00:17:44,960 368 00:17:44,960 --> 00:17:47,130 Qui peut me donner l'un d'eux? 369 00:17:47,130 --> 00:17:48,130 Oui. 370 00:17:48,130 --> 00:17:50,010 >> ÉTUDIANT 4: Le nom de fichier? 371 00:17:50,010 --> 00:17:50,440 >> JASON HIRSCHHORN: Désolé. 372 00:17:50,440 --> 00:17:55,490 Trois arguments principaux, vous pouvez passer comme le second argument de fopen. 373 00:17:55,490 --> 00:17:57,060 Vous avez raison - le nom du fichier est le premier argument. 374 00:17:57,060 --> 00:18:01,620 Mais le second argument de la fonction fopen sont généralement trois cordes, et - oui. 375 00:18:01,620 --> 00:18:02,210 Aleja. 376 00:18:02,210 --> 00:18:03,490 >> ALEJA: A pour l'ajout. 377 00:18:03,490 --> 00:18:06,840 >> JASON HIRSCHHORN: A, si vous voulez ajouter à un fichier qui existe déjà. 378 00:18:06,840 --> 00:18:07,810 >> ÉTUDIANT 5: R pour lecture. 379 00:18:07,810 --> 00:18:09,930 >> JASON HIRSCHHORN: R, si vous envie de lire à partir d'un fichier. 380 00:18:09,930 --> 00:18:10,670 >> ÉTUDIANT 6: W en écriture. 381 00:18:10,670 --> 00:18:12,840 >> JASON HIRSCHHORN: Et avec, si vous voulez écrire dans un fichier. 382 00:18:12,840 --> 00:18:17,570 Donc dans ce cas, nous écrivons dans le fichier, de sorte que nous avons w. 383 00:18:17,570 --> 00:18:22,360 Vous l'ouvrez, vous devez également enregistrer le fichier quelque part, et c'est avec le 384 00:18:22,360 --> 00:18:26,000 code pour le côté gauche de l'opérateur d'affectation - 385 00:18:26,000 --> 00:18:31,220 Je crée un pointeur vers un fichier appelé, dans ce cas, le fichier. 386 00:18:31,220 --> 00:18:36,070 >> Nous n'allons pas à m'inquiéter de ce que tout ce que casquettes chose de fichier est. 387 00:18:36,070 --> 00:18:40,600 Qu'il suffise de dire, c'est une longue flux de zéros et de uns. 388 00:18:40,600 --> 00:18:44,970 Et c'est ainsi que nous allons utiliser et le comprendre. 389 00:18:44,970 --> 00:18:47,300 >> La prochaine chose que nous devons faire - et c'est extrêmement important - 390 00:18:47,300 --> 00:18:49,070 chaque fois que vous ouvrez un fichier - 391 00:18:49,070 --> 00:18:54,250 en fait, chaque fois que vous appelez malloc, pour exemple, et obtenir un peu de mémoire et essayer 392 00:18:54,250 --> 00:18:57,980 et l'enregistrer dans un pointeur, vous avez toujours vouloir vérifier pour s'assurer que cette 393 00:18:57,980 --> 00:19:00,230 fonction n'a pas retourné null. 394 00:19:00,230 --> 00:19:05,230 >> Donc dans ce cas, nous vérifions à faire vous que nous avons effectivement ouvert le 395 00:19:05,230 --> 00:19:10,230 fichier correctement, et il n'y avait aucune erreur dans notre programme. 396 00:19:10,230 --> 00:19:15,160 Ensuite, une fois que nous avons vérifié pour s'assurer que nous avons un fichier de travail, nous pouvons 397 00:19:15,160 --> 00:19:18,520 écrire ou lire, ou ajouter le fichier. 398 00:19:18,520 --> 00:19:24,270 Dans ce cas, je suis tout simplement en train d'imprimer une ligne à ce fichier. 399 00:19:24,270 --> 00:19:25,450 >> Comment je le sais? 400 00:19:25,450 --> 00:19:27,990 Eh bien, je suis en utilisant cette fonction appelé fprintf. 401 00:19:27,990 --> 00:19:30,970 Toutes les fonctions que vous utiliserez lors de l'écriture ou la lecture d', ou 402 00:19:30,970 --> 00:19:34,950 manipulation de fichiers sera similaire à fonctions que vous avez vu avant, mais 403 00:19:34,950 --> 00:19:38,420 commencer par la lettre F, debout pour le fichier. 404 00:19:38,420 --> 00:19:43,440 Et fprintf, contrairement à notre impression normale app, prend un argument supplémentaire, 405 00:19:43,440 --> 00:19:47,800 et qui est le fichier où vous imprimer cette ligne. 406 00:19:47,800 --> 00:19:50,640 >> Je n'ai rien à le droit de ohai. 407 00:19:50,640 --> 00:19:52,860 Je n'ai pas la troisième l'argument à printf - 408 00:19:52,860 --> 00:19:57,030 ou le second argument de printf, la troisième argument de fprintf, parce que je 409 00:19:57,030 --> 00:19:59,480 ne pas avoir d'espaces réservés ici. 410 00:19:59,480 --> 00:20:01,070 Je ne suis pas y compris les variables. 411 00:20:01,070 --> 00:20:06,070 Mais encore une fois, fprintf et tous ces fichiers fonctions qui fonctionnent avec des fichiers 412 00:20:06,070 --> 00:20:09,820 sont généralement allons avoir besoin du fichier sur lequel ils évoluent. 413 00:20:09,820 --> 00:20:15,960 >> Enfin, la dernière chose importante à faire est de fermer le dossier, tout comme 414 00:20:15,960 --> 00:20:19,530 avec - chaque fois que nous malloc quelque chose, nous voulons libérer quelque chose, de peur que nous 415 00:20:19,530 --> 00:20:22,730 avoir une fuite de mémoire - nous voulons de fermer notre fichier. 416 00:20:22,730 --> 00:20:28,180 Si ce programme est sorti sans fermeture le fichier, les chances ne sont rien irait 417 00:20:28,180 --> 00:20:30,050 mal, surtout si elle était un petit fichier. 418 00:20:30,050 --> 00:20:35,020 >> Mais il est certainement bon style de programmation et la pratique de toujours fermer votre fichier 419 00:20:35,020 --> 00:20:38,050 lorsque vous avez terminé de l'utiliser. 420 00:20:38,050 --> 00:20:43,630 Voilà donc les bases de fichier I / O. Vous avez probablement déjà vu ça avant, ou 421 00:20:43,630 --> 00:20:45,710 regardé dans ce court fantastique. 422 00:20:45,710 --> 00:20:48,410 Est-ce que quelqu'un a des questions, avant nous entrons dans une certaine codification de la pratique 423 00:20:48,410 --> 00:20:51,800 problèmes, sur le fichier E / S ou la étapes je suis juste allé sur? 424 00:20:51,800 --> 00:21:00,198 425 00:21:00,198 --> 00:21:03,162 >> [TAPER SOUNDS] 426 00:21:03,162 --> 00:21:04,150 >> JASON HIRSCHHORN: Avez-vous une question, Avi? 427 00:21:04,150 --> 00:21:04,660 >> AVI: Non 428 00:21:04,660 --> 00:21:04,740 >> JASON HIRSCHHORN: OK. 429 00:21:04,740 --> 00:21:06,746 Je vais attendre une autre Sept secondes. 430 00:21:06,746 --> 00:21:07,590 [RIRES] 431 00:21:07,590 --> 00:21:08,620 C'est vraiment un bon pourboire. 432 00:21:08,620 --> 00:21:10,750 Vous les gars n'aiment tout simplement pas poser des questions. 433 00:21:10,750 --> 00:21:11,660 C'est très bien. 434 00:21:11,660 --> 00:21:12,330 OK. 435 00:21:12,330 --> 00:21:17,620 Donc, notre premier problème pratique est, nous sommes va dupliquer la fonction de 436 00:21:17,620 --> 00:21:22,330 un outil de ligne de commande que vous avez probablement utilisé avant - copie - 437 00:21:22,330 --> 00:21:23,500 l'outil de copie. 438 00:21:23,500 --> 00:21:28,050 Si vous tapez cp puis passez deux arguments dans votre terminal, vous pouvez 439 00:21:28,050 --> 00:21:28,980 copier un fichier. 440 00:21:28,980 --> 00:21:31,220 Et c'est ce que nous allons d'écrire en ce moment. 441 00:21:31,220 --> 00:21:35,830 >> Encore une fois, la lecture hors de cette diapositive, je ferais d'écrire un programme qui prend 442 00:21:35,830 --> 00:21:38,130 deux et seulement deux en ligne de commande arguments - 443 00:21:38,130 --> 00:21:40,750 un fichier source et un fichier de destination - 444 00:21:40,750 --> 00:21:44,590 et copie le contenu de la source déposer le fichier de destination 445 00:21:44,590 --> 00:21:46,960 un octet à la fois. 446 00:21:46,960 --> 00:21:48,510 Donc, c'est beaucoup demander. 447 00:21:48,510 --> 00:21:52,200 >> Encore une fois, une bonne approche pour cela est de pas aller directement au code C, mais 448 00:21:52,200 --> 00:21:54,280 décomposer en deux étapes. 449 00:21:54,280 --> 00:21:58,400 Premièrement, pensez à la logique - exactement ce que je vous demande de faire - 450 00:21:58,400 --> 00:22:00,620 et de comprendre tous les étapes à ce problème. 451 00:22:00,620 --> 00:22:04,410 Pas en C, seulement dans certains pseudo, ou même un modèle mental de 452 00:22:04,410 --> 00:22:06,030 ce qui se passe. 453 00:22:06,030 --> 00:22:10,050 >> Ensuite, une fois que vous avez le pseudo-bas, comprendre comment le pseudo- 454 00:22:10,050 --> 00:22:14,600 des cartes sur les outils et les choses que nous avons appris à utiliser en C. 455 00:22:14,600 --> 00:22:19,070 >> Et enfin, une fois que vous avez tout ce que ensemble, vous pouvez coder le problème. 456 00:22:19,070 --> 00:22:23,370 Prenez 5 à 10 minutes à travailler sur ce problème. 457 00:22:23,370 --> 00:22:25,800 Je vais mettre les instructions sauvegarder en une seconde. 458 00:22:25,800 --> 00:22:27,990 Et puis nous allons passer en revue le pseudo-code, et le code 459 00:22:27,990 --> 00:22:29,230 il vit en groupe. 460 00:22:29,230 --> 00:22:31,640 >> Si vous avez des questions pendant que vous êtes travailler sur ce, n'hésitez pas à soulever 461 00:22:31,640 --> 00:22:34,260 votre main, et je viendrai autour et y répondre. 462 00:22:34,260 --> 00:22:37,020 463 00:22:37,020 --> 00:22:39,330 >> ÉTUDIANT 7: Puis-je glisser un morceau de papier? 464 00:22:39,330 --> 00:22:41,537 >> JASON HIRSCHHORN: Quoi de neuf? 465 00:22:41,537 --> 00:26:46,047 466 00:26:46,047 --> 00:26:48,043 >> [TAPER SOUNDS] 467 00:26:48,043 --> 00:26:48,730 >> JASON HIRSCHHORN: OK. 468 00:26:48,730 --> 00:26:51,710 Passons en revue le pseudo-premier, et alors je vais vous donner quelques plus 469 00:26:51,710 --> 00:26:52,960 minutes pour terminer le codage. 470 00:26:52,960 --> 00:26:55,540 471 00:26:55,540 --> 00:26:58,650 >> Qui voudrait me commencer avec la première ligne de 472 00:26:58,650 --> 00:27:00,030 pseudo pour cette fonction? 473 00:27:00,030 --> 00:27:03,330 474 00:27:03,330 --> 00:27:05,740 >> ÉTUDIANT 8: Assurez-vous que vous avez reçu deux fichiers. 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 Et si nous ne sommes pas? 478 00:27:22,990 --> 00:27:25,974 >> ÉTUDIANT 8: Je voudrais revenir à 0. 479 00:27:25,974 --> 00:27:27,872 >> JASON HIRSCHHORN: Faut-il revenir 0? 480 00:27:27,872 --> 00:27:30,182 >> ÉTUDIANT 8: Retour a - 481 00:27:30,182 --> 00:27:30,650 suppression. 482 00:27:30,650 --> 00:27:30,850 Désolé. 483 00:27:30,850 --> 00:27:31,210 >> JASON HIRSCHHORN: Ouais. 484 00:27:31,210 --> 00:27:32,710 Probablement pas 0. 485 00:27:32,710 --> 00:27:34,680 Parce que 0 signifie tout était bon. 486 00:27:34,680 --> 00:27:35,030 OK. 487 00:27:35,030 --> 00:27:36,730 C'est donc la première ligne de pseudo-code. 488 00:27:36,730 --> 00:27:38,715 Qui a la deuxième ligne de pseudo? 489 00:27:38,715 --> 00:27:40,630 >> ÉTUDIANT 9: Ouvrez les deux fichiers? 490 00:27:40,630 --> 00:27:41,880 >> JASON HIRSCHHORN: Ouvrez les deux fichiers. 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 >> ÉTUDIANT 10: Vérifiez si le fichier est NULL? 494 00:27:52,850 --> 00:28:10,906 495 00:28:10,906 --> 00:28:12,580 >> JASON HIRSCHHORN: Vérifiez vous ne sont NULL. 496 00:28:12,580 --> 00:28:15,800 En aparté - 497 00:28:15,800 --> 00:28:17,540 slash 0 - 498 00:28:17,540 --> 00:28:18,887 est que NULL? 499 00:28:18,887 --> 00:28:20,080 >> ÉTUDIANT 11: Non 500 00:28:20,080 --> 00:28:21,190 >> JASON HIRSCHHORN: Ce n'est pas NULL. 501 00:28:21,190 --> 00:28:23,400 C'est ce qu'on appelle le terminateur NULL. 502 00:28:23,400 --> 00:28:25,580 Il s'agit en fait orthographié avec un seul l. 503 00:28:25,580 --> 00:28:28,580 Donc vérifier quelque chose contre cela - c'est en fait un caractère - 504 00:28:28,580 --> 00:28:31,710 afin de vérifier quelque chose qui est contre pas la même que la vérification pour voir s'il 505 00:28:31,710 --> 00:28:32,690 vaut NULL. 506 00:28:32,690 --> 00:28:34,100 >> Et certaines personnes - 507 00:28:34,100 --> 00:28:36,040 sur leurs questionnaires et leur problème ensembles - ont obtenu le 508 00:28:36,040 --> 00:28:36,890 deux de ceux confondre. 509 00:28:36,890 --> 00:28:38,830 Mais les deux d'entre eux sont en fait différent. 510 00:28:38,830 --> 00:28:40,220 On finit une chaîne - 511 00:28:40,220 --> 00:28:43,210 l'un est un pointeur vers 0. 512 00:28:43,210 --> 00:28:46,490 >> ÉTUDIANT 12: Pourquoi ne pas vérifier assurez-vous que les fichiers ne sont pas NULL 513 00:28:46,490 --> 00:28:48,670 avant de les ouvrir? 514 00:28:48,670 --> 00:28:54,772 >> JASON HIRSCHHORN: Donc ouvert arrêts quelque chose dans ce fichier. 515 00:28:54,772 --> 00:28:57,780 Et si vous revenez ici - 516 00:28:57,780 --> 00:28:59,520 si cette ligne - fopen - 517 00:28:59,520 --> 00:29:05,300 vous donnera une adresse et magasin cette adresse dans le fichier si cela fonctionne. 518 00:29:05,300 --> 00:29:07,650 Si cela ne fonctionne pas, il permet de stocker NULL - 519 00:29:07,650 --> 00:29:08,020 >> ÉTUDIANT 12: Oh. 520 00:29:08,020 --> 00:29:08,180 OK. 521 00:29:08,180 --> 00:29:08,500 Vous avez obtenu. 522 00:29:08,500 --> 00:29:09,050 >> JASON HIRSCHHORN: Dans le fichier. 523 00:29:09,050 --> 00:29:11,990 Donc, vous ne pouvez pas vérifier la valeur NULL avant que vous les avez ouvert. 524 00:29:11,990 --> 00:29:13,520 NULL signifie quelque chose n'a pas fonctionner correctement. 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 Donc, assurez-vous que ni dire? 528 00:29:22,590 --> 00:29:23,200 Ou sont? 529 00:29:23,200 --> 00:29:23,770 Que pensons-nous? 530 00:29:23,770 --> 00:29:24,310 Nous irons avec cela. 531 00:29:24,310 --> 00:29:24,520 >> ÉTUDIANT 13: Est. 532 00:29:24,520 --> 00:29:25,020 >> JASON HIRSCHHORN: Est? 533 00:29:25,020 --> 00:29:25,930 Ni est? 534 00:29:25,930 --> 00:29:26,350 >> ÉTUDIANT 13: Est. 535 00:29:26,350 --> 00:29:26,390 >> JASON HIRSCHHORN: OK. 536 00:29:26,390 --> 00:29:28,510 Il semble y avoir une certaine consensus sur ce point. 537 00:29:28,510 --> 00:29:30,520 Ni est NULL. 538 00:29:30,520 --> 00:29:32,250 OK, la prochaine ligne de pseudo. 539 00:29:32,250 --> 00:29:33,600 Qui ne m'a pas encore donné une ligne? 540 00:29:33,600 --> 00:29:37,350 541 00:29:37,350 --> 00:29:38,295 Nous vous attendrons. 542 00:29:38,295 --> 00:29:39,020 Ouais. 543 00:29:39,020 --> 00:29:40,895 >> ÉTUDIANT 14: Vous avez à lire partir du premier fichier? 544 00:29:40,895 --> 00:29:42,290 >> JASON HIRSCHHORN: OK. 545 00:29:42,290 --> 00:29:46,240 >> ÉTUDIANT 14: Ou nous utilisons fscanf ou quelque chose comme ça le premier fichier? 546 00:29:46,240 --> 00:29:50,650 >> JASON HIRSCHHORN: Donc, nous voulons lire le premier fichier et - 547 00:29:50,650 --> 00:29:51,900 Mettons que ici. 548 00:29:51,900 --> 00:30:00,600 549 00:30:00,600 --> 00:30:01,880 Lire à partir du fichier source. 550 00:30:01,880 --> 00:30:05,370 Et puis, que faisons-nous après nous lire le fichier source? 551 00:30:05,370 --> 00:30:06,620 Quelqu'un d'autre? 552 00:30:06,620 --> 00:30:09,150 553 00:30:09,150 --> 00:30:12,190 >> ÉTUDIANT 15: Ecrire en le fichier de destination? 554 00:30:12,190 --> 00:30:22,080 555 00:30:22,080 --> 00:30:25,620 >> JASON HIRSCHHORN: Nous vous écrivons pour le fichier de destination, et - 556 00:30:25,620 --> 00:30:26,210 OK. 557 00:30:26,210 --> 00:30:30,030 Que nous manque? 558 00:30:30,030 --> 00:30:32,460 Quelqu'un d'autre qui ne m'a pas donné une ligne de code encore - de pseudo. 559 00:30:32,460 --> 00:30:33,510 Ouais. 560 00:30:33,510 --> 00:30:36,540 >> ÉTUDIANT 16: Peut-être que vous pouvez toujours vérifier si il ya quelque chose à lire pour, 561 00:30:36,540 --> 00:30:37,970 comme la ligne suivante? 562 00:30:37,970 --> 00:30:39,550 Qui sont comme la ligne suivante, voir si elle existe. 563 00:30:39,550 --> 00:30:40,660 >> [ÉLECTRONIQUE BIP] 564 00:30:40,660 --> 00:30:41,095 >> JASON HIRSCHHORN: Oups. 565 00:30:41,095 --> 00:30:43,120 C'est mon logiciel de journalisation. 566 00:30:43,120 --> 00:30:43,580 Ouais? 567 00:30:43,580 --> 00:30:44,960 >> ÉTUDIANT 16: Ouais. 568 00:30:44,960 --> 00:30:48,940 >> JASON HIRSCHHORN: Alors, donnez à moi encore une fois. 569 00:30:48,940 --> 00:30:51,640 >> ÉTUDIANT 16: Vérifiez si il ya encore une prochaine ligne de la 570 00:30:51,640 --> 00:30:52,920 fichier source à lire. 571 00:30:52,920 --> 00:30:53,500 >> JASON HIRSCHHORN: OK. 572 00:30:53,500 --> 00:30:56,060 Donc, nous ne sommes pas la lecture des lignes - lisaient octets ici - 573 00:30:56,060 --> 00:30:57,590 mais vous avez raison. 574 00:30:57,590 --> 00:31:00,040 Nous voulons lire et à écrire jusqu'à ce que il n'y a pas plus d'octets. 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 Et si ceux-ci devraient vraiment être en retrait un peu, parce qu'ils sont là-dessous. 578 00:31:16,940 --> 00:31:17,470 Droite? 579 00:31:17,470 --> 00:31:20,620 Jusqu'à ce que nous sommes hors d'octets, nous allons lire le fichier source et écrire 580 00:31:20,620 --> 00:31:22,160 dans le fichier de destination. 581 00:31:22,160 --> 00:31:24,510 >> Et puis, ce qui est la dernière ligne de pseudo? 582 00:31:24,510 --> 00:31:26,380 Quelqu'un qui n'est pas donné moi quelque chose encore. 583 00:31:26,380 --> 00:31:29,270 584 00:31:29,270 --> 00:31:30,260 >> ÉTUDIANT 17: Fermer les fichiers? 585 00:31:30,260 --> 00:31:31,510 >> JASON HIRSCHHORN: Exactement. 586 00:31:31,510 --> 00:31:36,370 587 00:31:36,370 --> 00:31:37,450 Fermez les fichiers. 588 00:31:37,450 --> 00:31:38,400 Donc, il ya notre pseudo. 589 00:31:38,400 --> 00:31:41,870 Je vais mettre le pseudo dans gedit, et en quelques minutes nous 590 00:31:41,870 --> 00:31:44,626 codera ensemble. 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 Laissez-nous commencer en tant que groupe. 594 00:33:58,290 --> 00:33:59,940 Nishant, j'ai mon nouveau fichier. 595 00:33:59,940 --> 00:34:01,130 Je viens d'ouvrir cette place. 596 00:34:01,130 --> 00:34:01,880 Untitled document 1. 597 00:34:01,880 --> 00:34:05,490 Quelle est la première chose que je dois faire? 598 00:34:05,490 --> 00:34:07,040 >> Nishant: Inclure les bibliothèques? 599 00:34:07,040 --> 00:34:08,219 >> JASON HIRSCHHORN: OK. 600 00:34:08,219 --> 00:34:11,070 Qu'est-ce que les bibliothèques? 601 00:34:11,070 --> 00:34:17,570 >> Nishant: stdio.h, stdlib.h, je crois? 602 00:34:17,570 --> 00:34:18,000 >> JASON HIRSCHHORN: OK. 603 00:34:18,000 --> 00:34:21,592 Quelle est stdlib pour? 604 00:34:21,592 --> 00:34:23,010 >> Nishant: j'ai oublié. 605 00:34:23,010 --> 00:34:23,219 >> JASON HIRSCHHORN: OK. 606 00:34:23,219 --> 00:34:24,179 Donc inclure stdio. 607 00:34:24,179 --> 00:34:28,630 Que dois-je faire avant même Je commence le codage? 608 00:34:28,630 --> 00:34:29,710 >> Nishant: Donnez votre tête? 609 00:34:29,710 --> 00:34:31,830 >> JASON HIRSCHHORN: Comment puis-je l'obtenir coloré? 610 00:34:31,830 --> 00:34:34,060 >> [VOIX interposition] 611 00:34:34,060 --> 00:34:35,040 >> Nishant: Comment obtenez-vous il de couleur? 612 00:34:35,040 --> 00:34:38,060 >> JASON HIRSCHHORN: Comment puis-je le codage couleur? 613 00:34:38,060 --> 00:34:38,570 >> Nishant: Je ne sais pas. 614 00:34:38,570 --> 00:34:38,830 Oh. 615 00:34:38,830 --> 00:34:39,389 Enregistrer. 616 00:34:39,389 --> 00:34:39,929 >> JASON HIRSCHHORN: Save. 617 00:34:39,929 --> 00:34:40,270 Oui. 618 00:34:40,270 --> 00:34:41,760 Je dois enregistrer en tant que. C. 619 00:34:41,760 --> 00:34:46,239 Donc, l'enregistrer sur le bureau comme cp.c. 620 00:34:46,239 --> 00:34:47,280 Sweet. 621 00:34:47,280 --> 00:34:51,199 Et si je veux obtenir un style plein des points, que dois-je 622 00:34:51,199 --> 00:34:53,085 inclure au sommet? 623 00:34:53,085 --> 00:34:58,390 >> Nishant: Vous pouvez écrire votre nom, du programme, et dans le but 624 00:34:58,390 --> 00:34:59,640 du programme ainsi? 625 00:34:59,640 --> 00:35:08,400 626 00:35:08,400 --> 00:35:10,040 >> JASON HIRSCHHORN: On dirait bien. 627 00:35:10,040 --> 00:35:10,470 Excellent. 628 00:35:10,470 --> 00:35:12,940 Donc, vous nous avez commencé parfaitement. 629 00:35:12,940 --> 00:35:13,720 # Include - 630 00:35:13,720 --> 00:35:15,365 nous allons aussi écrire - 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 Donc, je pense que je suis prêt à se rendre. 634 00:35:33,520 --> 00:35:38,003 Qui a la première ligne de code pour moi - ou les premières lignes de code qui 635 00:35:38,003 --> 00:35:41,280 il faudra pour satisfaire notre première commenter en pseudo-code? 636 00:35:41,280 --> 00:35:41,985 Vous. 637 00:35:41,985 --> 00:35:48,780 >> ÉTUDIANT 18: Devrait-il pas int argc, char * et argv? 638 00:35:48,780 --> 00:35:49,490 >> JASON HIRSCHHORN: Je pense que vous avez raison. 639 00:35:49,490 --> 00:35:56,270 Changeons de int principales, parenthèse ouverte, int argc, virgule, char * argv? 640 00:35:56,270 --> 00:35:57,150 Comme ça? 641 00:35:57,150 --> 00:35:57,410 >> ÉTUDIANT 18: Supports. 642 00:35:57,410 --> 00:35:58,260 >> JASON HIRSCHHORN: Supports. 643 00:35:58,260 --> 00:35:59,860 Ouvrir support, ferme la parenthèse, près parent. 644 00:35:59,860 --> 00:36:00,240 Parfait. 645 00:36:00,240 --> 00:36:02,160 Maintenant, je peux prendre des arguments de ligne de commande. 646 00:36:02,160 --> 00:36:02,430 OK. 647 00:36:02,430 --> 00:36:04,250 Nous assurer que nous sommes donné deux fichiers. 648 00:36:04,250 --> 00:36:07,905 Vous pouvez me donner aussi. 649 00:36:07,905 --> 00:36:09,180 >> ÉTUDIANT 18: Si argc - 650 00:36:09,180 --> 00:36:11,060 celui-ci ne correspond pas à 3. 651 00:36:11,060 --> 00:36:14,360 >> JASON HIRSCHHORN: Si paren ouvertes argc ne pas égal à 3? 652 00:36:14,360 --> 00:36:16,970 >> ÉTUDIANT 18: Ouais, vous revenez 1 ou quoi que ce soit. 653 00:36:16,970 --> 00:36:17,460 >> JASON HIRSCHHORN: Désolé. 654 00:36:17,460 --> 00:36:19,120 >> ÉTUDIANT 18: Retour 1 ou quoi que ce soit. 655 00:36:19,120 --> 00:36:20,270 >> JASON HIRSCHHORN: Retour 1. 656 00:36:20,270 --> 00:36:22,230 OK? 657 00:36:22,230 --> 00:36:22,970 Grand. 658 00:36:22,970 --> 00:36:24,290 Ouvrez les deux fichiers. 659 00:36:24,290 --> 00:36:26,160 Qui peut m'aider à ouvrir les fichiers? 660 00:36:26,160 --> 00:36:28,125 Qui ne m'a pas encore donné le code? 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: Donc, tous les bouchons F-I-L-E source d'étoiles. 664 00:36:36,145 --> 00:36:39,390 665 00:36:39,390 --> 00:36:40,920 >> JASON HIRSCHHORN: Je vais de prendre les voyelles. 666 00:36:40,920 --> 00:36:41,570 Ce sont cool. 667 00:36:41,570 --> 00:36:42,716 C'est comme Tumblr. 668 00:36:42,716 --> 00:36:44,610 >> ÉTUDIANT 18: Equals fopen - 669 00:36:44,610 --> 00:36:46,612 >> JASON HIRSCHHORN: Égal fopen? 670 00:36:46,612 --> 00:36:49,870 >> ÉTUDIANT 18: Ouvert parenthèse, argv, parenthèse ouverte. 671 00:36:49,870 --> 00:36:50,055 >> JASON HIRSCHHORN: Attendez. 672 00:36:50,055 --> 00:36:50,240 Désolé. 673 00:36:50,240 --> 00:36:51,050 Ouvrir parenthèse. 674 00:36:51,050 --> 00:36:51,456 OK. 675 00:36:51,456 --> 00:36:53,080 >> ÉTUDIANT 18: Ouais. 676 00:36:53,080 --> 00:36:55,110 Argv sous 1. 677 00:36:55,110 --> 00:36:55,860 >> JASON HIRSCHHORN: Sous 1? 678 00:36:55,860 --> 00:36:56,140 >> ÉTUDIANT 18: Ouais. 679 00:36:56,140 --> 00:36:58,540 Argv parenthèse ouverte 1 - 680 00:36:58,540 --> 00:36:59,730 Oui. 681 00:36:59,730 --> 00:37:06,470 Et puis virgule, puis double ouverte citation, r, guillemet, 682 00:37:06,470 --> 00:37:08,250 proches parenthèse, point-virgule. 683 00:37:08,250 --> 00:37:09,450 >> JASON HIRSCHHORN: Sweet. 684 00:37:09,450 --> 00:37:10,950 Et que dire de l'autre? 685 00:37:10,950 --> 00:37:16,030 >> ÉTUDIANT 18: Très semblable, mais de S-R-C, vous appelez ce D-S-T. 686 00:37:16,030 --> 00:37:17,060 >> JASON HIRSCHHORN: Oo! 687 00:37:17,060 --> 00:37:17,772 J'aime cela. 688 00:37:17,772 --> 00:37:20,010 >> ÉTUDIANT 18: Just D-S-T. Ouais. 689 00:37:20,010 --> 00:37:23,057 Et puis argv, parenthèse ouverte, 2. 690 00:37:23,057 --> 00:37:23,200 Ouais. 691 00:37:23,200 --> 00:37:26,720 Et puis w au lieu de r. 692 00:37:26,720 --> 00:37:27,620 Ouais. 693 00:37:27,620 --> 00:37:29,630 >> JASON HIRSCHHORN: Très bien. 694 00:37:29,630 --> 00:37:31,360 Suivant quelques lignes. 695 00:37:31,360 --> 00:37:34,040 Aussi, si quelqu'un a des choses à ajouter à lignes que nous avons fait, n'hésitez pas à 696 00:37:34,040 --> 00:37:35,690 Ajoutez ainsi. 697 00:37:35,690 --> 00:37:37,520 Assurez-vous n'est ni NULL. 698 00:37:37,520 --> 00:37:41,450 Qui peut me donner le code que j'ai besoin de s'assurer que la ligne de pseudo? 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: Si src égal égaux NULL ou dst égal égaux 702 00:37:58,645 --> 00:38:04,590 NULL, puis vous revenez - 703 00:38:04,590 --> 00:38:07,130 704 00:38:07,130 --> 00:38:07,976 >> JASON HIRSCHHORN: Quoi? 705 00:38:07,976 --> 00:38:08,890 >> ARCHER: Retour 2? 706 00:38:08,890 --> 00:38:09,760 >> JASON HIRSCHHORN: Retour 2. 707 00:38:09,760 --> 00:38:14,400 Donc, si parenthèse ouverte src égale vaut NULL, ou - 708 00:38:14,400 --> 00:38:15,590 tout ce que thing's - pipe? 709 00:38:15,590 --> 00:38:16,346 Pipe? 710 00:38:16,346 --> 00:38:17,140 Nous l'appellerons tuyau. 711 00:38:17,140 --> 00:38:22,340 Tuyau, tuyau, dst égal égaux NULL, retour 2. 712 00:38:22,340 --> 00:38:23,900 OK? 713 00:38:23,900 --> 00:38:26,060 Jusqu'à ce que nous sommes hors d'octets - 714 00:38:26,060 --> 00:38:29,820 nous sorte de sauté sur cette étape de la partie de pseudo-code pour aller ici. 715 00:38:29,820 --> 00:38:31,970 >> Mais jusqu'à ce que nous sommes hors d'octets - qu'est-ce que cela ressemble? 716 00:38:31,970 --> 00:38:34,680 Quel type de structure C - 717 00:38:34,680 --> 00:38:36,160 mais je n'utilise pas le mot structure, parce que nous allons commencer à utiliser 718 00:38:36,160 --> 00:38:37,350 que dans d'autres cas - 719 00:38:37,350 --> 00:38:39,495 mais C outil fait que cela ressemble? 720 00:38:39,495 --> 00:38:39,970 >> ÉTUDIANT 19: Une boucle. 721 00:38:39,970 --> 00:38:40,980 >> JASON HIRSCHHORN: Une boucle. 722 00:38:40,980 --> 00:38:43,060 Sonne comme une boucle. 723 00:38:43,060 --> 00:38:49,670 Alors, qui peut me donner la première ligne du code de la boucle ici? 724 00:38:49,670 --> 00:38:56,320 725 00:38:56,320 --> 00:39:01,980 Vous pouvez également choisir le type de boucle que vous voulez, si vous me donnez 726 00:39:01,980 --> 00:39:03,215 cette ligne de code. 727 00:39:03,215 --> 00:39:04,150 Il existe trois types. 728 00:39:04,150 --> 00:39:06,530 Vous pouvez donc choisir. 729 00:39:06,530 --> 00:39:08,080 Je dirais un de ceux. 730 00:39:08,080 --> 00:39:08,410 Avi. 731 00:39:08,410 --> 00:39:09,230 Lequel voulez-vous? 732 00:39:09,230 --> 00:39:09,960 >> AVI: POUR. 733 00:39:09,960 --> 00:39:11,460 >> JASON HIRSCHHORN: POUR. 734 00:39:11,460 --> 00:39:15,180 >> AVI: int i est égal à zéro. 735 00:39:15,180 --> 00:39:17,360 >> JASON HIRSCHHORN: OK. 736 00:39:17,360 --> 00:39:18,570 >> AVI: Cette partie, je ne suis pas sûr. 737 00:39:18,570 --> 00:39:29,080 Mais i est inférieur à la taille de la source d'étoiles? 738 00:39:29,080 --> 00:39:31,128 Je ne suis pas sûr de cela. 739 00:39:31,128 --> 00:39:32,580 >> JASON HIRSCHHORN: OK. 740 00:39:32,580 --> 00:39:35,870 >> AVI: Parce que vous voulez que le taille d'un fichier, non? 741 00:39:35,870 --> 00:39:41,090 >> JASON HIRSCHHORN: Donc, ce ne sera probablement pas nous donner la taille de l'effectif 742 00:39:41,090 --> 00:39:43,010 déposer en octets. 743 00:39:43,010 --> 00:39:47,680 Alors quoi d'autre pourrions-nous faire? 744 00:39:47,680 --> 00:39:48,810 Quel est l'autre type de boucle? 745 00:39:48,810 --> 00:39:50,180 Ou devrions-nous nous en tenir à la boucle POUR? 746 00:39:50,180 --> 00:39:55,350 747 00:39:55,350 --> 00:39:57,900 >> ÉTUDIANT 20: Pourriez-vous faire une boucle WHILE? 748 00:39:57,900 --> 00:40:01,350 Et puis, ce que vous faites est it! - 749 00:40:01,350 --> 00:40:03,930 parce que nous avons un char * pour le fichier. 750 00:40:03,930 --> 00:40:07,950 Donc, si nous gardons juste incrémentation que jusqu'à ce que nous allions trouver le caractère NULL à 751 00:40:07,950 --> 00:40:08,500 la fin de celui-ci? 752 00:40:08,500 --> 00:40:11,130 Ou non, n'est-ce pas la façon dont les fichiers de travail? 753 00:40:11,130 --> 00:40:14,300 >> JASON HIRSCHHORN: Donc, nous pouvons garder incrémenter le char * 754 00:40:14,300 --> 00:40:16,340 jusqu'à ce qu'on trouve la valeur NULL - 755 00:40:16,340 --> 00:40:18,580 >> ÉTUDIANT 20: Essentiellement continuer caractère par caractère jusqu'à ce que nous avons atteint 756 00:40:18,580 --> 00:40:21,250 la fin du fichier. 757 00:40:21,250 --> 00:40:21,600 >> JASON HIRSCHHORN: Oui. 758 00:40:21,600 --> 00:40:22,560 C'est ce que nous voulons faire. 759 00:40:22,560 --> 00:40:24,545 Nous voulons continuer à lire, caractère par caractère, jusqu'à ce que nous arrivons à 760 00:40:24,545 --> 00:40:25,080 la fin du fichier. 761 00:40:25,080 --> 00:40:25,375 >> ÉTUDIANT 20: Ouais. 762 00:40:25,375 --> 00:40:25,860 Trouver - 763 00:40:25,860 --> 00:40:28,540 quelle est la fin ou stop à la fin d'un fichier texte. 764 00:40:28,540 --> 00:40:28,620 >> JASON HIRSCHHORN: OK. 765 00:40:28,620 --> 00:40:30,140 Ainsi, lorsque nous arrivons à la fin du fichier - comment savons-nous que nous avons atteint 766 00:40:30,140 --> 00:40:33,200 la fin d'un fichier? 767 00:40:33,200 --> 00:40:34,710 Si je vous appelle - 768 00:40:34,710 --> 00:40:35,910 donc revenons en arrière. 769 00:40:35,910 --> 00:40:37,550 Qu'est-ce qu'une fonction? 770 00:40:37,550 --> 00:40:39,360 Allons à cette ligne ici. 771 00:40:39,360 --> 00:40:40,630 Lire à partir du fichier source. 772 00:40:40,630 --> 00:40:41,880 Qui peut me donner cette ligne de code? 773 00:40:41,880 --> 00:40:45,592 774 00:40:45,592 --> 00:40:47,590 >> ÉTUDIANT 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 Que faire si je veux lire, très spécifiquement, un octet? 778 00:40:52,240 --> 00:40:55,012 779 00:40:55,012 --> 00:40:56,860 >> ÉTUDIANT 21: Je ne sais pas. 780 00:40:56,860 --> 00:40:57,110 >> JASON HIRSCHHORN: OK. 781 00:40:57,110 --> 00:40:59,380 Encore plus simple que fscanf - ce qui est un - 782 00:40:59,380 --> 00:41:01,890 Je veux lire à partir d'un fichier source? 783 00:41:01,890 --> 00:41:03,720 Lire à partir d'un fichier source. 784 00:41:03,720 --> 00:41:04,850 Ce qui est une fonction - ouais. 785 00:41:04,850 --> 00:41:05,380 >> ÉTUDIANT 22: C'est fread? 786 00:41:05,380 --> 00:41:06,070 >> JASON HIRSCHHORN: Fread. 787 00:41:06,070 --> 00:41:07,550 Je pense que nous allons coller avec que l'un pour l'instant. 788 00:41:07,550 --> 00:41:10,380 789 00:41:10,380 --> 00:41:13,650 Quel genre d'arguments ne fread prendre? 790 00:41:13,650 --> 00:41:17,410 >> ÉTUDIANT 22: Probablement le type de fichier, puis l'emplacement dans le fichier? 791 00:41:17,410 --> 00:41:19,550 >> JASON HIRSCHHORN: Que puis-je saisir ici de comprendre ce type d'arguments 792 00:41:19,550 --> 00:41:20,950 fread prend? 793 00:41:20,950 --> 00:41:23,710 >> ÉTUDIANTS DE NOMBREUSES: Homme fread. 794 00:41:23,710 --> 00:41:24,740 >> JASON HIRSCHHORN: Homme fread et fwrite. 795 00:41:24,740 --> 00:41:25,980 On dirait qu'ils traînent ensemble. 796 00:41:25,980 --> 00:41:29,589 Donc fread prend combien arguments? 797 00:41:29,589 --> 00:41:30,920 >> ÉTUDIANT 23: Quatre. 798 00:41:30,920 --> 00:41:32,690 >> JASON HIRSCHHORN: Il faut quatre arguments. 799 00:41:32,690 --> 00:41:41,100 Il prend un pointeur, une taille, et que chose, ce qui est bizarre, et certains fichiers. 800 00:41:41,100 --> 00:41:42,000 OK? 801 00:41:42,000 --> 00:41:43,990 Lisons à ce sujet ici. 802 00:41:43,990 --> 00:41:49,370 "La fonction fread lit n memb éléments de données, chaque taille octets 803 00:41:49,370 --> 00:41:53,840 de long, depuis le flux pointé par écouter, de les stocker à l'emplacement 804 00:41:53,840 --> 00:41:56,170 donnée par le pointeur ". 805 00:41:56,170 --> 00:41:57,960 >> Donc, quatre arguments. 806 00:41:57,960 --> 00:42:04,510 Pourquoi dois-je copier non seulement cela, et collez-le ici. 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 Alors, qui peut commencer à remplir ces arguments pour moi? 810 00:42:13,673 --> 00:42:15,840 Avi. 811 00:42:15,840 --> 00:42:17,720 >> AVI: Sortez le vide. 812 00:42:17,720 --> 00:42:20,530 Mettez juste src. 813 00:42:20,530 --> 00:42:23,142 Sortez pointeur et l'étoile. 814 00:42:23,142 --> 00:42:26,102 Mettez src. 815 00:42:26,102 --> 00:42:27,050 Puis - 816 00:42:27,050 --> 00:42:28,500 >> JASON HIRSCHHORN: Je vais arrêter Vous êtes là, parce que c'est incorrect. 817 00:42:28,500 --> 00:42:32,590 818 00:42:32,590 --> 00:42:34,710 Vous avez raison de src, mais où devrait src aller? 819 00:42:34,710 --> 00:42:35,960 >> [VOIX interposition] 820 00:42:35,960 --> 00:42:38,976 821 00:42:38,976 --> 00:42:41,610 >> JASON HIRSCHHORN: Il devrait aller ici. 822 00:42:41,610 --> 00:42:43,790 C'est la src - notre src est un type. 823 00:42:43,790 --> 00:42:44,610 Voyons ici. 824 00:42:44,610 --> 00:42:49,610 Cette demande pour un type FILE *, nous effectivement les voir plus souvent comme ça. 825 00:42:49,610 --> 00:42:57,630 Donc, cette demande pour un argument de type de fichier * appelé ruisseau qui est src. 826 00:42:57,630 --> 00:42:58,480 OK? 827 00:42:58,480 --> 00:43:00,410 >> Quelle est la taille de choses ne nous voulons lire? 828 00:43:00,410 --> 00:43:03,340 Je vous ai donné ce dans le la description du problème. 829 00:43:03,340 --> 00:43:04,370 >> ÉTUDIANT 24: Un octet à la fois. 830 00:43:04,370 --> 00:43:05,340 >> JASON HIRSCHHORN: Un octet. 831 00:43:05,340 --> 00:43:08,205 Quelle est la taille d'un octet? 832 00:43:08,205 --> 00:43:11,642 Sa taille est en octets, de sorte que je peux mettre là? 833 00:43:11,642 --> 00:43:12,910 >> ÉTUDIANT 25: Une. 834 00:43:12,910 --> 00:43:14,730 >> JASON HIRSCHHORN: One. 835 00:43:14,730 --> 00:43:17,020 Droite. 836 00:43:17,020 --> 00:43:19,940 Sa taille est en octets de l'unité, si 1 est 1 octet. 837 00:43:19,940 --> 00:43:22,284 Combien dois-je envie de lire à la fois. 838 00:43:22,284 --> 00:43:23,520 >> ÉTUDIANT 26: Un? 839 00:43:23,520 --> 00:43:24,270 >> JASON HIRSCHHORN: Une chose. 840 00:43:24,270 --> 00:43:28,540 Je veux lire une chose de taille 1, une bouchée à la fois. 841 00:43:28,540 --> 00:43:32,110 Et où puis-je l'ai mis, une fois que j'ai lu? 842 00:43:32,110 --> 00:43:35,050 843 00:43:35,050 --> 00:43:36,510 >> ÉTUDIANT 27: Destination? 844 00:43:36,510 --> 00:43:39,270 >> JASON HIRSCHHORN: Je ne peux pas mettre tout droit dans la destination. 845 00:43:39,270 --> 00:43:40,800 >> ÉTUDIANT 28: Tu vas vente dans un troisième pointeur? 846 00:43:40,800 --> 00:43:41,780 >> ÉTUDIANT 27: Pour la destination. 847 00:43:41,780 --> 00:43:42,270 >> JASON HIRSCHHORN: OK. 848 00:43:42,270 --> 00:43:42,630 Ouais. 849 00:43:42,630 --> 00:43:46,820 >> ÉTUDIANT 29: Vous pouvez déclarer quelque chose à agir comme un stockage temporaire plus tôt. 850 00:43:46,820 --> 00:43:47,350 >> JASON HIRSCHHORN: OK. 851 00:43:47,350 --> 00:43:50,080 Donne-moi ça. 852 00:43:50,080 --> 00:43:53,930 >> ÉTUDIANT 29: Un autre fichier pointeur, peut-être? 853 00:43:53,930 --> 00:43:54,220 >> JASON HIRSCHHORN: OK. 854 00:43:54,220 --> 00:43:55,585 Donc, ce n'est étoile vide - 855 00:43:55,585 --> 00:43:57,750 c'est un type void étoiles, si ce n'est pas le à être un pointeur de fichier. 856 00:43:57,750 --> 00:44:02,520 Et si je lis un octet, où serait un bon endroit 857 00:44:02,520 --> 00:44:03,850 pour stocker un octet? 858 00:44:03,850 --> 00:44:04,660 >> ÉTUDIANT 29: Un tableau? 859 00:44:04,660 --> 00:44:05,770 >> JASON HIRSCHHORN: un tableau. 860 00:44:05,770 --> 00:44:07,730 OK. 861 00:44:07,730 --> 00:44:14,040 Et quoi d'autre est quelque chose qui est juste la taille d'un octet? 862 00:44:14,040 --> 00:44:16,980 863 00:44:16,980 --> 00:44:18,060 >> ÉTUDIANT 30: Un char *? 864 00:44:18,060 --> 00:44:18,530 >> ÉTUDIANT 29: Ouais. 865 00:44:18,530 --> 00:44:19,880 >> JASON HIRSCHHORN: Un char * n'est pas un octet. 866 00:44:19,880 --> 00:44:20,440 >> ÉTUDIANT 29: Un car. 867 00:44:20,440 --> 00:44:21,810 >> JASON HIRSCHHORN: Un char est un octet. 868 00:44:21,810 --> 00:44:22,920 Droite? 869 00:44:22,920 --> 00:44:26,740 Alors appelons ce tampon est un générique nom utilisé pour ces choses pour stocker 870 00:44:26,740 --> 00:44:27,910 quelque chose de temporaire. 871 00:44:27,910 --> 00:44:30,880 Je crée donc un tampon. 872 00:44:30,880 --> 00:44:31,150 Droite? 873 00:44:31,150 --> 00:44:32,990 Mais il prend un void *. 874 00:44:32,990 --> 00:44:38,660 Alors peut-être que vous avez raison, qu'il devrait être un tampon de taille 0. 875 00:44:38,660 --> 00:44:41,070 Il stocke donc un - 876 00:44:41,070 --> 00:44:41,280 droite. 877 00:44:41,280 --> 00:44:43,560 >> Parce que ce droit ici - omble tampon est un personnage, mais 878 00:44:43,560 --> 00:44:45,110 cela prend un void * - 879 00:44:45,110 --> 00:44:45,870 un pointeur. 880 00:44:45,870 --> 00:44:50,640 Donc, je pourrais le faire et maintenant tampon est un pointeur. 881 00:44:50,640 --> 00:44:53,214 Que pouvais-je faire? 882 00:44:53,214 --> 00:44:55,775 >> ÉTUDIANT 31: Mettez une étoile à côté du type char. 883 00:44:55,775 --> 00:44:58,380 >> JASON HIRSCHHORN: je pouvais ont créé ce char *. 884 00:44:58,380 --> 00:45:00,216 OK. 885 00:45:00,216 --> 00:45:03,131 Qu'est-ce que c'est une autre chose que je pouvais faire? 886 00:45:03,131 --> 00:45:04,050 Ou allons-y avec celui-ci. 887 00:45:04,050 --> 00:45:05,740 Char * tampon, de sorte que ce que je mets ici? 888 00:45:05,740 --> 00:45:08,290 889 00:45:08,290 --> 00:45:09,310 >> ÉTUDIANT 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 Tampon est un pointeur sur un caractère. 893 00:45:14,500 --> 00:45:19,480 Et à cet endroit, nous mettons un octet de quelque chose que nous avons lu. 894 00:45:19,480 --> 00:45:19,980 Ouais. 895 00:45:19,980 --> 00:45:20,700 Avi. 896 00:45:20,700 --> 00:45:21,230 >> AVI: Juste une question rapide. 897 00:45:21,230 --> 00:45:24,440 Voulez-vous malloc tampon? 898 00:45:24,440 --> 00:45:25,930 >> JASON HIRSCHHORN: Qui peut répondre à cette question? 899 00:45:25,930 --> 00:45:30,210 >> ÉTUDIANT 32: Eh bien, il n'a pas vraiment Point à tout moment, donc - 900 00:45:30,210 --> 00:45:32,610 >> JASON HIRSCHHORN: Mais faire nous voulons malloc il? 901 00:45:32,610 --> 00:45:35,600 >> ÉTUDIANT 32: Si vous deviez le faire que Ainsi, je pense que, oui, parce que vous aurez besoin 902 00:45:35,600 --> 00:45:36,990 un endroit pour qu'il pointe vers. 903 00:45:36,990 --> 00:45:38,350 >> JASON HIRSCHHORN: Avons-nous avoir à malloc il? 904 00:45:38,350 --> 00:45:40,580 >> ÉTUDIANT 33: Si vous allez utiliser à l'extérieur de la boucle. 905 00:45:40,580 --> 00:45:42,524 >> JASON HIRSCHHORN: Allons-nous utiliser à l'extérieur de la boucle? 906 00:45:42,524 --> 00:45:44,392 >> ÉTUDIANT 34: Oui. 907 00:45:44,392 --> 00:45:44,860 >> ÉTUDIANT 35: Attendez. 908 00:45:44,860 --> 00:45:46,980 Voulons-nous déclarer dans la boucle au-delà de? 909 00:45:46,980 --> 00:45:50,100 >> JASON HIRSCHHORN: Donc je suppose que nous avons quelque temps boucle de pseudo ici que nous sommes 910 00:45:50,100 --> 00:45:51,950 à essayer de comprendre, que nous n'avons pas encore appris à. 911 00:45:51,950 --> 00:45:54,710 912 00:45:54,710 --> 00:45:56,010 Nous n'avons pas besoin de malloc il. 913 00:45:56,010 --> 00:45:59,310 Nous évoluons dans le principal, il va seulement pour être utilisé à l'intérieur de cette boucle. 914 00:45:59,310 --> 00:46:00,540 Il n'a pas besoin d'exister en dehors de ce produit. 915 00:46:00,540 --> 00:46:02,340 >> Ainsi, il peut s'agir d'une variable locale. 916 00:46:02,340 --> 00:46:03,925 Vous avez un pointeur vers une variable locale. 917 00:46:03,925 --> 00:46:07,984 918 00:46:07,984 --> 00:46:09,590 >> ÉTUDIANT 36: Mais ce n'est pas pointant à quelque chose. 919 00:46:09,590 --> 00:46:11,540 >> JASON HIRSCHHORN: Non, ce n'est pas initialisée à rien. 920 00:46:11,540 --> 00:46:12,790 Mais nous n'allons pas l'utiliser aussi. 921 00:46:12,790 --> 00:46:15,300 Nous allons mettre quelque chose dans la première fois nous l'utilisons. 922 00:46:15,300 --> 00:46:16,580 Alors que semble OK. 923 00:46:16,580 --> 00:46:17,780 Donc nous n'avons pas besoin de malloc ici. 924 00:46:17,780 --> 00:46:19,360 Et je pense que c'est OK comme c'est. 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 Nous avons la ligne fread. 928 00:46:27,190 --> 00:46:28,490 Faisons la ligne suivante. 929 00:46:28,490 --> 00:46:32,984 >> Si nous voulons écrire dans un fichier, ce qui est une bonne fonction à utiliser pour le faire? 930 00:46:32,984 --> 00:46:33,770 >> ÉTUDIANT 37: fwrite? 931 00:46:33,770 --> 00:46:35,140 >> ÉTUDIANT 38: fprintf? 932 00:46:35,140 --> 00:46:36,010 >> JASON HIRSCHHORN: fprintf est un. 933 00:46:36,010 --> 00:46:37,260 Quel est l'autre? 934 00:46:37,260 --> 00:46:37,680 >> ÉTUDIANT 39: fwrite. 935 00:46:37,680 --> 00:46:38,510 >> JASON HIRSCHHORN: fwrite. 936 00:46:38,510 --> 00:46:41,250 Et pour nos fins, fwrite, que nous avons vu ici, c'est 937 00:46:41,250 --> 00:46:42,500 probablement le meilleur choix. 938 00:46:42,500 --> 00:46:51,970 939 00:46:51,970 --> 00:46:53,950 Il prend quatre arguments ainsi. 940 00:46:53,950 --> 00:46:57,570 Nishant, peut vous donner moi les arguments? 941 00:46:57,570 --> 00:47:00,570 >> Nishant: cours au premier pour être juste tampon. 942 00:47:00,570 --> 00:47:02,210 >> JASON HIRSCHHORN: OK. 943 00:47:02,210 --> 00:47:06,752 >> Nishant: Le second de juste aller à 1. 944 00:47:06,752 --> 00:47:09,510 Troisième va être 1. 945 00:47:09,510 --> 00:47:11,470 Et le quatrième va être dst. 946 00:47:11,470 --> 00:47:18,010 947 00:47:18,010 --> 00:47:19,550 >> JASON HIRSCHHORN: Quelqu'un at-il Pour toute question sur cette ligne? 948 00:47:19,550 --> 00:47:28,370 949 00:47:28,370 --> 00:47:29,130 Cela semble bon. 950 00:47:29,130 --> 00:47:29,590 OK. 951 00:47:29,590 --> 00:47:34,250 Alors maintenant, il semble que la seule chose que nous sommes manquant - en fait, écrivons 952 00:47:34,250 --> 00:47:35,090 cette dernière ligne. 953 00:47:35,090 --> 00:47:36,300 Fermez les fichiers. 954 00:47:36,300 --> 00:47:38,880 Qui peut nous finir l'écriture ces deux dernières lignes? 955 00:47:38,880 --> 00:47:39,120 Oui. 956 00:47:39,120 --> 00:47:39,850 Désolé, quel est votre nom? 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 fFerme puis destination fclose. 960 00:47:47,560 --> 00:47:52,430 >> JASON HIRSCHHORN: fclose, parenthèse ouverte, src, proches parenthèse, point-virgule. 961 00:47:52,430 --> 00:47:53,680 Et fclose - 962 00:47:53,680 --> 00:47:57,560 963 00:47:57,560 --> 00:47:58,090 ouais? 964 00:47:58,090 --> 00:48:01,710 >> LUCY: Open parenthèses, dst et puis point-virgule. 965 00:48:01,710 --> 00:48:02,520 >> JASON HIRSCHHORN: Très bien. 966 00:48:02,520 --> 00:48:04,338 Et que dois-je inclure à la fin? 967 00:48:04,338 --> 00:48:05,210 >> LUCY: Retour 0. 968 00:48:05,210 --> 00:48:05,570 >> JASON HIRSCHHORN: Retour 0. 969 00:48:05,570 --> 00:48:06,820 Dois-je? 970 00:48:06,820 --> 00:48:10,560 971 00:48:10,560 --> 00:48:12,590 Juste une question. 972 00:48:12,590 --> 00:48:14,957 Faut-il inclure la rentabilité 0? 973 00:48:14,957 --> 00:48:16,240 >> ÉTUDIANTS DE NOMBREUSES: Non 974 00:48:16,240 --> 00:48:16,430 >> JASON HIRSCHHORN: Non 975 00:48:16,430 --> 00:48:18,090 Principal fait automatiquement si vous arrivez à la fin. 976 00:48:18,090 --> 00:48:20,580 Mais je pense qu'il est bon de inclure explicitement. 977 00:48:20,580 --> 00:48:23,860 Surtout quand on y retourne l'autre les choses tout au long du programme. 978 00:48:23,860 --> 00:48:24,810 OK. 979 00:48:24,810 --> 00:48:26,230 C'est ce qui nous manque - 980 00:48:26,230 --> 00:48:28,520 TOUT quoi? 981 00:48:28,520 --> 00:48:31,630 Qui peut penser à une - 982 00:48:31,630 --> 00:48:35,240 a une certaine idée de ce que les choses pourrait aller là-bas? 983 00:48:35,240 --> 00:48:37,350 Même si c'est seulement dans certains pseudo comme langue? 984 00:48:37,350 --> 00:48:41,330 >> Que sommes-nous vraiment - ce voulons-nous aller jusqu'à? 985 00:48:41,330 --> 00:48:41,980 Ouais, Lucy. 986 00:48:41,980 --> 00:48:43,240 >> LUCY: La fin du fichier. 987 00:48:43,240 --> 00:48:44,990 >> JASON HIRSCHHORN: La fin du fichier. 988 00:48:44,990 --> 00:48:49,280 Alors, que voulez-vous dire par la fin du fichier? 989 00:48:49,280 --> 00:48:50,955 >> LUCY: Une fois que vous atteignez le fin du fichier, arrêter. 990 00:48:50,955 --> 00:48:51,240 >> JASON HIRSCHHORN: OK. 991 00:48:51,240 --> 00:48:53,460 Donc, une fois que nous arrivons à la fin du fichier. 992 00:48:53,460 --> 00:48:56,893 Comment savons-nous que nous avons atteint la fin du fichier? 993 00:48:56,893 --> 00:48:59,900 >> ÉTUDIANT 40: Je pense tampon sera mis à NULL. 994 00:48:59,900 --> 00:49:01,885 >> ÉTUDIANT 41: Buffer est déclarée à l'intérieur de la boucle. 995 00:49:01,885 --> 00:49:03,670 >> JASON HIRSCHHORN: Donc vous pensez tampon sera mis à NULL. 996 00:49:03,670 --> 00:49:05,850 Pourquoi serait tampon être mis à NULL? 997 00:49:05,850 --> 00:49:10,420 >> ÉTUDIANT 40: Parce que quand vous fread, vous essayez de mettre 998 00:49:10,420 --> 00:49:13,528 rien dans le tampon. 999 00:49:13,528 --> 00:49:13,980 >> JASON HIRSCHHORN: OK. 1000 00:49:13,980 --> 00:49:15,550 Donc, vous fread penser - 1001 00:49:15,550 --> 00:49:19,000 quand nous sommes arrivés à la fin de la fichier, ce qui est fread va faire? 1002 00:49:19,000 --> 00:49:21,230 Je pense que c'est la question nous avons à comprendre. 1003 00:49:21,230 --> 00:49:21,960 Qu'est-ce que fread faire? 1004 00:49:21,960 --> 00:49:25,640 Est-il mis NULL dans un tampon, ou faut-il faire autre chose? 1005 00:49:25,640 --> 00:49:27,510 Comment pouvons-nous comprendre de quoi il ne? 1006 00:49:27,510 --> 00:49:28,190 >> ÉTUDIANT 42: Man. 1007 00:49:28,190 --> 00:49:28,810 >> JASON HIRSCHHORN: Man. 1008 00:49:28,810 --> 00:49:32,280 Alors regardons ici. 1009 00:49:32,280 --> 00:49:34,000 Valeur de retour. 1010 00:49:34,000 --> 00:49:39,620 En cas de succès, fread et fwrite retourner le nombre d'articles lus ou écrits. 1011 00:49:39,620 --> 00:49:43,700 Ce nombre est égal au nombre d'octets transféré que lorsque la taille est 1. 1012 00:49:43,700 --> 00:49:47,780 En cas d'erreur, ou la fin de l' fichier est atteinte, la valeur de retour est un 1013 00:49:47,780 --> 00:49:51,490 court nombre d'éléments ou 0. 1014 00:49:51,490 --> 00:49:57,860 >> Donc, pour nos fins, si atteint fread la fin du fichier, et lit à partir de 1015 00:49:57,860 --> 00:50:02,100 la fin du fichier, il n'y a rien à gauche à lire, ce que ça va revenir? 1016 00:50:02,100 --> 00:50:03,290 >> ÉTUDIANT 43: Zero? 1017 00:50:03,290 --> 00:50:04,540 >> JASON HIRSCHHORN: Quoi? 1018 00:50:04,540 --> 00:50:05,300 >> ÉTUDIANT 43: Zero? 1019 00:50:05,300 --> 00:50:05,690 >> JASON HIRSCHHORN: zéro. 1020 00:50:05,690 --> 00:50:06,940 Il va retourner zéro. 1021 00:50:06,940 --> 00:50:09,360 1022 00:50:09,360 --> 00:50:13,010 Nous savons donc que fread, lorsque nous avons atteint la fin du fichier, va 1023 00:50:13,010 --> 00:50:13,690 pour revenir à zéro. 1024 00:50:13,690 --> 00:50:17,460 Comment pouvons-nous utiliser à notre avantage? 1025 00:50:17,460 --> 00:50:21,733 >> AVI: Vous pouvez déclarer une variable en dehors de la boucle de contrôle dite. 1026 00:50:21,733 --> 00:50:27,040 Si le contrôle est égale à - 1027 00:50:27,040 --> 00:50:28,190 pour l'instant - un. 1028 00:50:28,190 --> 00:50:28,920 >> JASON HIRSCHHORN: OK. 1029 00:50:28,920 --> 00:50:38,050 >> AVI: Et puis vous pouvez mettre un SI déclaration juste après fread dire si 1030 00:50:38,050 --> 00:50:42,600 fread est égale à zéro - 1031 00:50:42,600 --> 00:50:43,850 pas. 1032 00:50:43,850 --> 00:50:46,002 1033 00:50:46,002 --> 00:50:47,252 >> JASON HIRSCHHORN: Qui peut aider à Avi? 1034 00:50:47,252 --> 00:50:49,690 1035 00:50:49,690 --> 00:50:52,410 >> AVI: Quelle est la valeur retourné par fread? 1036 00:50:52,410 --> 00:50:54,060 >> JASON HIRSCHHORN: Nous venons de est allé là-dessus. 1037 00:50:54,060 --> 00:50:55,450 >> AVI: Comment vous le représentez-vous? 1038 00:50:55,450 --> 00:50:57,190 >> JASON HIRSCHHORN: il revient donc - nous allons regardez ici - il renvoie une 1039 00:50:57,190 --> 00:50:59,340 size_t, qui est essentiellement un nombre entier. 1040 00:50:59,340 --> 00:51:02,240 1041 00:51:02,240 --> 00:51:03,410 Donc, il renvoie un entier. 1042 00:51:03,410 --> 00:51:05,160 Et dans notre cas, il sera retourner 1 ou 0 - 1043 00:51:05,160 --> 00:51:08,760 1 si elle disait une chose - un octet, et 0 si nous avons atteint la fin. 1044 00:51:08,760 --> 00:51:13,560 1045 00:51:13,560 --> 00:51:16,450 Donc, si fread - 1046 00:51:16,450 --> 00:51:16,855 ouais? 1047 00:51:16,855 --> 00:51:20,330 >> ÉTUDIANT 45: Vous ne pouvez pas vous suffit de mettre le plein fread (buffer, 1, 1, src) dans l' 1048 00:51:20,330 --> 00:51:21,660 tout en boucle? 1049 00:51:21,660 --> 00:51:26,510 >> JASON HIRSCHHORN: Donc, vous proposez Ce faisant, il en? 1050 00:51:26,510 --> 00:51:27,600 >> [VOIX interposition] 1051 00:51:27,600 --> 00:51:29,520 >> JASON HIRSCHHORN: Attendez. 1052 00:51:29,520 --> 00:51:30,885 Donc, nous débarrasser de cela. 1053 00:51:30,885 --> 00:51:33,300 Vous proposez donc de mettre fread dans là? 1054 00:51:33,300 --> 00:51:35,457 Que devrions-nous aller aussi si vous voulez faire cela? 1055 00:51:35,457 --> 00:51:36,740 >> ÉTUDIANT 45: Le tampon en dehors. 1056 00:51:36,740 --> 00:51:38,110 >> JASON HIRSCHHORN: Nous devrions également déplacer ce ici. 1057 00:51:38,110 --> 00:51:41,700 >> ÉTUDIANT 45: Mais est-ce que cesse faire avancer? 1058 00:51:41,700 --> 00:51:42,950 >> [VOIX interposition] 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 C'est donc ce que Okshar proposé. 1062 00:51:50,570 --> 00:51:51,930 Nous créons notre tampon. 1063 00:51:51,930 --> 00:51:57,020 Nous TOUT fread, fwrite nous. 1064 00:51:57,020 --> 00:51:59,760 Pensées à ce sujet? 1065 00:51:59,760 --> 00:52:04,050 >> ÉTUDIANT 46: Ma seule question est, serait il fait exécuter la commande fread? 1066 00:52:04,050 --> 00:52:06,175 >> JASON HIRSCHHORN: Grande question. 1067 00:52:06,175 --> 00:52:11,050 Lorsque vous mettez un appel de fonction l'intérieur d'un état, est-ce que 1068 00:52:11,050 --> 00:52:12,300 appel de fonction exécuter? 1069 00:52:12,300 --> 00:52:15,760 1070 00:52:15,760 --> 00:52:17,770 Nous avons vu des exemples de cela avant. 1071 00:52:17,770 --> 00:52:24,900 1072 00:52:24,900 --> 00:52:25,660 Droite? 1073 00:52:25,660 --> 00:52:26,125 >> ÉTUDIANT 46: OK. 1074 00:52:26,125 --> 00:52:26,590 Ouais. 1075 00:52:26,590 --> 00:52:30,140 Donc, il fait exécuter. 1076 00:52:30,140 --> 00:52:31,790 >> JASON HIRSCHHORN: Nous avons vu des choses comme ça avant, où nous avons une 1077 00:52:31,790 --> 00:52:33,550 appel de fonction à l'intérieur d'un état. 1078 00:52:33,550 --> 00:52:35,540 Est-ce que cet appel de fonction exécuter? 1079 00:52:35,540 --> 00:52:36,350 Oui. 1080 00:52:36,350 --> 00:52:37,410 Donc, la réponse est oui. 1081 00:52:37,410 --> 00:52:41,010 Cet appel de fonction sera exécutée. 1082 00:52:41,010 --> 00:52:42,418 Mais encore une fois, est-ce ce que nous voulons? 1083 00:52:42,418 --> 00:52:49,250 1084 00:52:49,250 --> 00:52:52,204 >> Ce qui est une façon, nous pourrions comprendre si c'est ce que nous voulons? 1085 00:52:52,204 --> 00:52:53,470 >> ÉTUDIANTS DE NOMBREUSES: l'exécuter? 1086 00:52:53,470 --> 00:52:54,460 >> JASON HIRSCHHORN: Nous pourrions exécuter. 1087 00:52:54,460 --> 00:52:57,500 Mais avant de faire cela, nous avons pu raisonner aussi par ce biais. 1088 00:52:57,500 --> 00:52:57,920 Si - 1089 00:52:57,920 --> 00:53:01,920 dire que nous avons un octet dans notre fichier, nous aurons ici, 1090 00:53:01,920 --> 00:53:02,660 nous allons arriver à ce code. 1091 00:53:02,660 --> 00:53:03,620 Ce sera exécuté. 1092 00:53:03,620 --> 00:53:07,780 fread retourne un octet et stocker dans la mémoire tampon. 1093 00:53:07,780 --> 00:53:11,290 Et ce sera évalué à 1, droite, après il retourne 1. 1094 00:53:11,290 --> 00:53:12,640 >> Ainsi, alors que 1. 1095 00:53:12,640 --> 00:53:15,325 Est-ce que cela veut dire le code à l'intérieur la boucle WHILE exécute? 1096 00:53:15,325 --> 00:53:15,453 >> ÉTUDIANT 47: Ouais. 1097 00:53:15,453 --> 00:53:16,040 C'est vrai. 1098 00:53:16,040 --> 00:53:16,290 >> JASON HIRSCHHORN: Oui. 1099 00:53:16,290 --> 00:53:17,490 1 est vrai. 1100 00:53:17,490 --> 00:53:18,240 Ce n'est pas 0. 1101 00:53:18,240 --> 00:53:20,360 Ainsi, le code à l'intérieur ici exécutera. 1102 00:53:20,360 --> 00:53:22,300 Nous allons donc écrire que. 1103 00:53:22,300 --> 00:53:25,340 Nous allons revenir à cette ligne une fois de plus. 1104 00:53:25,340 --> 00:53:26,850 Maintenant, nous avons - 1105 00:53:26,850 --> 00:53:28,550 nous sommes à la fin de notre dossier. 1106 00:53:28,550 --> 00:53:30,980 Nous lisons à la fin de notre fichier, parce que nous n'avions qu'un seul octet en elle. 1107 00:53:30,980 --> 00:53:34,270 >> Fread retourne 0, les magasins quelque chose dans le tampon. 1108 00:53:34,270 --> 00:53:35,890 Je ne sais vraiment pas ce que il stocke dans un tampon. 1109 00:53:35,890 --> 00:53:38,380 Nous pourrions probablement voir pour voir ce qu'il fait. 1110 00:53:38,380 --> 00:53:40,130 Que je ne sais vraiment pas. 1111 00:53:40,130 --> 00:53:43,090 Nous ne savons pas, qui se soucie de ce il stocke dans un tampon? 1112 00:53:43,090 --> 00:53:44,010 Mais il ne retourne 0. 1113 00:53:44,010 --> 00:53:45,440 Et volonté, tout 0 exécuter? 1114 00:53:45,440 --> 00:53:49,950 1115 00:53:49,950 --> 00:53:51,180 >> TOUT 0 ne sera pas exécuter. 1116 00:53:51,180 --> 00:53:54,030 Alors que nous passons ici. 1117 00:53:54,030 --> 00:53:58,870 Alors soyons un spectacle de mains si ce est le code que nous devrions courir, ou si nous 1118 00:53:58,870 --> 00:54:00,140 devrait faire des changements en premier. 1119 00:54:00,140 --> 00:54:02,180 Donc, si vous pensez - vous devez voter. 1120 00:54:02,180 --> 00:54:06,885 Si vous pensez que nous devrions exécuter ce code tel quel, s'il vous plaît, levez la main. 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 Il ya une - 1124 00:54:14,315 --> 00:54:17,260 avez-vous une question, une préoccupation? 1125 00:54:17,260 --> 00:54:18,080 Ouais. 1126 00:54:18,080 --> 00:54:21,240 >> ÉTUDIANT 48: Après nous passons tampon à l'extérieur de la boucle, nous faisons 1127 00:54:21,240 --> 00:54:22,670 avoir à malloc il? 1128 00:54:22,670 --> 00:54:23,310 >> JASON HIRSCHHORN: Grande question. 1129 00:54:23,310 --> 00:54:26,670 Après nous passons tampon en dehors de la boucle, avons-nous à malloc il? 1130 00:54:26,670 --> 00:54:28,400 C'est une question de portée. 1131 00:54:28,400 --> 00:54:32,130 Si on initialise tampon en dehors de cette boucle, il sera exister 1132 00:54:32,130 --> 00:54:33,534 à l'intérieur de la boucle? 1133 00:54:33,534 --> 00:54:35,230 >> ÉTUDIANTS DE NOMBREUSES: Oui. 1134 00:54:35,230 --> 00:54:35,580 >> JASON HIRSCHHORN: Oui. 1135 00:54:35,580 --> 00:54:40,100 Son champ d'application couvre l'intérieur de la boucle, et, vraiment, rien en dessous de l'intérieur 1136 00:54:40,100 --> 00:54:42,460 de ce code, y compris la choses à l'intérieur ici. 1137 00:54:42,460 --> 00:54:43,930 Donc nous n'avons pas besoin de malloc il. 1138 00:54:43,930 --> 00:54:47,766 C'est une variable locale, et son champ d'application comprend encore la boucle. 1139 00:54:47,766 --> 00:54:49,540 >> ÉTUDIANT 49: Avons-nous besoin de le libérer? 1140 00:54:49,540 --> 00:54:51,770 >> JASON HIRSCHHORN: Avons-nous besoin de tampon libre? 1141 00:54:51,770 --> 00:54:53,860 >> ÉTUDIANT 49: Oui, si nous ne faisons pas malloc. 1142 00:54:53,860 --> 00:54:55,750 >> JASON HIRSCHHORN: Avons-nous besoin de tampon libre? 1143 00:54:55,750 --> 00:54:57,160 Nous ne le faisons pas. 1144 00:54:57,160 --> 00:55:01,280 Là encore, il s'agit d'une variable locale, donc nous n'avons pas besoin de le libérer. 1145 00:55:01,280 --> 00:55:02,170 OK. 1146 00:55:02,170 --> 00:55:03,480 Voyons ce qui se passe. 1147 00:55:03,480 --> 00:55:17,290 1148 00:55:17,290 --> 00:55:18,220 Il est donc non initialisée. 1149 00:55:18,220 --> 00:55:20,830 C'est ce quelque chose qui Marcus a proposé plus tôt. 1150 00:55:20,830 --> 00:55:25,340 Nous avons donc cette erreur, variable tampon est initialisée lorsque utilisé ici. 1151 00:55:25,340 --> 00:55:26,590 >> Comment pouvons-nous résoudre ce problème? 1152 00:55:26,590 --> 00:55:29,460 1153 00:55:29,460 --> 00:55:30,960 >> ÉTUDIANT 50: malloc il? 1154 00:55:30,960 --> 00:55:31,770 >> ÉTUDIANT 51: Equals NULL? 1155 00:55:31,770 --> 00:55:33,000 >> ÉTUDIANT 52: Dites tampon est égal à 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 On dirait bien. 1159 00:55:40,770 --> 00:55:42,410 Nous l'avons maintenant. 1160 00:55:42,410 --> 00:55:45,630 Créons quelque chose pour essayer de copie. 1161 00:55:45,630 --> 00:56:08,990 1162 00:56:08,990 --> 00:56:10,490 Donc, nous avons notre fichier texte. 1163 00:56:10,490 --> 00:56:11,740 Comment pouvons-nous lancer ce programme? 1164 00:56:11,740 --> 00:56:14,140 1165 00:56:14,140 --> 00:56:15,472 Ouais. 1166 00:56:15,472 --> 00:56:22,230 >> ÉTUDIANT 53: Vous pouvez le faire point réduire cp, test.txt. 1167 00:56:22,230 --> 00:56:25,140 Et puis, vous pouvez nommer un autre fichier qui il va stocker dans. 1168 00:56:25,140 --> 00:56:25,510 >> JASON HIRSCHHORN: OK. 1169 00:56:25,510 --> 00:56:27,380 Nous l'appellerons 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 Faute Seg. 1173 00:56:34,320 --> 00:56:35,570 Réflexions sur la faute de segment? 1174 00:56:35,570 --> 00:56:40,900 1175 00:56:40,900 --> 00:56:41,390 C'est très bien. 1176 00:56:41,390 --> 00:56:45,040 Comment pouvons-nous savoir où le défaut de segment est? 1177 00:56:45,040 --> 00:56:45,680 Qu'est-ce? 1178 00:56:45,680 --> 00:56:45,990 >> ÉTUDIANT 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 Nous courons gdb en écrivant gdb point barre, le nom de notre programme. 1182 00:56:55,300 --> 00:56:57,020 Aucun des arguments de ligne de commande là-bas. 1183 00:56:57,020 --> 00:56:59,570 Nous allons définir un point d'arrêt au principal. 1184 00:56:59,570 --> 00:57:02,190 Si je veux commencer à gdb, je fais quoi? 1185 00:57:02,190 --> 00:57:02,730 >> ÉTUDIANT 55: R. 1186 00:57:02,730 --> 00:57:08,910 >> JASON HIRSCHHORN: R. Et puis quoi? 1187 00:57:08,910 --> 00:57:09,400 >> ÉTUDIANT 55: Les arguments? 1188 00:57:09,400 --> 00:57:10,650 >> JASON HIRSCHHORN: Puis le arguments de ligne de commande. 1189 00:57:10,650 --> 00:57:15,890 1190 00:57:15,890 --> 00:57:17,120 Passons en revue. 1191 00:57:17,120 --> 00:57:19,090 N est juste me prend ligne par ligne. 1192 00:57:19,090 --> 00:57:21,450 Je vais aller jusqu'à Je reçois de ma faute de segment. 1193 00:57:21,450 --> 00:57:22,700 Il ya de ma faute de segmentation. 1194 00:57:22,700 --> 00:57:24,960 1195 00:57:24,960 --> 00:57:27,875 Il ressemble à fread causé mon segment faute. 1196 00:57:27,875 --> 00:57:30,570 1197 00:57:30,570 --> 00:57:32,770 Je sais fread causé ma faute de segmentation, parce que c'était la 1198 00:57:32,770 --> 00:57:34,950 ligne que nous venons exécuté. 1199 00:57:34,950 --> 00:57:36,530 >> Et la seule chose qui était se passe dans cette ligne - 1200 00:57:36,530 --> 00:57:37,520 deux choses se passaient. 1201 00:57:37,520 --> 00:57:40,610 Fread allait, et puis nous avons été faire quelques vérifications de TOUT. 1202 00:57:40,610 --> 00:57:44,820 Je suis prêt à parier que le TOUT contrôle ne causait pas de ma faute de segmentation. 1203 00:57:44,820 --> 00:57:46,950 Très probablement, fread était provoquant ma faute de segment. 1204 00:57:46,950 --> 00:57:49,260 Je vois aussi quelque chose ici, memcopy. 1205 00:57:49,260 --> 00:57:50,500 >> Copie de la mémoire. 1206 00:57:50,500 --> 00:57:53,820 On dirait que le déplacement de la mémoire un endroit à l'autre. 1207 00:57:53,820 --> 00:57:56,890 Sonne comme quelque chose qui se passerait dans fread, peut-être un peu de mémoire 1208 00:57:56,890 --> 00:57:58,910 passer d'ici à là. 1209 00:57:58,910 --> 00:58:01,740 1210 00:58:01,740 --> 00:58:03,860 Passons en revue ce nouveau. 1211 00:58:03,860 --> 00:58:06,900 Comment puis-je le démarre plus et le relancer? 1212 00:58:06,900 --> 00:58:08,092 Ouais. 1213 00:58:08,092 --> 00:58:15,140 >> ÉTUDIANT 56: Avez-vous besoin de mettre une esperluette avant tampon? 1214 00:58:15,140 --> 00:58:17,800 >> JASON HIRSCHHORN: Donc esperluette avant tampon me donner l'adresse de 1215 00:58:17,800 --> 00:58:22,330 tampon, qui est un char *. 1216 00:58:22,330 --> 00:58:25,250 Courons à travers ce une fois de plus. 1217 00:58:25,250 --> 00:58:28,248 Comment puis-je passer en revue une fois de plus? 1218 00:58:28,248 --> 00:58:29,210 >> ÉTUDIANT 57: Pouvez-vous juste type d'exécution à nouveau? 1219 00:58:29,210 --> 00:58:32,050 >> JASON HIRSCHHORN: Il suffit de taper à nouveau terme. 1220 00:58:32,050 --> 00:58:33,415 Donc, nous n'allons pas exécuter cette ligne. 1221 00:58:33,415 --> 00:58:36,250 1222 00:58:36,250 --> 00:58:39,240 Alors tampon est un pointeur NULL. 1223 00:58:39,240 --> 00:58:40,490 Corriger? 1224 00:58:40,490 --> 00:58:45,870 1225 00:58:45,870 --> 00:58:47,060 Il pointe vers - Voyons. 1226 00:58:47,060 --> 00:58:48,500 Si nous avons notre - 1227 00:58:48,500 --> 00:58:50,430 dresser un tableau rapide de ce. 1228 00:58:50,430 --> 00:58:53,500 Tout le monde peut voir si J'écris ici? 1229 00:58:53,500 --> 00:59:02,890 >> Ainsi, dans la pile, on a un locale variable et elle est appelée tampon, et 1230 00:59:02,890 --> 00:59:08,230 c'est un pointeur sur un caractère. 1231 00:59:08,230 --> 00:59:10,325 Quelle adresse est ce charbon à? 1232 00:59:10,325 --> 00:59:12,550 >> ÉTUDIANT 58: 0x0. 1233 00:59:12,550 --> 00:59:13,400 >> JASON HIRSCHHORN: Droit. 1234 00:59:13,400 --> 00:59:14,200 C'est ce que c'est. 1235 00:59:14,200 --> 00:59:17,600 Ici, tampon à l'intérieur, est stocké 0x0. 1236 00:59:17,600 --> 00:59:20,480 C'est ce que nous avons - le configuration que nous avons en ce moment. 1237 00:59:20,480 --> 00:59:27,540 Donc cette ligne, fread, met quelque chose de la source où? 1238 00:59:27,540 --> 00:59:30,560 Dans cette zone ou cette boîte? 1239 00:59:30,560 --> 00:59:31,060 Quelle boîte? 1240 00:59:31,060 --> 00:59:33,290 Boîte ou boîte de droite à gauche? 1241 00:59:33,290 --> 00:59:34,750 Cette case de droite. 1242 00:59:34,750 --> 00:59:38,440 >> Il suit le pointeur, et le met ici. 1243 00:59:38,440 --> 00:59:42,620 Quand nous essayons de mémoire tactile à l'emplacement 0, qu'avons-nous? 1244 00:59:42,620 --> 00:59:45,050 Une erreur de segmentation. 1245 00:59:45,050 --> 00:59:46,550 C'est l'erreur que nous avons maintenant. 1246 00:59:46,550 --> 00:59:46,970 Ouais. 1247 00:59:46,970 --> 00:59:48,410 >> ÉTUDIANT 59: N'avez-vous pas de mettre un tampon de star? 1248 00:59:48,410 --> 00:59:49,180 Ou pas? 1249 00:59:49,180 --> 00:59:50,050 Pour fread? 1250 00:59:50,050 --> 00:59:51,450 >> JASON HIRSCHHORN: Donc fread prend un pointeur. 1251 00:59:51,450 --> 00:59:54,920 1252 00:59:54,920 --> 00:59:55,900 Donc, il passe dans un tampon. 1253 00:59:55,900 --> 00:59:58,980 Et puis ça va dé-référence quelque part à l'intérieur de fread. 1254 00:59:58,980 --> 01:00:00,700 Mais encore une fois, nous avons vu, il prend un pointeur. 1255 01:00:00,700 --> 01:00:02,560 Nous n'avons pas besoin de passer tampon étoiles. 1256 01:00:02,560 --> 01:00:05,350 Ce serait passer il tout ce qui est ici. 1257 01:00:05,350 --> 01:00:07,980 Et ce serait probablement nous donner une erreur parce que nous sommes dé-référencement il. 1258 01:00:07,980 --> 01:00:08,150 >> Droite? 1259 01:00:08,150 --> 01:00:10,690 Lorsque nous de-référence de ce pointeur, quand nous essayons d'accéder à cet emplacement, 1260 01:00:10,690 --> 01:00:13,140 nous obtenons une erreur - notre faute de segmentation. 1261 01:00:13,140 --> 01:00:15,800 Donc - 1262 01:00:15,800 --> 01:00:16,690 oops. 1263 01:00:16,690 --> 01:00:19,090 Nous allons arrêter de gdb. 1264 01:00:19,090 --> 01:00:20,160 Notre ligne - 1265 01:00:20,160 --> 01:00:22,990 notre problème - est juste ici sur cette ligne. 1266 01:00:22,990 --> 01:00:26,410 Et c'est un problème parce que de cette ligne. 1267 01:00:26,410 --> 01:00:31,780 >> Comment pouvons-nous créer une zone de est accessible en fread. 1268 01:00:31,780 --> 01:00:31,980 Droite? 1269 01:00:31,980 --> 01:00:35,190 Nous devons créer une boîte qui est un octet grand, la taille d'un caractère. 1270 01:00:35,190 --> 01:00:38,590 Mais nous avons besoin de cette boîte soit accessible lorsque cette fonction est exécutée. 1271 01:00:38,590 --> 01:00:39,390 Alors, où - 1272 01:00:39,390 --> 01:00:39,640 ouais. 1273 01:00:39,640 --> 01:00:40,440 Des idées? 1274 01:00:40,440 --> 01:00:43,615 >> ÉTUDIANT 60: Il suffit de régler comme caractère aléatoire. 1275 01:00:43,615 --> 01:00:49,150 1276 01:00:49,150 --> 01:00:51,640 Il suffit de faire égaux tampons carac le caractère. 1277 01:00:51,640 --> 01:00:53,795 Et puis, lorsque vous y avez tampon - 1278 01:00:53,795 --> 01:00:54,110 >> JASON HIRSCHHORN: Attendez. 1279 01:00:54,110 --> 01:00:55,110 Char buffer? 1280 01:00:55,110 --> 01:00:55,880 Donc, pas d'étoile? 1281 01:00:55,880 --> 01:00:56,390 >> ÉTUDIANT 60: Ouais. 1282 01:00:56,390 --> 01:00:58,560 Sortez l'étoile. 1283 01:00:58,560 --> 01:01:00,690 Égal à un caractère aléatoire. 1284 01:01:00,690 --> 01:01:01,460 >> JASON HIRSCHHORN: OK. 1285 01:01:01,460 --> 01:01:02,420 Alors donnez-moi un. 1286 01:01:02,420 --> 01:01:03,170 >> ÉTUDIANT 60: Comme un ou quelque chose. 1287 01:01:03,170 --> 01:01:06,160 Et puis, quand vous avez tampon là, vous utilisez un - 1288 01:01:06,160 --> 01:01:06,420 >> ÉTUDIANT 61: Star? 1289 01:01:06,420 --> 01:01:07,650 Oh non, l'esperluette. 1290 01:01:07,650 --> 01:01:09,000 >> ÉTUDIANT 60: Utiliser l'esperluette. 1291 01:01:09,000 --> 01:01:09,470 >> JASON HIRSCHHORN: OK. 1292 01:01:09,470 --> 01:01:11,320 Et qu'en est-il dans fwrite? 1293 01:01:11,320 --> 01:01:14,150 >> ÉTUDIANT 60: Utiliser l'esperluette nouveau. 1294 01:01:14,150 --> 01:01:14,320 >> JASON HIRSCHHORN: Très bien. 1295 01:01:14,320 --> 01:01:20,970 Donc votre idée est, nous allons créer un char et mettre quelque chose dedans, puis 1296 01:01:20,970 --> 01:01:22,612 écrire que l'omble. 1297 01:01:22,612 --> 01:01:23,760 >> ÉTUDIANT 60: Ouais. 1298 01:01:23,760 --> 01:01:25,916 >> JASON HIRSCHHORN: Qu'est-ce les gens pensent? 1299 01:01:25,916 --> 01:01:27,770 >> ÉTUDIANT 62: Il est alambiquée. 1300 01:01:27,770 --> 01:01:28,460 >> JASON HIRSCHHORN: OK. 1301 01:01:28,460 --> 01:01:29,760 Tirons-le. 1302 01:01:29,760 --> 01:01:35,720 Alors, cette fois, je vais tirer cela dans rouge sur la pile ici, puis nous 1303 01:01:35,720 --> 01:01:36,410 devront - 1304 01:01:36,410 --> 01:01:36,822 ooh! 1305 01:01:36,822 --> 01:01:38,060 Désolé. 1306 01:01:38,060 --> 01:01:45,930 Alors, cette fois, nous avons quelque chose qui s'appelle tampon, et il est sur la pile. 1307 01:01:45,930 --> 01:01:48,430 Corriger? 1308 01:01:48,430 --> 01:01:51,520 Et nous économisons en un, d'abord. 1309 01:01:51,520 --> 01:01:53,830 >> Ensuite, nous avons notre appel à fread. 1310 01:01:53,830 --> 01:02:01,300 Qu'est-ce que fread fait est qu'il prend un octet de notre dossier et met quelque part. 1311 01:02:01,300 --> 01:02:04,570 Il met dans quelle que soit la chose pointe vers. 1312 01:02:04,570 --> 01:02:09,130 Eh bien, avant que nous ayons cette adresse - 1313 01:02:09,130 --> 01:02:10,250 0x0. 1314 01:02:10,250 --> 01:02:13,349 Maintenant quelle adresse devons-nous? 1315 01:02:13,349 --> 01:02:14,650 >> ÉTUDIANT 63: Quel que soit le tampon d'adresse est. 1316 01:02:14,650 --> 01:02:15,970 >> JASON HIRSCHHORN: Quel que soit le tampon d'adresse est. 1317 01:02:15,970 --> 01:02:22,370 Il va probablement être quelque chose comme ça. 1318 01:02:22,370 --> 01:02:26,950 Probablement vais commencer par un b et une f, puis encore six autres 1319 01:02:26,950 --> 01:02:27,970 chiffres hexadécimaux. 1320 01:02:27,970 --> 01:02:28,480 Indifférent. 1321 01:02:28,480 --> 01:02:29,470 Certains adresse. 1322 01:02:29,470 --> 01:02:31,410 Et nous passons cette adresse po 1323 01:02:31,410 --> 01:02:34,790 >> Et nous allons mettre notre seul octet chose à cette adresse. 1324 01:02:34,790 --> 01:02:38,470 Nous allons donc mettre notre seul octet chose à l'intérieur ici. 1325 01:02:38,470 --> 01:02:40,800 Et puis nous allons écrire de ce qui est toujours à l'intérieur ici. 1326 01:02:40,800 --> 01:02:43,425 1327 01:02:43,425 --> 01:02:45,380 Quelqu'un at-il des questions à ce sujet? 1328 01:02:45,380 --> 01:02:50,990 1329 01:02:50,990 --> 01:02:54,690 Qui pense que ce code fonctionne? 1330 01:02:54,690 --> 01:02:56,020 >> Levez la main si vous pensez ce code ne fonctionnera. 1331 01:02:56,020 --> 01:02:57,270 Vous avez à prendre une position. 1332 01:02:57,270 --> 01:03:00,670 1333 01:03:00,670 --> 01:03:02,500 Et qui pense que ce code ne fonctionnera pas? 1334 01:03:02,500 --> 01:03:04,610 Levez la main. 1335 01:03:04,610 --> 01:03:06,750 Tout le monde devrait être levant la main. 1336 01:03:06,750 --> 01:03:07,670 OK. 1337 01:03:07,670 --> 01:03:09,390 Michael, où êtes-vous debout? 1338 01:03:09,390 --> 01:03:10,680 >> MICHAEL: Je ne peux pas décider. 1339 01:03:10,680 --> 01:03:12,070 En quelque sorte dans le milieu. 1340 01:03:12,070 --> 01:03:12,736 >> JASON HIRSCHHORN: Vous êtes dans le milieu. 1341 01:03:12,736 --> 01:03:13,092 Choisissez un. 1342 01:03:13,092 --> 01:03:14,400 >> MICHAEL: Je vais devoir foi et dire qu'il va travailler. 1343 01:03:14,400 --> 01:03:14,660 >> JASON HIRSCHHORN: OK. 1344 01:03:14,660 --> 01:03:16,047 Vous avez la foi et dire que cela fonctionne? 1345 01:03:16,047 --> 01:03:26,490 1346 01:03:26,490 --> 01:03:27,020 Qu'est-il arrivé? 1347 01:03:27,020 --> 01:03:28,270 >> [VOIX interposition] 1348 01:03:28,270 --> 01:03:35,170 1349 01:03:35,170 --> 01:03:35,950 >> JASON HIRSCHHORN: Pas de défaut de segment. 1350 01:03:35,950 --> 01:03:40,320 Comment pouvons-nous vérifier si deux choses sont égales? 1351 01:03:40,320 --> 01:03:42,060 Deux fichiers sont égaux. 1352 01:03:42,060 --> 01:03:43,300 >> ÉTUDIANT 64: Diff. 1353 01:03:43,300 --> 01:03:45,490 >> JASON HIRSCHHORN: Diff. 1354 01:03:45,490 --> 01:03:51,630 Contrôles diff pour les différences entre les deux dossiers, et si elle retourne 1355 01:03:51,630 --> 01:03:52,890 rien, ils sont identiques. 1356 01:03:52,890 --> 01:03:59,030 Et si nous nous ouvrons, nous obtenons notre fichier. 1357 01:03:59,030 --> 01:04:00,490 Alors que c'était la bonne solution. 1358 01:04:00,490 --> 01:04:01,780 Revenons à une fois de plus. 1359 01:04:01,780 --> 01:04:04,080 En fait, nous n'avons même pas besoin de l'initialiser. 1360 01:04:04,080 --> 01:04:05,520 >> Il serait sans doute chercher un peu propre si vous n'avez pas mis 1361 01:04:05,520 --> 01:04:07,680 quelque chose au hasard là-dedans. 1362 01:04:07,680 --> 01:04:13,070 Le point étant, vous avez besoin pour créer peu d'espace pour stocker quelque chose de 1363 01:04:13,070 --> 01:04:15,530 fread et prendre quelque chose de fwrite. 1364 01:04:15,530 --> 01:04:18,400 Et cette chose a dû être un locale variable sur la pile - vous 1365 01:04:18,400 --> 01:04:19,890 aurait pu malloc de l'espace. 1366 01:04:19,890 --> 01:04:23,030 >> Donc, nous pourrions avoir malloc écrit ici, et 1367 01:04:23,030 --> 01:04:25,420 qui aurait travaillé. 1368 01:04:25,420 --> 01:04:28,660 Et puis nous avons stockons nos choses quelque part sur le tas. 1369 01:04:28,660 --> 01:04:31,940 Mais c'est en fait, probablement, la solution la plus élégante. 1370 01:04:31,940 --> 01:04:34,490 Il suffit de créer un peu d'espace sur la pile pour que ces choses vont. 1371 01:04:34,490 --> 01:04:37,690 1372 01:04:37,690 --> 01:04:38,990 >> J'aurais deux autres commentaires. 1373 01:04:38,990 --> 01:04:44,650 Si vous deviez prendre son tour dans ce domaine, et puis obtenir marqué sur ce point, mes commentaires 1374 01:04:44,650 --> 01:04:47,400 serait la suivante. 1375 01:04:47,400 --> 01:04:54,300 Ce 1 est ici, pour moi, regardez comme nombres magiques. 1376 01:04:54,300 --> 01:04:56,860 Cette 1, en termes de fread, logique. 1377 01:04:56,860 --> 01:04:59,580 C'est le nombre de choses pour lire ou écrire. 1378 01:04:59,580 --> 01:05:03,740 >> Mais celui-ci devrait ici probablement quelque chose d'autre. 1379 01:05:03,740 --> 01:05:05,180 Alors, quelle est une solution? 1380 01:05:05,180 --> 01:05:06,545 >> ÉTUDIANT 65: Taille de l'octet. 1381 01:05:06,545 --> 01:05:10,100 1382 01:05:10,100 --> 01:05:11,080 >> JASON HIRSCHHORN: Comme ça? 1383 01:05:11,080 --> 01:05:13,130 >> ÉTUDIANT 65: Taille de l'omble. 1384 01:05:13,130 --> 01:05:13,820 >> JASON HIRSCHHORN: Taille de l'omble. 1385 01:05:13,820 --> 01:05:15,290 Ouais, l'octet n'est pas un type. 1386 01:05:15,290 --> 01:05:16,320 Donc, la taille des œuvres char. 1387 01:05:16,320 --> 01:05:30,270 Nous pourrions avoir, au sommet de notre code, # défini que. 1388 01:05:30,270 --> 01:05:33,410 Appelé quelque chose BYTE et c'est vraiment un caractère. 1389 01:05:33,410 --> 01:05:37,675 En fait, une approche encore mieux aurait pu être ce - 1390 01:05:37,675 --> 01:05:39,391 uint. 1391 01:05:39,391 --> 01:05:40,780 Quelqu'un sait-il ce que c'est? 1392 01:05:40,780 --> 01:05:44,388 1393 01:05:44,388 --> 01:05:44,840 >> Désolé. 1394 01:05:44,840 --> 01:05:46,090 Je l'ai arrière. 1395 01:05:46,090 --> 01:05:51,620 1396 01:05:51,620 --> 01:05:52,200 Attendez, non. 1397 01:05:52,200 --> 01:05:53,450 Quel chemin faut-il aller? 1398 01:05:53,450 --> 01:05:58,071 1399 01:05:58,071 --> 01:05:59,660 Quelqu'un sait-il ce que c'est? 1400 01:05:59,660 --> 01:06:00,950 Ouais. 1401 01:06:00,950 --> 01:06:05,650 >> ÉTUDIANT 67: Censé aider à normaliser dans les choses de systèmes qui 1402 01:06:05,650 --> 01:06:08,760 avoir - comme des entiers non signés qui ont de 8 octets? 1403 01:06:08,760 --> 01:06:11,785 >> JASON HIRSCHHORN: C'est tout à fait exact. 1404 01:06:11,785 --> 01:06:14,310 Sur des machines différentes, la taille d'un caractère - 1405 01:06:14,310 --> 01:06:15,180 généralement pas un caractère. 1406 01:06:15,180 --> 01:06:16,100 Chars sont généralement un octet. 1407 01:06:16,100 --> 01:06:19,590 Mais la taille des autres types de données sont différentes tailles sur un ordinateur 32 bits 1408 01:06:19,590 --> 01:06:21,370 par rapport à une machine 64 bits. 1409 01:06:21,370 --> 01:06:25,180 Un uint8_t est toujours 8 bits - 1410 01:06:25,180 --> 01:06:27,210 toujours un octet. 1411 01:06:27,210 --> 01:06:29,580 >> Et j'ai besoin de comprendre que fichier int en-tête standard. 1412 01:06:29,580 --> 01:06:35,040 Alors maintenant, cela aurait probablement été la meilleure façon d'écrire le code. 1413 01:06:35,040 --> 01:06:40,160 1414 01:06:40,160 --> 01:06:41,450 Donc je me débarrasser des nombres magiques. 1415 01:06:41,450 --> 01:06:44,690 Et j'ai aussi une plus logique tapez pour le tampon. 1416 01:06:44,690 --> 01:06:49,450 Ce n'est pas simplement un char, il est un octet, qui est ce que nous attendons qu'il soit. 1417 01:06:49,450 --> 01:06:53,400 >> Et ici, nous avons fait été un peu plus robuste. 1418 01:06:53,400 --> 01:06:55,190 Nous ne demandons pas un char, qui - 1419 01:06:55,190 --> 01:06:58,630 peut-être, qui sait - peut-être un autre taille sur des machines différentes. 1420 01:06:58,630 --> 01:07:02,025 Nous sommes en train de dire que c'est exactement un octet, toujours, quoi qu'il arrive. 1421 01:07:02,025 --> 01:07:05,810 Et si nous regardons ici, nous faisons cp. 1422 01:07:05,810 --> 01:07:08,340 Uh-oh. 1423 01:07:08,340 --> 01:07:09,590 Qu'est-il arrivé? 1424 01:07:09,590 --> 01:07:14,470 1425 01:07:14,470 --> 01:07:16,170 >> ÉTUDIANT 68: Il peut être activé. 1426 01:07:16,170 --> 01:07:17,880 >> JASON HIRSCHHORN: Quoi? 1427 01:07:17,880 --> 01:07:19,130 >> ÉTUDIANT 69: Est-ce? 1428 01:07:19,130 --> 01:07:21,940 1429 01:07:21,940 --> 01:07:25,080 >> ÉTUDIANT 70: Vous ne l'avez pas définir comme un type. 1430 01:07:25,080 --> 01:07:28,684 >> ÉTUDIANT 71: Mais il devrait être défini dans la norme. 1431 01:07:28,684 --> 01:07:29,934 >> ÉTUDIANT 72: Qu'est-ce qui se passe? 1432 01:07:29,934 --> 01:07:37,660 1433 01:07:37,660 --> 01:07:40,210 >> ÉTUDIANT 73: Devrait être définir tous les bouchons? 1434 01:07:40,210 --> 01:07:41,370 >> JASON HIRSCHHORN: il n'est donc pas # define. 1435 01:07:41,370 --> 01:07:45,490 En fait, dans ce cas, je suis allez utiliser typedef. 1436 01:07:45,490 --> 01:07:48,590 Parce que nous utilisons comme un type en un seul endroit. 1437 01:07:48,590 --> 01:07:51,990 Donc dans ce cas, nous voulons effectivement typedef comme nous l'impression d'un nouveau type 1438 01:07:51,990 --> 01:07:54,490 octet, et il est, pour l'essentiel, ce. 1439 01:07:54,490 --> 01:07:56,590 C'est un peu différent de # define. 1440 01:07:56,590 --> 01:08:02,740 >> Et maintenant, notre code fonctionne parfaitement. 1441 01:08:02,740 --> 01:08:05,230 Donc, encore une fois, # define prend quelque chose, remplace partout 1442 01:08:05,230 --> 01:08:06,780 l'autre chose. 1443 01:08:06,780 --> 01:08:07,920 C'est juste une macro - 1444 01:08:07,920 --> 01:08:09,420 raccourci pour se débarrasser des nombres magiques. 1445 01:08:09,420 --> 01:08:11,360 Mais dans ce cas, parce que nous sommes l'utiliser comme un type - 1446 01:08:11,360 --> 01:08:12,180 ici - 1447 01:08:12,180 --> 01:08:19,880 afin pour que cela fonctionne, nous avons besoin à typedef quelque octet est. 1448 01:08:19,880 --> 01:08:21,840 >> Et nous le définir ici. 1449 01:08:21,840 --> 01:08:24,750 Ce n'est pas une structure, c'est en fait juste un entier non signé. 1450 01:08:24,750 --> 01:08:27,680 C'est un octet. 1451 01:08:27,680 --> 01:08:31,910 Ce code sera disponible en ligne, et vous devriez tous avoir en ce moment. 1452 01:08:31,910 --> 01:08:33,830 >> Donc, nous avons - 1453 01:08:33,830 --> 01:08:34,250 parfait - 1454 01:08:34,250 --> 01:08:41,359 13 minutes pour aller problème réglé sur 5. 1455 01:08:41,359 --> 01:08:44,270 Je veux marcher à travers copy.c ensemble, et puis nous parlerons brièvement 1456 01:08:44,270 --> 01:08:47,120 sur les autres parties du problème posé. 1457 01:08:47,120 --> 01:08:48,899 Alors permettez-moi m'arrête copy.c. 1458 01:08:48,899 --> 01:09:03,930 1459 01:09:03,930 --> 01:09:08,810 Et le truc cool, c'est que nous avons fait déjà écrit beaucoup de ce code. 1460 01:09:08,810 --> 01:09:11,180 >> Le code que nous avons écrit littéralement juste est sorti de là où j'étais 1461 01:09:11,180 --> 01:09:13,120 écrit cela sur mon propre. 1462 01:09:13,120 --> 01:09:16,990 Mais ce n'est copy.c, constitue le fondement pour les deux premières parties de 1463 01:09:16,990 --> 01:09:22,340 le problème posé pour whodunit.c, qui vous devez écrire, et resize.c. 1464 01:09:22,340 --> 01:09:27,050 Recover.c, qui est le troisième et dernier partie de l'ensemble du problème, n'est pas 1465 01:09:27,050 --> 01:09:29,529 basé sur de ce fichier. 1466 01:09:29,529 --> 01:09:32,200 >> Vous allez avoir besoin d'écrire ce fichier, nous vous donnons un modèle pour que 1467 01:09:32,200 --> 01:09:34,620 déposer, mais il n'a rien à voir avec copy.c. 1468 01:09:34,620 --> 01:09:38,675 Mais parce que copy.c est le fondement de les deux premières parties, nous allons 1469 01:09:38,675 --> 01:09:42,000 à marcher à travers elle maintenant, si vous avez un bon sens de ce qu'il fait. 1470 01:09:42,000 --> 01:09:43,640 >> Et les commentaires donnent certains de loin. 1471 01:09:43,640 --> 01:09:45,120 Nous avons déjà écrit une partie de cette. 1472 01:09:45,120 --> 01:09:49,220 Tout d'abord, nous nous assurons nous obtenons trois arguments. 1473 01:09:49,220 --> 01:09:50,560 Ensuite, nous rappelant le nom du fichier. 1474 01:09:50,560 --> 01:09:52,960 Donc nous avons sauté cette étape lorsque nous avons codé notre truc - 1475 01:09:52,960 --> 01:09:54,700 quand notre cp. 1476 01:09:54,700 --> 01:09:56,750 Mais ici, ils font un peu plus propre. 1477 01:09:56,750 --> 01:09:59,350 >> Ils vérification pour s'assurer que deux fichiers sont bonnes, en 1478 01:09:59,350 --> 01:10:00,450 Outre les ouvrir. 1479 01:10:00,450 --> 01:10:04,760 Nous avons écrit tout ce code en ce moment, donc je suis ne vais pas m'attarder sur ce code. 1480 01:10:04,760 --> 01:10:09,670 Est à côté des choses qui est spécifique à les types de fichiers que nous utilisons, qui 1481 01:10:09,670 --> 01:10:12,240 sont des fichiers bitmap. 1482 01:10:12,240 --> 01:10:15,660 Fichiers bitmap ont des métadonnées qui leur sont associés. 1483 01:10:15,660 --> 01:10:20,190 >> Donc, le premier couple d'octets vous dire sur le fichier. 1484 01:10:20,190 --> 01:10:23,460 Ils ne sont pas les couleurs de le pixel dans l'image. 1485 01:10:23,460 --> 01:10:25,120 Ils vous disent sur le fichier. 1486 01:10:25,120 --> 01:10:28,220 Et si vous lisez l'ensemble du problème, vous aurez beaucoup plus d'informations 1487 01:10:28,220 --> 01:10:33,100 sur quels types de structures de métadonnées sont inclus avec des bitmaps. 1488 01:10:33,100 --> 01:10:39,350 >> Mais c'est pourquoi nous avons cette première ensemble de - ce code ici. 1489 01:10:39,350 --> 01:10:42,490 Nous lisons les métadonnées - 1490 01:10:42,490 --> 01:10:45,800 deux morceaux de métadonnées - le fichier tête et l'en-tête d'information. 1491 01:10:45,800 --> 01:10:51,030 Et nous vérifions certaines parties de celui-ci à assurez-vous qu'il est un fichier bitmap vrai 1492 01:10:51,030 --> 01:10:52,420 avant de poursuivre. 1493 01:10:52,420 --> 01:10:55,470 >> Et encore une fois, ce sont des détails que nous n'ont pas besoin d'aller dans maintenant. 1494 01:10:55,470 --> 01:10:57,720 Si vous lisez l'ensemble du problème, vous comprendrez les. 1495 01:10:57,720 --> 01:11:01,370 Longue histoire courte, ils sont tout simplement dire, il s'agit d'un fichier bitmap, et 1496 01:11:01,370 --> 01:11:02,810 ce qui confirme que. 1497 01:11:02,810 --> 01:11:05,180 >> Ensuite, nous écrivons les dans le fichier de rupture. 1498 01:11:05,180 --> 01:11:05,660 Nous voyons ici. 1499 01:11:05,660 --> 01:11:06,910 Nous écrivons pour le pointeur sur. 1500 01:11:06,910 --> 01:11:09,260 1501 01:11:09,260 --> 01:11:11,320 Ensuite, nous sommes déterminer rembourrage. 1502 01:11:11,320 --> 01:11:15,240 Encore une fois, comme c'est la particularité de un fichier bitmap, quelques lignes comprennent 1503 01:11:15,240 --> 01:11:16,840 un rembourrage à la fin. 1504 01:11:16,840 --> 01:11:19,000 Et si vous lisez l'ensemble du problème, vous en apprendrez plus sur rembourrage. 1505 01:11:19,000 --> 01:11:22,330 C'est la formule pour trouver rembourrage. 1506 01:11:22,330 --> 01:11:23,610 >> Important de se rappeler - 1507 01:11:23,610 --> 01:11:29,720 lorsque vous modifiez la taille d'un bitmap déposer, les changements de remplissage. 1508 01:11:29,720 --> 01:11:31,970 Lorsque vous modifiez la taille d'un déposer, les changements de remplissage. 1509 01:11:31,970 --> 01:11:34,310 Il ne va jamais être supérieur à 3 - 1510 01:11:34,310 --> 01:11:36,510 ça va être de 0 à 3 inclus. 1511 01:11:36,510 --> 01:11:38,930 Mais lorsque vous modifiez la taille de quelque chose, les changements de rembourrage. 1512 01:11:38,930 --> 01:11:47,100 >> Si je n'ai qu'un seul pixel de cette ligne, je besoin de trois octets de remplissage, car 1513 01:11:47,100 --> 01:11:51,190 chaque ligne doit être un multiple de quatre octets dans un fichier bitmap. 1514 01:11:51,190 --> 01:11:56,120 Mais si je double il, de passer d'un pixel à deux pixels, chacun d'eux, 1515 01:11:56,120 --> 01:11:59,510 disons, est un octet, alors j'ai besoin de deux octets de remplissage pour faire 1516 01:11:59,510 --> 01:12:00,970 que égal à quatre. 1517 01:12:00,970 --> 01:12:04,200 >> Alors, quand je change la taille de quelque chose, J'ai besoin de changer le montant 1518 01:12:04,200 --> 01:12:06,551 de rembourrage que j'ai. 1519 01:12:06,551 --> 01:12:08,100 Cela fait-il sens à tout le monde? 1520 01:12:08,100 --> 01:12:12,020 1521 01:12:12,020 --> 01:12:18,720 Ensuite, nous parcourons chaque rangée, ou à travers toutes les lignes. 1522 01:12:18,720 --> 01:12:21,400 Et puis nous parcourons chaque colonne de chaque ligne. 1523 01:12:21,400 --> 01:12:25,330 Nous traitons ce bitmap comme une grille, comme nous avons traité 1524 01:12:25,330 --> 01:12:26,490 le conseil dans 15. 1525 01:12:26,490 --> 01:12:29,200 >> Comme nous avons traité les briques quand nous les faire imprimer sur l'écran. 1526 01:12:29,200 --> 01:12:31,350 Une grille de lignes et de colonnes. 1527 01:12:31,350 --> 01:12:32,350 Puis - nous avons vu cela. 1528 01:12:32,350 --> 01:12:33,840 Nous avons en fait juste codé cela. 1529 01:12:33,840 --> 01:12:35,780 Nous avons créé un espace de stockage temporaire. 1530 01:12:35,780 --> 01:12:38,710 Nous lisons dans là, et puis nous écrire. 1531 01:12:38,710 --> 01:12:42,680 C'est exactement ce que nous venons de faire. 1532 01:12:42,680 --> 01:12:46,760 >> Ensuite, parce que j'ai dit chaque ligne se termine par une partie de rembourrage, nous 1533 01:12:46,760 --> 01:12:48,260 sauter que rembourrage - 1534 01:12:48,260 --> 01:12:51,000 l'ancienne rembourrage. 1535 01:12:51,000 --> 01:12:52,630 Et puis nous ajoutons de nouveau. 1536 01:12:52,630 --> 01:12:55,140 Dans ce cas, nous créons exactement le même fichier. 1537 01:12:55,140 --> 01:12:56,180 Nous ne faisons que copier. 1538 01:12:56,180 --> 01:12:57,700 Donc, cette ligne est un peu ridicule. 1539 01:12:57,700 --> 01:12:59,660 Nous pourrions littéralement juste mettre le rembourrage po 1540 01:12:59,660 --> 01:13:04,290 >> Mais si vous changez la taille du fichier, voulez-vous toujours cette ligne? 1541 01:13:04,290 --> 01:13:08,510 1542 01:13:08,510 --> 01:13:11,560 Donc, si nous changeons la taille d'un fichier, voulons-nous encore à sauter 1543 01:13:11,560 --> 01:13:12,810 sur le vieux rembourrage? 1544 01:13:12,810 --> 01:13:15,170 1545 01:13:15,170 --> 01:13:15,970 >> ÉTUDIANT 74: Oui. 1546 01:13:15,970 --> 01:13:17,090 >> JASON HIRSCHHORN: nous faisons donc. 1547 01:13:17,090 --> 01:13:19,290 Parce que ce, encore une fois, offres avec le fichier source. 1548 01:13:19,290 --> 01:13:21,570 Nous ne nous soucions pas le rembourrage à partir du fichier source. 1549 01:13:21,570 --> 01:13:23,410 Nous voulons aller à la ligne suivante. 1550 01:13:23,410 --> 01:13:28,850 Mais nous n'avons pas simplement remettons l'ancien quantité de remplissage. 1551 01:13:28,850 --> 01:13:31,540 Nous devons remettre l' nouvelle quantité de remplissage. 1552 01:13:31,540 --> 01:13:35,810 >> Alors, quand nous allons changer la taille d'un fichier, nous voulons toujours aller sur le 1553 01:13:35,810 --> 01:13:38,270 rembourrage dans l'ancien fichier - ce qui nous lisons depuis. 1554 01:13:38,270 --> 01:13:40,370 Mais ce que nous écrit, nous allons avoir besoin de remettre un peu différente 1555 01:13:40,370 --> 01:13:41,890 nombre de rembourrage qui nous avons déterminé. 1556 01:13:41,890 --> 01:13:42,780 Ouais. 1557 01:13:42,780 --> 01:13:44,550 >> ÉTUDIANT 75: L'ordre de ces deux lignes n'a pas d'importance, non? 1558 01:13:44,550 --> 01:13:46,160 Parce que vous manipulez différents fichiers. 1559 01:13:46,160 --> 01:13:46,620 >> JASON HIRSCHHORN: Exactement. 1560 01:13:46,620 --> 01:13:48,220 L'ordre de ces deux lignes n'a pas d'importance. 1561 01:13:48,220 --> 01:13:49,790 Nous écrivons cette ligne. 1562 01:13:49,790 --> 01:13:51,430 C'est ici pour le fichier nous écrit. 1563 01:13:51,430 --> 01:13:54,370 C'est important, si nous obtenons l' bonne quantité de rembourrage. 1564 01:13:54,370 --> 01:13:57,560 Ce doit composer avec le fichier en. 1565 01:13:57,560 --> 01:13:58,560 Nous voulons aller directement sur le rembourrage. 1566 01:13:58,560 --> 01:13:59,470 >> Nous ne voulons pas de lire - 1567 01:13:59,470 --> 01:14:01,500 si nous lisons un octet à la fois, nous ne se soucient pas de ces octets de remplissage. 1568 01:14:01,500 --> 01:14:04,070 Nous voulons passer à la ligne suivante. 1569 01:14:04,070 --> 01:14:11,800 Enfin, tout comme Lucy donné pour nous, nous fermons les fichiers et retourner 0. 1570 01:14:11,800 --> 01:14:13,890 C'est donc copy.c. 1571 01:14:13,890 --> 01:14:17,850 Et nous avons écrit - nous avons passé la plupart de section écrivant ceci, essentiellement. 1572 01:14:17,850 --> 01:14:18,740 >> Vous avez fait cela. 1573 01:14:18,740 --> 01:14:22,440 Donc, j'espère que vous avez un bon sens de ce qui se passe ici. 1574 01:14:22,440 --> 01:14:25,890 La grande différence, honnêtement, est juste cette première partie qui traite de 1575 01:14:25,890 --> 01:14:29,970 particularités de fichiers bitmap. 1576 01:14:29,970 --> 01:14:33,570 Donc, je n'ai que ma diapositive suivante, que devons-nous faire? 1577 01:14:33,570 --> 01:14:35,510 Eh bien, nous allons réfléchir à polar. 1578 01:14:35,510 --> 01:14:38,080 >> Et pour quelqu'un qui a lu par le problème réglé, que faisons-nous 1579 01:14:38,080 --> 01:14:41,410 besoin de faire en polar? 1580 01:14:41,410 --> 01:14:42,080 Simplement. 1581 01:14:42,080 --> 01:14:42,460 Aleja. 1582 01:14:42,460 --> 01:14:48,570 >> ALEJA: Pouvez-vous prendre la partie de chaque pixel qui dénote rouge. 1583 01:14:48,570 --> 01:14:49,730 Et puis - 1584 01:14:49,730 --> 01:14:50,730 sorte de? 1585 01:14:50,730 --> 01:14:51,860 >> JASON HIRSCHHORN: OK. 1586 01:14:51,860 --> 01:14:54,460 Alors, prenez la part de chaque pixel qui dénote rouge. 1587 01:14:54,460 --> 01:14:57,234 C'est proche, mais pas la totalité. 1588 01:14:57,234 --> 01:14:59,780 >> ÉTUDIANT 76: Eh bien, il ya différentes façons de le faire. 1589 01:14:59,780 --> 01:14:59,870 >> JASON HIRSCHHORN: OK. 1590 01:14:59,870 --> 01:15:03,070 Donnez-moi une seule façon. 1591 01:15:03,070 --> 01:15:08,240 >> ÉTUDIANT 76: Prenez tout le rouge, et alors mettre l'accent sur le bleu et le vert. 1592 01:15:08,240 --> 01:15:10,010 >> JASON HIRSCHHORN: OK. 1593 01:15:10,010 --> 01:15:11,830 Donc, compte tenu de ces deux façons - 1594 01:15:11,830 --> 01:15:15,210 il semble que nous lui donnons un pixel, il a un niveau de rouge, bleu et vert. 1595 01:15:15,210 --> 01:15:19,350 Nous voulons changer les niveaux relatifs de le rouge, le bleu et le vert, selon 1596 01:15:19,350 --> 01:15:20,740 sur ce pixel. 1597 01:15:20,740 --> 01:15:28,380 Où dans ce code devrions-nous changer le rouge par rapport, bleu, et vert 1598 01:15:28,380 --> 01:15:29,720 les niveaux d'un pixel donné. 1599 01:15:29,720 --> 01:15:30,600 Après nous avons lu - 1600 01:15:30,600 --> 01:15:32,520 avant que nous écrivons? 1601 01:15:32,520 --> 01:15:34,564 Donnez-moi le numéro de ligne. 1602 01:15:34,564 --> 01:15:35,950 >> ÉTUDIANTS DE NOMBREUSES: 83. 1603 01:15:35,950 --> 01:15:37,320 >> JASON HIRSCHHORN: 83. 1604 01:15:37,320 --> 01:15:38,570 Donc ici. 1605 01:15:38,570 --> 01:15:40,830 1606 01:15:40,830 --> 01:15:45,710 Pour polar, le code que vous devez écriture devrait tous aller là. 1607 01:15:45,710 --> 01:15:47,640 Et c'est le seul code vous devez écrire. 1608 01:15:47,640 --> 01:15:51,520 Parce que, comme nous l'avons entendu, tout ce que vous devez faire est de changer les bleu relative, 1609 01:15:51,520 --> 01:15:54,420 les niveaux de rouge, vert et de chaque pixel. 1610 01:15:54,420 --> 01:15:58,250 >> Vous l'avez lu dans, et maintenant vous êtes aller à écrire. 1611 01:15:58,250 --> 01:16:03,100 Comment puis-je obtenir - si j'ai cette chose appelé triple, ici, et il est de 1612 01:16:03,100 --> 01:16:04,570 tapez RGBTRIPLE - 1613 01:16:04,570 --> 01:16:08,650 bien, si nous avons examiné dans bmp.h, ce qui est RGBTRIPLE? 1614 01:16:08,650 --> 01:16:11,450 1615 01:16:11,450 --> 01:16:12,700 >> ÉTUDIANT 77: C'est une structure. 1616 01:16:12,700 --> 01:16:17,440 1617 01:16:17,440 --> 01:16:18,900 >> JASON HIRSCHHORN: RGBTRIPLE est une structure. 1618 01:16:18,900 --> 01:16:22,330 Nous voyons que jusque ici. 1619 01:16:22,330 --> 01:16:26,600 Et si je voulais l'accès, par exemple, le niveau rouge de la structure, comment puis-je 1620 01:16:26,600 --> 01:16:30,005 accéder au niveau rouge de cette structure? 1621 01:16:30,005 --> 01:16:37,280 >> [CLASSE MURMURES] 1622 01:16:37,280 --> 01:16:38,530 >> ÉTUDIANT 78: RGBTRIPLE.rgbtred? 1623 01:16:38,530 --> 01:16:47,250 1624 01:16:47,250 --> 01:16:48,856 >> JASON HIRSCHHORN: Est-ce exact? 1625 01:16:48,856 --> 01:16:53,040 >> ÉTUDIANT 79: Il devrait être triple point, au lieu de RGBTRIPLE point? 1626 01:16:53,040 --> 01:16:54,120 >> JASON HIRSCHHORN: Triple. 1627 01:16:54,120 --> 01:16:56,700 Triple est la variable locale, de sorte ici, il n'y a pas de pointeurs ici. 1628 01:16:56,700 --> 01:16:58,400 Donc, nous utilisons simplement la notation par points. 1629 01:16:58,400 --> 01:17:00,480 Cela me donnera le niveau de rouge. 1630 01:17:00,480 --> 01:17:06,180 Si je veux changer, je viens de mettre en il égale à quelque chose de différent. 1631 01:17:06,180 --> 01:17:13,190 Encore une fois, cette ligne de code accède cette variable à l'intérieur de cette structure, et 1632 01:17:13,190 --> 01:17:15,070 nous pouvons mettre à quelque chose de nouveau. 1633 01:17:15,070 --> 01:17:20,040 >> Donc, pour polar, encore une fois, ce n'est, en substance, ce que nous devons faire. 1634 01:17:20,040 --> 01:17:21,170 Très simple. 1635 01:17:21,170 --> 01:17:25,020 Il suffit de changer quelques niveaux relatifs, et c'est là que le code va. 1636 01:17:25,020 --> 01:17:27,720 Redimensionner, d'autre part, est un peu plus compliqué. 1637 01:17:27,720 --> 01:17:30,900 En fait, redimensionnement est probablement le plus délicate partie de ce problème réglé. 1638 01:17:30,900 --> 01:17:32,720 Nous avons trois minutes pour aller au-dessus. 1639 01:17:32,720 --> 01:17:34,910 >> Mais encore une fois, nous avons déjà écrit plus de ce code, de sorte que nous 1640 01:17:34,910 --> 01:17:36,500 devrait être assez familier. 1641 01:17:36,500 --> 01:17:40,750 Quelles sont les choses que nous voulons faire dans redimensionner, si vous avez lu au cours de la 1642 01:17:40,750 --> 01:17:43,470 problème réglé? 1643 01:17:43,470 --> 01:17:45,290 Si vous me les donnez, nous peut en parler. 1644 01:17:45,290 --> 01:17:47,340 Quelles sont les choses que nous voulons faire? 1645 01:17:47,340 --> 01:17:47,970 >> ÉTUDIANT 80: verticalement - 1646 01:17:47,970 --> 01:17:52,360 si vous avez de redimensionner horizontalement il, mais redimensionner verticalement aussi bien? 1647 01:17:52,360 --> 01:17:58,475 >> JASON HIRSCHHORN: Donc un si on nous donne pixel, et nous voulons redimensionner en un 1648 01:17:58,475 --> 01:18:03,460 facteur de deux, il doit maintenant être redimensionnée horizontalement et redimensionnée 1649 01:18:03,460 --> 01:18:05,220 verticalement. 1650 01:18:05,220 --> 01:18:06,640 Cela fait-il sens? 1651 01:18:06,640 --> 01:18:07,060 Ouais. 1652 01:18:07,060 --> 01:18:09,300 Alors que c'est probablement la plus grand défi. 1653 01:18:09,300 --> 01:18:10,430 Et nous en parlerons dans une seconde. 1654 01:18:10,430 --> 01:18:11,065 Ouais. 1655 01:18:11,065 --> 01:18:15,270 >> ÉTUDIANT 81: La façon dont je pensais avez-vous été besoin de l'afficher - 1656 01:18:15,270 --> 01:18:15,490 >> JASON HIRSCHHORN: Attendez. 1657 01:18:15,490 --> 01:18:17,580 Ne nous dites pas ce que vous avez fait. 1658 01:18:17,580 --> 01:18:20,620 Nous allons parler de logique. 1659 01:18:20,620 --> 01:18:21,870 >> ÉTUDIANT 81: OK. 1660 01:18:21,870 --> 01:18:25,090 1661 01:18:25,090 --> 01:18:27,410 Quelle était la question? 1662 01:18:27,410 --> 01:18:28,892 >> JASON HIRSCHHORN: Vous venez de levé la main. 1663 01:18:28,892 --> 01:18:31,600 Il n'était pas question. 1664 01:18:31,600 --> 01:18:32,520 Permettez-moi de présenter. 1665 01:18:32,520 --> 01:18:34,560 Permettez-moi de discuter brièvement. 1666 01:18:34,560 --> 01:18:38,400 Donc, nous avons un pixel, nous voulons reproduire, à la fois horizontalement et 1667 01:18:38,400 --> 01:18:39,360 verticalement. 1668 01:18:39,360 --> 01:18:48,920 Donc, idéalement, ce que nous faisons ici, c'est que nous lire dans notre pixel, nous l'écrivons 1669 01:18:48,920 --> 01:18:51,690 mais beaucoup de fois. 1670 01:18:51,690 --> 01:18:54,720 >> Mais nous avons notre truc ici, parce alors nous voulons passer à la 1671 01:18:54,720 --> 01:18:57,660 ligne suivante et écrire à l' au début de la ligne suivante. 1672 01:18:57,660 --> 01:19:02,960 Donc, si nous voulons reproduire à la fois horizontalement et verticalement, ce qui est 1673 01:19:02,960 --> 01:19:05,050 une bonne façon de le faire - 1674 01:19:05,050 --> 01:19:06,780 un bon cependant de faire cela? 1675 01:19:06,780 --> 01:19:11,950 Donc nous n'avons pas besoin de chercher constamment autour de notre fichier de placer les choses. 1676 01:19:11,950 --> 01:19:14,360 >> Cette question pourrait ne pas avoir fait sens, mais je pense que un 1677 01:19:14,360 --> 01:19:15,800 répondre à cela aidera. 1678 01:19:15,800 --> 01:19:17,210 >> ÉTUDIANT 82: Créer un tableau? 1679 01:19:17,210 --> 01:19:20,090 >> JASON HIRSCHHORN: Alors réfléchissons de chaque fichier comme une ligne. 1680 01:19:20,090 --> 01:19:22,550 Pensons en termes de lignes. 1681 01:19:22,550 --> 01:19:26,670 Si nous avons notre première ligne de notre petit image, nous pouvons faire de cette ligne 1682 01:19:26,670 --> 01:19:30,640 dans une grande ligne d'une grande image, puis reproduire cette ligne mais 1683 01:19:30,640 --> 01:19:34,250 plusieurs fois il a besoin pour être reproduit, plutôt que d'aller pixel par pixel, 1684 01:19:34,250 --> 01:19:37,260 qui obtient déroutant quand le traitement des dossiers. 1685 01:19:37,260 --> 01:19:38,730 >> Parce que si nous avions - 1686 01:19:38,730 --> 01:19:41,260 Je suis à court d'espace. 1687 01:19:41,260 --> 01:19:46,490 Si c'est notre fichier, et nous l'avons un pixel, et nous voulons mettre 1688 01:19:46,490 --> 01:19:49,840 là, nous avons encore des choses qui ont besoin d'aller là-bas quand nous sommes 1689 01:19:49,840 --> 01:19:51,450 l'écriture et la création de notre nouveau fichier - 1690 01:19:51,450 --> 01:19:53,250 notre dossier, c'est deux fois plus grand. 1691 01:19:53,250 --> 01:19:56,820 >> Mais il est vraiment difficile avec des fonctions de fichiers pour sauter autour de nouvelles lignes 1692 01:19:56,820 --> 01:20:00,260 comme ça, et puis revenir ici et mettre les choses là-dedans. 1693 01:20:00,260 --> 01:20:04,500 Il est presque impossible de faire quelque chose comme ça, si cela fait sens. 1694 01:20:04,500 --> 01:20:10,180 Donc, si nous pensons en termes de lignes, nous pouvons prendre notre ligne, puis le mettre - 1695 01:20:10,180 --> 01:20:11,720 reproduire rangées verticalement. 1696 01:20:11,720 --> 01:20:15,860 >> Et c'est ainsi que nous traitons avec le redimensionnement verticalement plutôt qu'horizontalement. 1697 01:20:15,860 --> 01:20:18,810 C'était un peu rapide, et un peu déroutant. 1698 01:20:18,810 --> 01:20:22,375 Malheureusement, notre temps est écoulé. 1699 01:20:22,375 --> 01:20:27,340 Je vais rester à l'extérieur pour ceux d'entre vous ici qui ont des questions au sujet de la 1700 01:20:27,340 --> 01:20:30,500 ensemble de problèmes, y compris les récupérer. 1701 01:20:30,500 --> 01:20:32,320 >> Donc, nous allons lever la séance pour le moment. 1702 01:20:32,320 --> 01:20:34,480 Et encore une fois, si vous avez des questions, nous pouvons discuter l'extérieur. 1703 01:20:34,480 --> 01:20:38,294