1 00:00:00,000 --> 00:00:07,810 2 00:00:07,810 --> 00:00:09,840 >> JASON Hirschhorn: Chào tất cả mọi người, để Tuần 6. 3 00:00:09,840 --> 00:00:14,790 Tôi rất vui khi thấy tất cả các bạn còn sống và cũng sau đố 0, bởi vì tôi biết rằng 4 00:00:14,790 --> 00:00:15,810 là một chút thô. 5 00:00:15,810 --> 00:00:18,370 Nhưng may mắn thay, tất cả các bạn đã làm cực kỳ tốt. 6 00:00:18,370 --> 00:00:21,680 Và vì vậy đó là tuyệt vời. 7 00:00:21,680 --> 00:00:25,840 Nếu bạn đang ở trong phần của tôi, tôi đã cho hầu hết của bạn sao câu đố của bạn đã. 8 00:00:25,840 --> 00:00:28,050 >> Một vài bạn, tôi gặp sau giờ học. 9 00:00:28,050 --> 00:00:32,360 Và nếu bạn là một sinh viên mở rộng và bạn không nhận được bài kiểm tra của bạn trở lại 10 00:00:32,360 --> 00:00:35,490 Chưa hết, TF của bạn có thể làm việc trên nó và phân loại nó, và sẽ nhận được nó trở lại 11 00:00:35,490 --> 00:00:36,490 cho bạn một thời gian ngắn. 12 00:00:36,490 --> 00:00:39,650 Vì vậy, sinh viên mở rộng của tôi là ai xem ngay bây giờ - hy vọng sống - 13 00:00:39,650 --> 00:00:42,880 Tôi sẽ nhận được câu đố của bạn một thời gian ngắn là tốt. 14 00:00:42,880 --> 00:00:45,670 >> Chương trình nghị sự của chúng tôi cho ngày hôm nay là như sau. 15 00:00:45,670 --> 00:00:50,170 Đầu tiên, chúng ta sẽ đi qua một số nguồn tài nguyên mà CS50 cung cấp cho bạn. 16 00:00:50,170 --> 00:00:54,590 Chúng ta sẽ đi qua Câu đố 0 tiếp theo, và Tôi sẽ trả lời bất kỳ câu hỏi ai 17 00:00:54,590 --> 00:00:57,360 có về các vấn đề cụ thể. 18 00:00:57,360 --> 00:01:02,050 Và sau đó, chúng tôi sẽ được đi qua tập tin I / O và vấn đề thiết lập 5. 19 00:01:02,050 --> 00:01:07,360 Hai chủ đề cuối cùng sẽ chiếm phần lớn trong phần hôm nay. 20 00:01:07,360 --> 00:01:11,680 >> Tôi đưa danh sách này lên mỗi tuần như một lời nhắc nhở cho tất cả các bạn, nhưng cốt lõi 21 00:01:11,680 --> 00:01:14,650 phần, chúng tôi chỉ có 90 phút - chúng tôi không thể để trang trải tất cả mọi thứ mà tôi 22 00:01:14,650 --> 00:01:16,280 rất thích để trang trải cho các bạn. 23 00:01:16,280 --> 00:01:21,170 Nhưng chúng tôi có một tấn các nguồn lực cho bạn rút ra sau khi khi bạn nhận được để biết 24 00:01:21,170 --> 00:01:24,000 vật liệu và làm việc thông qua vấn đề của bạn đặt ra. 25 00:01:24,000 --> 00:01:30,810 >> Một lời nhắc nhở rằng tôi có một văn bản trực tuyến hộp, thiết lập để bạn có thể điền vào nếu bạn 26 00:01:30,810 --> 00:01:33,250 có bất kỳ thông tin phản hồi cho tôi, cả tích cực và 27 00:01:33,250 --> 00:01:35,180 xây dựng, về phần. 28 00:01:35,180 --> 00:01:38,600 URL mà nằm ngay ở đây. 29 00:01:38,600 --> 00:01:43,250 Vì vậy, hãy dành một lúc nếu bạn có bất kỳ thông tin phản hồi, cho dù trong phần, 30 00:01:43,250 --> 00:01:48,030 hoặc sau, hoặc sau khi bạn xem video trực tuyến, để cung cấp cho tôi thông tin phản hồi của bạn. 31 00:01:48,030 --> 00:01:52,100 Tôi thực sự đánh giá cao bất kỳ và tất cả của nó. 32 00:01:52,100 --> 00:01:55,730 >> Vì vậy, tôi đã có cuộc trò chuyện nhỏ với rất nhiều của tôi 33 00:01:55,730 --> 00:01:59,350 sinh viên trong suốt tuần - như tôi tay câu đố trở lại, nói về 34 00:01:59,350 --> 00:02:01,480 Tất nhiên, nhìn thấy như thế nào bạn đang làm. 35 00:02:01,480 --> 00:02:05,120 Và một chủ đề đã đưa ra hơn và hơn khi nói về - trong 36 00:02:05,120 --> 00:02:05,660 đặc biệt - 37 00:02:05,660 --> 00:02:07,710 vấn đề đặt ra. 38 00:02:07,710 --> 00:02:13,090 Và tôi đã đóng gói chủ đề mà trên bảng ngay bây giờ. 39 00:02:13,090 --> 00:02:16,630 >> Về cơ bản, có sự khác biệt giữa biến trong cái gì đó là 40 00:02:16,630 --> 00:02:19,590 thực hiện một cách chính xác và một cái gì đó được thực hiện tốt. 41 00:02:19,590 --> 00:02:22,920 Hầu hết mọi người đã và đang làm tuyệt vời về tính đúng đắn - 42 00:02:22,920 --> 00:02:25,460 5 hoặc 4 trên tất cả các psets. 43 00:02:25,460 --> 00:02:27,930 Hầu hết mọi người đang nhận được những tất cả thời gian. 44 00:02:27,930 --> 00:02:31,150 >> Tuy nhiên, chỉ vì bạn đã thực hiện một cái gì đó đúng không có nghĩa là bạn đã 45 00:02:31,150 --> 00:02:34,450 làm điều gì đó như thanh lịch, hoặc hiệu quả, hoặc như sạch như bạn 46 00:02:34,450 --> 00:02:35,270 có thể thực hiện nó. 47 00:02:35,270 --> 00:02:36,790 Và đó là những gì thiết kế - 48 00:02:36,790 --> 00:02:39,230 và đến một mức độ, phong cách ít - 49 00:02:39,230 --> 00:02:40,450 trục được cho. 50 00:02:40,450 --> 00:02:45,130 Vì vậy, tôi đẩy tất cả các bạn, và TF khác đang đẩy mạnh các bạn, không chỉ lần lượt 51 00:02:45,130 --> 00:02:48,320 trong những điều mà là chính xác, nhưng biến trong những điều được mã hóa tốt. 52 00:02:48,320 --> 00:02:53,060 >> Không làm không cần thiết cho các vòng, không tính toán lại nếu biến 53 00:02:53,060 --> 00:02:53,800 bạn không phải. 54 00:02:53,800 --> 00:02:58,520 Ví dụ, nhìn lại vấn đề thiết lập 4, khi đặt những viên gạch trên 55 00:02:58,520 --> 00:03:03,070 màn hình, mỗi dòng - mỗi viên gạch trong một hàng cho có cùng tọa độ y - 56 00:03:03,070 --> 00:03:04,390 cùng một chiều cao phối hợp. 57 00:03:04,390 --> 00:03:07,930 >> Vì vậy, y phối hợp không cần phải được tính toán bên trong nội thất 58 00:03:07,930 --> 00:03:11,070 lồng nhau cho vòng lặp mà bạn có thể sử dụng đặt những viên gạch trên màn hình. 59 00:03:11,070 --> 00:03:14,030 Nó chỉ cần được tính toán mỗi khi bạn chuyển sang một hàng, hoặc 60 00:03:14,030 --> 00:03:15,200 di chuyển xuống liên tiếp. 61 00:03:15,200 --> 00:03:19,760 Vì vậy, nói rằng nếu có 10 viên gạch trong một hàng, mỗi viên gạch có thể có cùng một 62 00:03:19,760 --> 00:03:22,260 y phối hợp, và rằng y phối hợp chỉ có thể được tính 63 00:03:22,260 --> 00:03:23,550 một lần cho tất cả những người. 64 00:03:23,550 --> 00:03:27,810 >> Nó không cần phải được tính toán 10 lần, cũng không có nhu cầu tính toán 65 00:03:27,810 --> 00:03:30,220 xảy ra trong thực tế chức năng cuộc gọi - 66 00:03:30,220 --> 00:03:33,020 các chức năng gọi gracked mới. 67 00:03:33,020 --> 00:03:37,820 Vì vậy, nếu đó là một chút bối rối cho bạn, quát hơn, những điều mà 68 00:03:37,820 --> 00:03:40,730 không cần phải xảy ra mỗi lần duy nhất bạn đi qua một vòng lặp FOR không nên 69 00:03:40,730 --> 00:03:42,900 đặt bên trong vòng lặp FOR, và không nên xảy ra mỗi khi bạn đi 70 00:03:42,900 --> 00:03:44,080 thông qua các vòng lặp FOR. 71 00:03:44,080 --> 00:03:49,270 >> Một ví dụ khác thiết kế tốt, chúng tôi thấy trong 3 tuần cho 15, bạn có thể giữ 72 00:03:49,270 --> 00:03:50,500 theo dõi các số không. 73 00:03:50,500 --> 00:03:53,600 Vì vậy, khi bạn khởi tạo hội đồng quản trị, bạn tiết kiệm - trong một biến toàn cầu, có lẽ - 74 00:03:53,600 --> 00:03:56,140 x và y tọa độ của không. 75 00:03:56,140 --> 00:03:57,520 Và sau đó bất cứ khi nào bạn - 76 00:03:57,520 --> 00:04:00,310 trong chức năng di chuyển của bạn, bất cứ khi nào bạn thực hiện một động thái thành công, bạn cập nhật 77 00:04:00,310 --> 00:04:02,040 vị trí của số không. 78 00:04:02,040 --> 00:04:06,240 >> Mà bạn sẽ tiết kiệm từ việc làm lồng nhau cho vòng xem xét thông qua 79 00:04:06,240 --> 00:04:10,700 hội đồng quản trị tất cả các thời gian trong chức năng di chuyển của bạn và tìm thấy những bằng không, hoặc tìm gạch, 80 00:04:10,700 --> 00:04:12,460 và sau đó kiểm tra những gì bên cạnh nó. 81 00:04:12,460 --> 00:04:16,329 Thay vào đó, bạn có vị trí của bằng không, bạn chỉ có thể xem trên, dưới, 82 00:04:16,329 --> 00:04:21,160 và bên trái và bên phải của nó, để tìm ngói bạn đang tìm kiếm. 83 00:04:21,160 --> 00:04:24,970 >> Vì vậy, trong điều khoản của chương trình chúng tôi viết, họ sẽ không bao giờ đủ lớn 84 00:04:24,970 --> 00:04:28,580 rằng một số các quyết định thiết kế đang thực sự sẽ cản trở bạn 85 00:04:28,580 --> 00:04:31,670 chương trình, hoặc làm cho nó chạy chậm hơn, hoặc thậm chí chạy ra khỏi bộ nhớ. 86 00:04:31,670 --> 00:04:35,030 Nhưng chúng tôi vẫn đẩy các bạn viết như thanh lịch và 87 00:04:35,030 --> 00:04:36,450 mã hiệu quả nhất có thể. 88 00:04:36,450 --> 00:04:39,910 >> Vì vậy, nếu bạn làm sẽ chỉ viết những điều có một lớn hơn đáng kể 89 00:04:39,910 --> 00:04:44,660 phạm vi, họ sẽ được viết với tốt thiết kế ngoài việc được chính xác. 90 00:04:44,660 --> 00:04:46,300 Vì vậy, một số bạn có đưa ra ngoài. 91 00:04:46,300 --> 00:04:48,560 Đó là điều mà chúng tôi đang tìm kiếm - một cái gì đó chúng ta sẽ tiếp tục 92 00:04:48,560 --> 00:04:49,840 đẩy các bạn vào. 93 00:04:49,840 --> 00:04:52,460 >> Nếu bạn có bất kỳ câu hỏi về thiết kế các chương trình của bạn, cảm thấy tự do 94 00:04:52,460 --> 00:04:56,870 để tiếp cận với tôi, và tôi hạnh phúc đến đi bộ qua chương trình của bạn với bạn, 95 00:04:56,870 --> 00:05:01,320 và chỉ ra một số thiết kế quyết định bạn đã thực hiện, và cung cấp cho bạn một số 96 00:05:01,320 --> 00:05:06,240 đề xuất về cách làm cho ngay cả quyết định thiết kế tốt hơn. 97 00:05:06,240 --> 00:05:08,870 >> Vì vậy, chúng ta sẽ di chuyển trên để nói về đố 0. 98 00:05:08,870 --> 00:05:11,300 Trước khi chúng tôi làm điều đó, không ai có thắc mắc về những gì 99 00:05:11,300 --> 00:05:14,252 Tôi đã được bảo hiểm cho đến nay? 100 00:05:14,252 --> 00:05:21,500 >> [Xào xạc tiếng ồn] 101 00:05:21,500 --> 00:05:22,750 >> JASON Hirschhorn: Bảy giây. 102 00:05:22,750 --> 00:05:23,250 OK. 103 00:05:23,250 --> 00:05:24,970 Hãy nói về đố 0 một chút. 104 00:05:24,970 --> 00:05:26,700 Hầu hết các bạn có đố của bạn 0 trở lại. 105 00:05:26,700 --> 00:05:29,820 Nếu bạn không, hy vọng Bạn có nhớ nó một chút. 106 00:05:29,820 --> 00:05:34,770 Nhưng nếu bạn đã thực hiện đố 0, sau đó bạn cũng có quyền truy cập vào các file PDF trực tuyến 107 00:05:34,770 --> 00:05:35,890 các giải pháp mẫu. 108 00:05:35,890 --> 00:05:39,480 >> Không ai có bất kỳ câu hỏi trước khi chúng tôi nhảy vào vật chất của tuần về 109 00:05:39,480 --> 00:05:41,520 một vấn đề cụ thể trên quiz 0 - 110 00:05:41,520 --> 00:05:44,630 tại sao câu trả lời là nó là gì? 111 00:05:44,630 --> 00:05:47,255 Có ai nhầm lẫn về bất cứ điều gì? 112 00:05:47,255 --> 00:05:50,230 Thậm chí nếu bạn có vấn đề ngay, nhưng chỉ muốn tôi giải thích nó một chút 113 00:05:50,230 --> 00:05:52,640 hơn, tôi rất vui để làm như vậy bây giờ. 114 00:05:52,640 --> 00:05:57,800 >> Vì vậy, tôi đã yêu cầu các bạn để chuẩn bị sẵn sàng với một số 115 00:05:57,800 --> 00:05:59,440 Câu hỏi suy nghĩ về 0. 116 00:05:59,440 --> 00:06:02,660 Vì vậy, những người muốn có được chúng tôi bắt đầu với một câu hỏi hay 117 00:06:02,660 --> 00:06:04,655 Câu hỏi nhận xét về 0? 118 00:06:04,655 --> 00:06:07,435 119 00:06:07,435 --> 00:06:10,410 >> [Giấy xào xạc] 120 00:06:10,410 --> 00:06:11,470 >> JASON Hirschhorn: Không phải ai đã hoàn hảo. 121 00:06:11,470 --> 00:06:12,720 Vì vậy, tôi biết [LAUGHS] 122 00:06:12,720 --> 00:06:15,950 có phải là một số câu hỏi Câu hỏi về 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 Vâng. 126 00:06:29,210 --> 00:06:29,600 Ompica. 127 00:06:29,600 --> 00:06:30,520 >> OMPICA: Số 10. 128 00:06:30,520 --> 00:06:33,560 >> JASON Hirschhorn: Số 10. 129 00:06:33,560 --> 00:06:35,400 Mà một số là 10? 130 00:06:35,400 --> 00:06:35,840 >> OMPICA: Các - 131 00:06:35,840 --> 00:06:36,420 >> JASON Hirschhorn: Tôi haven't - 132 00:06:36,420 --> 00:06:37,670 >> OMPICA: Các bao gồm - 133 00:06:37,670 --> 00:06:40,060 134 00:06:40,060 --> 00:06:42,180 >> JASON Hirschhorn: Số 10 lên tám i - viết tám đến tôi? 135 00:06:42,180 --> 00:06:42,980 >> OMPICA: Vâng. 136 00:06:42,980 --> 00:06:43,630 >> JASON Hirschhorn: OK. 137 00:06:43,630 --> 00:06:47,390 Vì vậy, một câu hỏi khác bạn có thể có hỏi là tôi lời tiên tri? 138 00:06:47,390 --> 00:06:48,630 Câu trả lời là có. 139 00:06:48,630 --> 00:06:52,060 Trong phần trước khi các bài kiểm tra, tôi hỏi các bạn để mã cả Sterling và 140 00:06:52,060 --> 00:06:52,980 tám đến tôi. 141 00:06:52,980 --> 00:06:54,770 Cả hai đã xảy ra với xuất hiện trên các bài kiểm tra. 142 00:06:54,770 --> 00:06:57,510 Vì vậy, hy vọng, bạn trả tiền chú ý đến điều đó. 143 00:06:57,510 --> 00:07:02,520 >> Và nếu bạn đã có, sau đó bạn sẽ có có thể thực hiện tốt trên hai. 144 00:07:02,520 --> 00:07:06,030 Nhưng tám đến tôi, chúng tôi đã không thực sự đang nó trong lớp học, nhưng đó là, một lần nữa, 145 00:07:06,030 --> 00:07:07,500 hỏi về các bài kiểm tra. 146 00:07:07,500 --> 00:07:13,270 Vì vậy, một vài điều để có lưu ý khi mã hóa từ tám đến tôi. 147 00:07:13,270 --> 00:07:17,320 Điều đầu tiên, mỗi câu hỏi, là mà bạn cần phải kiểm tra nếu chuỗi 148 00:07:17,320 --> 00:07:20,300 tương đương với null. 149 00:07:20,300 --> 00:07:28,060 >> Một vài người đã cố gắng để kiểm tra sau này trong chương trình nếu s khung tôi là - 150 00:07:28,060 --> 00:07:30,940 do đó, một nhân vật cụ thể trong đó chuỗi - là bằng null. 151 00:07:30,940 --> 00:07:35,600 Nhưng hãy nhớ, không cho rằng về cơ bản - rất tốt để nghĩ về 152 00:07:35,600 --> 00:07:39,100 null như là một con trỏ không - một con trỏ đến không - 153 00:07:39,100 --> 00:07:40,920 nơi nào đó trong bộ nhớ nơi bạn không bao giờ có thể truy cập. 154 00:07:40,920 --> 00:07:44,730 >> Vì vậy, nếu một cái gì đó bằng null, bạn biết rằng nó đã không được khởi tạo, 155 00:07:44,730 --> 00:07:46,430 hoặc không có gì có. 156 00:07:46,430 --> 00:07:50,950 Vì vậy, s là một ngôi sao char, s khung tôi là một char. 157 00:07:50,950 --> 00:07:57,410 Vì vậy, nó có ý nghĩa để so sánh s để null, nhưng không s khung i thành vô giá trị. 158 00:07:57,410 --> 00:07:59,390 Nhưng một lần nữa - vì vậy đó là điều đầu tiên mà bạn đã phải làm - 159 00:07:59,390 --> 00:08:03,510 kiểm tra để chắc chắn rằng bạn thực sự có một chuỗi thực. 160 00:08:03,510 --> 00:08:08,020 >> Tiếp theo, bạn muốn đi qua mỗi nhân vật trong chuỗi. 161 00:08:08,020 --> 00:08:12,500 Và do đó sẽ giống như một khung s i, ví dụ, nếu tôi là lặp của bạn. 162 00:08:12,500 --> 00:08:17,250 Và có nhân vật đó, và nhận được giá trị thực tế của nó. 163 00:08:17,250 --> 00:08:21,800 Bạn có nó được lưu trữ như là một char, nhưng giá trị ASCII không - 164 00:08:21,800 --> 00:08:23,010 không như một nhân vật - 165 00:08:23,010 --> 00:08:25,450 không thực sự là số nguyên không. 166 00:08:25,450 --> 00:08:28,700 Đó là một số số khác mà bạn có thể tìm kiếm trong bảng ASCII. 167 00:08:28,700 --> 00:08:30,790 >> Vì vậy, một cách để sửa chữa cho điều đó - có lẽ là cách tốt nhất để sửa chữa cho 168 00:08:30,790 --> 00:08:33,760 đó - được trừ đi từ nó giá trị nhân vật - 169 00:08:33,760 --> 00:08:35,140 số không là một nhân vật. 170 00:08:35,140 --> 00:08:38,490 Vì vậy, trừ đi giá duy nhất, bằng không, một giá duy nhất. 171 00:08:38,490 --> 00:08:44,620 Điều đó sẽ đưa bất cứ điều gì bạn có số như một char, và làm cho nó bằng 172 00:08:44,620 --> 00:08:46,720 số là một số nguyên thực tế. 173 00:08:46,720 --> 00:08:50,300 >> Và đó là rất giống với phương pháp tiếp cận rất nhiều người mất trong 174 00:08:50,300 --> 00:08:52,800 vấn đề thiết lập 2, với Caesar và Viginere - 175 00:08:52,800 --> 00:08:55,160 những thuật toán mã hóa, khi bạn đã xoay chúng. 176 00:08:55,160 --> 00:08:59,210 Vì vậy, sau khi bạn có nó như là một số từ không để chín, sau đó - tùy thuộc vào 177 00:08:59,210 --> 00:09:02,750 nơi nó đi trong số cuối cùng - bạn cần phải nhân nó 178 00:09:02,750 --> 00:09:04,120 bởi một sức mạnh của 10. 179 00:09:04,120 --> 00:09:07,340 >> Một số người di chuyển từ phía sau để các phía trước, và nhân cá nhân 180 00:09:07,340 --> 00:09:08,940 số bởi một sức mạnh của 10. 181 00:09:08,940 --> 00:09:11,160 Một số người chuyển từ phía trước để trở lại - 182 00:09:11,160 --> 00:09:14,430 và vì vậy đã cao nhất đặt hàng số đầu tiên - 183 00:09:14,430 --> 00:09:18,190 và sẽ tiết kiệm được những người trong một biến truy cập toàn cầu. 184 00:09:18,190 --> 00:09:20,880 Và sau đó mỗi lần qua CHO vòng lặp, nhân tay khổng lồ 185 00:09:20,880 --> 00:09:25,640 chống biến 10, để làm cho không gian cho các char tiếp theo. 186 00:09:25,640 --> 00:09:28,750 >> Vì vậy, đó là một chút bối rối mà không tôi viết nó trên diễn đàn. 187 00:09:28,750 --> 00:09:31,550 Nhưng dung dịch mẫu có sẵn cho bạn. 188 00:09:31,550 --> 00:09:32,870 Nhưng đó là những điều lớn chúng tôi đang tìm kiếm. 189 00:09:32,870 --> 00:09:36,400 Cũng kiểm tra để đảm bảo rằng mỗi nhân vật cá nhân thực sự là một 190 00:09:36,400 --> 00:09:39,780 nhân vật giữa số không và chín, và không một số nhân vật khác, giống như một A, 191 00:09:39,780 --> 00:09:41,160 ví dụ. 192 00:09:41,160 --> 00:09:43,150 >> Đó là những điều mà chúng tôi đang tìm kiếm cho trong câu hỏi đó. 193 00:09:43,150 --> 00:09:46,510 194 00:09:46,510 --> 00:09:47,980 Điều đó trả lời câu hỏi của bạn? 195 00:09:47,980 --> 00:09:49,320 >> OMPICA: Vâng. 196 00:09:49,320 --> 00:09:50,240 >> JASON Hirschhorn: OK. 197 00:09:50,240 --> 00:09:53,940 Được có bất kỳ câu hỏi khác Câu hỏi về 0? 198 00:09:53,940 --> 00:09:55,440 Những gì về biên dịch? 199 00:09:55,440 --> 00:09:56,740 Tất cả mọi người biên soạn phải không? 200 00:09:56,740 --> 00:09:58,370 Không. 201 00:09:58,370 --> 00:09:58,840 Có một - 202 00:09:58,840 --> 00:10:01,010 [LAUGHS] 203 00:10:01,010 --> 00:10:03,265 Thắc mắc về quá trình biên dịch? 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 >> [Giấy xào xạc] 207 00:10:11,090 --> 00:10:11,520 >> JASON Hirschhorn: Có. 208 00:10:11,520 --> 00:10:11,700 Michael. 209 00:10:11,700 --> 00:10:14,140 >> MICHAEL: là số 7 - ngẫu nhiên? 210 00:10:14,140 --> 00:10:16,500 >> JASON Hirschhorn: Số 7. 211 00:10:16,500 --> 00:10:20,670 Số 7 đã có được một số nguyên ngẫu nhiên. 212 00:10:20,670 --> 00:10:21,110 Tuyệt vời. 213 00:10:21,110 --> 00:10:25,630 Vì vậy, bạn đang đưa ra một số nguyên a và một số nguyên b, và bạn muốn có một ngẫu nhiên 214 00:10:25,630 --> 00:10:28,710 số nguyên giữa a và b. 215 00:10:28,710 --> 00:10:31,740 Chúng tôi thực sự có thể viết này trên hội đồng quản trị, bởi vì này 216 00:10:31,740 --> 00:10:33,320 là một trong những dòng mã - 217 00:10:33,320 --> 00:10:34,390 một cách để làm điều đó. 218 00:10:34,390 --> 00:10:37,810 >> Vì vậy, chúng tôi đang đưa ra drand như một chức năng chúng tôi có thể sử dụng. 219 00:10:37,810 --> 00:10:38,820 Và những gì drand - 220 00:10:38,820 --> 00:10:40,290 giả sử nó được hạt giống - 221 00:10:40,290 --> 00:10:42,316 những gì drand trở lại? 222 00:10:42,316 --> 00:10:44,840 >> MICHAEL: Một float giữa 0.0 và 1.0. 223 00:10:44,840 --> 00:10:45,530 >> JASON Hirschhorn: Một số - yeah. 224 00:10:45,530 --> 00:10:47,910 Một số giữa 0 và 1. 225 00:10:47,910 --> 00:10:51,760 Và vì vậy chúng tôi có b và a. 226 00:10:51,760 --> 00:10:55,480 Và sau đó chúng tôi có số ngẫu nhiên của chúng tôi giữa 0 và 1 ban cho chúng ta drand. 227 00:10:55,480 --> 00:11:01,480 228 00:11:01,480 --> 00:11:06,630 Một số người đã cố gắng để đưa b, hoặc b trừ một, hoặc một cái gì đó bên trong những 229 00:11:06,630 --> 00:11:07,960 ngoặc. 230 00:11:07,960 --> 00:11:11,210 Điều đó có nghĩa rằng họ đang đối số cho chức năng này. 231 00:11:11,210 --> 00:11:13,450 >> drand không có bất kỳ đối số - như getString không 232 00:11:13,450 --> 00:11:14,330 không có bất kỳ đối số. 233 00:11:14,330 --> 00:11:16,600 Vì vậy, nó chỉ là dấu ngoặc mở, đóng Dấu ngoặc đơn - và rằng, chính nó, là 234 00:11:16,600 --> 00:11:17,330 các cuộc gọi chức năng. 235 00:11:17,330 --> 00:11:19,770 Và cung cấp cho bạn một số giữa 0 và 1. 236 00:11:19,770 --> 00:11:22,820 Tất nhiên, chúng ta có cả một loạt rằng con số có thể được in 237 00:11:22,820 --> 00:11:28,470 >> Nói, nếu b là 10 và 5, chúng tôi thực sự muốn có một số với một loạt 5. 238 00:11:28,470 --> 00:11:36,940 Vì vậy, điều tiếp theo chúng ta cần làm là nhân này bởi phạm vi b trừ đi một. 239 00:11:36,940 --> 00:11:40,380 Vì vậy, giả định đó là nhân. 240 00:11:40,380 --> 00:11:42,590 Và rằng sẽ cung cấp cho chúng tôi một số trong một phạm vi nhất định. 241 00:11:42,590 --> 00:11:46,610 Và phạm vi cụ thể là sự khác biệt giữa b trừ đi một. 242 00:11:46,610 --> 00:11:50,030 >> Và cuối cùng, đó sẽ chỉ cung cấp cho nó từ - nói khoảng từ b trừ một 243 00:11:50,030 --> 00:11:52,520 là 5, mà sẽ cung cấp cho chúng ta một số 0-5. 244 00:11:52,520 --> 00:11:56,000 Nhưng nếu một trong thực tế, 5, chúng ta cần tăng phạm vi này lên đến nơi nó 245 00:11:56,000 --> 00:12:01,380 thực sự cho là, bằng cách thêm một. 246 00:12:01,380 --> 00:12:02,580 Để được quyền logic. 247 00:12:02,580 --> 00:12:03,745 Và sau đó, bạn sẽ phải một câu hỏi khác? 248 00:12:03,745 --> 00:12:04,547 >> MICHAEL: số 249 00:12:04,547 --> 00:12:06,010 Tôi chỉ cảm thấy thực sự câm ngay bây giờ. 250 00:12:06,010 --> 00:12:06,405 [LAUGHS] 251 00:12:06,405 --> 00:12:06,730 >> JASON Hirschhorn: số 252 00:12:06,730 --> 00:12:08,640 Không cảm thấy thực sự ngu ngốc. 253 00:12:08,640 --> 00:12:10,560 Một số người đấu tranh với câu hỏi này. 254 00:12:10,560 --> 00:12:13,920 Và sau đó, câu hỏi khác là, drand, bạn nói, cung cấp cho bạn một phao - 255 00:12:13,920 --> 00:12:14,940 trả về một phao. 256 00:12:14,940 --> 00:12:18,020 Nhưng chức năng này thực sự hỏi cho một số nguyên để được trả lại. 257 00:12:18,020 --> 00:12:23,700 >> Bạn không cần phải cast này một cách rõ ràng một số nguyên, bởi vì những 258 00:12:23,700 --> 00:12:29,090 hoạt động sẽ xử lý nó như một tất cả nổi - như một số điểm nổi. 259 00:12:29,090 --> 00:12:31,570 Như ý muốn này - thậm chí nếu điều này là một số nguyên, điều này sẽ 260 00:12:31,570 --> 00:12:32,890 được nhân cách chính xác. 261 00:12:32,890 --> 00:12:34,000 Tất cả các nhân sẽ làm việc. 262 00:12:34,000 --> 00:12:35,060 Bạn không cần phải bỏ nó ở đây. 263 00:12:35,060 --> 00:12:36,480 Trong thực tế, bạn không nên bỏ nó. 264 00:12:36,480 --> 00:12:37,310 >> Mà có - 265 00:12:37,310 --> 00:12:40,750 nếu bạn muốn bỏ một số đó là giữa 0 và 1 - 266 00:12:40,750 --> 00:12:42,680 một số ngẫu nhiên, một điểm nổi - 267 00:12:42,680 --> 00:12:47,850 sau đó nó sẽ hoặc được chỉ 0 hoặc 1, do đó bạn sẽ mất tất cả độ chính xác. 268 00:12:47,850 --> 00:12:50,120 Nhưng cuối cùng, khi bạn quay trở lại, nó sẽ tự động được 269 00:12:50,120 --> 00:12:51,620 gửi về là một số nguyên. 270 00:12:51,620 --> 00:12:56,870 Vì vậy, bạn không cần phải làm mà đúc chính mình. 271 00:12:56,870 --> 00:13:00,810 >> Vì vậy, đây là câu trả lời cho câu hỏi đó, số 7. 272 00:13:00,810 --> 00:13:02,190 Bất kỳ câu hỏi khác về đố 0? 273 00:13:02,190 --> 00:13:03,300 Yeah, Annie. 274 00:13:03,300 --> 00:13:05,050 >> ANNIE: Khi nào chúng ta sử dụng đệ quy - 275 00:13:05,050 --> 00:13:07,850 khi chúng ta sử dụng vòng lặp đi lặp lại? 276 00:13:07,850 --> 00:13:10,210 >> JASON Hirschhorn: Khi nào bạn sử dụng đệ quy - vì vậy thường nhiều hơn, 277 00:13:10,210 --> 00:13:14,110 ưu và nhược điểm của đệ quy so với một cách tiếp cận lặp đi lặp lại. 278 00:13:14,110 --> 00:13:17,110 Ai cũng có thể cung cấp chuyên nghiệp hoặc một con? 279 00:13:17,110 --> 00:13:19,460 Xin vui lòng? 280 00:13:19,460 --> 00:13:20,140 Không thể bất cứ ai. 281 00:13:20,140 --> 00:13:22,526 Những người có thể cung cấp chuyên nghiệp hoặc một con? 282 00:13:22,526 --> 00:13:26,963 >> [Giấy xào xạc] 283 00:13:26,963 --> 00:13:29,730 >> HỌC SINH 1: Recursive ít mã hóa - ít đánh máy? 284 00:13:29,730 --> 00:13:33,170 >> JASON Hirschhorn: Vì vậy, nói chung, đặc biệt là đệ quy, một chức năng - 285 00:13:33,170 --> 00:13:35,750 hoặc một thuật toán như hợp nhất loại - mà cho mượn 286 00:13:35,750 --> 00:13:37,300 một cách tiếp cận đệ quy - 287 00:13:37,300 --> 00:13:40,710 có thể đơn giản hơn mã đệ quy. 288 00:13:40,710 --> 00:13:43,940 Và chỉ có ý nghĩa hơn để làm điều đó đệ quy. 289 00:13:43,940 --> 00:13:46,230 Vì vậy, đó sẽ là một chuyên nghiệp để đệ quy. 290 00:13:46,230 --> 00:13:46,610 Những người khác? 291 00:13:46,610 --> 00:13:47,467 Yeah? 292 00:13:47,467 --> 00:13:49,240 >> HỌC SINH 2: Côn để đệ quy - 293 00:13:49,240 --> 00:13:50,940 Nó sử dụng nhiều bộ nhớ hơn. 294 00:13:50,940 --> 00:13:52,200 >> JASON Hirschhorn: Vì vậy, chính xác. 295 00:13:52,200 --> 00:13:55,720 Một hàm đệ quy sẽ tiếp tục bổ sung ngăn xếp khung vào stack. 296 00:13:55,720 --> 00:13:59,690 Vì vậy, nếu bạn đang hoạt động trên rất nhiều số, và phải gọi này 297 00:13:59,690 --> 00:14:02,560 hoạt động rất nhiều, sau đó bạn chắc chắn sẽ mất nhiều bộ nhớ hơn, trong khi 298 00:14:02,560 --> 00:14:05,810 một cách tiếp cận lặp đi lặp lại sẽ chỉ đặt một ngăn xếp khung trên stack, vì 299 00:14:05,810 --> 00:14:08,420 tất cả sẽ xảy ra trong vòng một chức năng. 300 00:14:08,420 --> 00:14:11,010 >> Bất kỳ ưu và nhược điểm khác? 301 00:14:11,010 --> 00:14:11,500 Yeah. 302 00:14:11,500 --> 00:14:12,550 >> HỌC SINH 3: Ưu điểm cho đệ quy. 303 00:14:12,550 --> 00:14:15,950 Bạn không cần phải xác định trong tiến bao nhiêu lần 304 00:14:15,950 --> 00:14:17,660 mã đã được lặp đi lặp lại. 305 00:14:17,660 --> 00:14:22,810 Bạn có thể có một số định trước của thời gian mà bạn phải lặp, sau đó 306 00:14:22,810 --> 00:14:26,420 đệ quy tốt hơn, vì nó có kết quả. 307 00:14:26,420 --> 00:14:27,780 >> JASON Hirschhorn: Tôi nghĩ rằng đó là sự thật. 308 00:14:27,780 --> 00:14:30,770 Nhưng tôi nghĩ rằng trong cả hai trường hợp bạn sẽ không bao giờ - 309 00:14:30,770 --> 00:14:33,290 có thể bạn sẽ nhận được một số đầu vào từ người sử dụng. 310 00:14:33,290 --> 00:14:35,990 Hoặc chức năng này sẽ có một số đầu vào mà sẽ xác định bao nhiêu lần nó 311 00:14:35,990 --> 00:14:36,730 nên chạy. 312 00:14:36,730 --> 00:14:39,520 Vì vậy, nói chung, bạn sẽ không cứng mã - thậm chí trong một cách tiếp cận lặp đi lặp lại - như thế nào 313 00:14:39,520 --> 00:14:40,940 nhiều lần lặp cần được chạy. 314 00:14:40,940 --> 00:14:46,100 315 00:14:46,100 --> 00:14:48,670 >> Bạn đã có một bạn đã suy nghĩ về, Annie? 316 00:14:48,670 --> 00:14:49,330 OK. 317 00:14:49,330 --> 00:14:51,650 Vì vậy, những có lẽ là hai - 318 00:14:51,650 --> 00:14:54,370 ủng hộ lớn nhất và lớn nhất Con đến một đệ quy so với 319 00:14:54,370 --> 00:14:57,080 một cách tiếp cận lặp đi lặp lại. 320 00:14:57,080 --> 00:14:57,690 OK. 321 00:14:57,690 --> 00:14:59,465 Bất cứ điều gì khác trên quiz 0? 322 00:14:59,465 --> 00:15:08,940 323 00:15:08,940 --> 00:15:09,920 >> Chúng ta hãy chuyển. 324 00:15:09,920 --> 00:15:15,260 Tập tin I / O. Có một đoạn ngắn tuyệt vời tuần này trên tập tin I / O mà hy vọng 325 00:15:15,260 --> 00:15:19,270 bạn đã xem nhiều lần, và ngưỡng mộ. 326 00:15:19,270 --> 00:15:22,910 Rất nhiều công việc đã đi vào đó, và tôi đã nghe nói nó là điên rồ hữu ích. 327 00:15:22,910 --> 00:15:25,740 Tôi cũng bao gồm các liên kết trên slide này, trong trường hợp bạn không có một 328 00:15:25,740 --> 00:15:29,160 cơ hội để xem nó 10 lần. 329 00:15:29,160 --> 00:15:35,280 >> Vì vậy, chúng ta sẽ đi một thời gian ngắn trong bước chính để mở và làm việc 330 00:15:35,280 --> 00:15:38,400 với các tập tin, và sau đó chúng ta sẽ đi sâu vào một vấn đề mã hóa trước khi 331 00:15:38,400 --> 00:15:40,400 kiểm tra các bộ vấn đề. 332 00:15:40,400 --> 00:15:44,330 Vì vậy, một lần nữa, tôi sẽ đặt này lên trên màn hình, nhưng tôi sẽ nói cho 333 00:15:44,330 --> 00:15:47,630 chỉ một phút về những gì chúng tôi làm gì ở đây với tập tin I/O-- 334 00:15:47,630 --> 00:15:49,090 có nghĩa là gì? 335 00:15:49,090 --> 00:15:55,280 >> Điều đó có nghĩa rằng chúng ta có thể tạo ra của chúng tôi các chương trình, và sau đó có các chương trình của chúng tôi 336 00:15:55,280 --> 00:16:00,370 xuất cảnh, và không thực hiện bất kỳ tác động trên thế giới bên ngoài của chương trình của chúng tôi. 337 00:16:00,370 --> 00:16:04,630 Nhưng khi chúng tôi bắt đầu làm việc với các tập tin - cả hai đọc chúng trong và tạo ra 338 00:16:04,630 --> 00:16:10,460 chúng - chúng ta có thể có một số ảnh hưởng đến thế giới bên ngoài của chương trình của chúng tôi. 339 00:16:10,460 --> 00:16:15,440 >> Cũng giống như nếu Microsoft Word đã không thể thực hiện bất kỳ các tài liệu Word, sau đó 340 00:16:15,440 --> 00:16:18,710 một khi Microsoft Word bỏ thuốc lá, tất cả các bạn công việc sẽ được đi, và nó sẽ 341 00:16:18,710 --> 00:16:19,740 thực sự là vô ích. 342 00:16:19,740 --> 00:16:23,620 Chúng tôi cuối cùng muốn có thể viết chương trình có thể ảnh hưởng đến 343 00:16:23,620 --> 00:16:31,350 thế giới xung quanh, cả hai bằng cách tham gia trong đầu vào phức tạp - về các tập tin và 344 00:16:31,350 --> 00:16:37,080 thông qua các tập tin, và cũng tạo ra thú vị và kết quả đầu ra hấp dẫn - 345 00:16:37,080 --> 00:16:39,520 về các loại tập tin khác nhau. 346 00:16:39,520 --> 00:16:43,730 >> Vì vậy, đó là lý do tại sao chúng tôi đang bắt đầu học cách làm việc với các tập tin. 347 00:16:43,730 --> 00:16:47,080 Cụ thể hơn, những gì chúng tôi làm là như sau. 348 00:16:47,080 --> 00:16:47,680 Nó rất đơn giản. 349 00:16:47,680 --> 00:16:51,530 Chỉ có một vài bước, và chúng được liệt kê ở đây trên mã này. 350 00:16:51,530 --> 00:16:55,130 Vì vậy, chúng ta sẽ đi qua dòng mã này bằng cách dòng. 351 00:16:55,130 --> 00:16:57,630 >> Đầu tiên, bạn sẽ thấy nổi bật - 352 00:16:57,630 --> 00:17:01,330 khi bạn đang làm việc với một tập tin, không phụ thuộc vào loại tập tin đó là, 353 00:17:01,330 --> 00:17:02,670 bạn cần phải mở nó. 354 00:17:02,670 --> 00:17:05,130 Và đó là với một cuộc gọi để fopen - 355 00:17:05,130 --> 00:17:05,950 ngay tại đây. 356 00:17:05,950 --> 00:17:07,980 Bạn bao gồm tên của tập tin. 357 00:17:07,980 --> 00:17:11,930 Nếu các tập tin không có trong thư mục của bạn, hoặc thư mục mà chương trình này 358 00:17:11,930 --> 00:17:15,910 cuộc sống, sau đó bạn cũng cần phải bao gồm một đường dẫn đến nơi tập tin đó là. 359 00:17:15,910 --> 00:17:19,099 >> Chúng ta sẽ cho rằng điều này tập tin gọi là "text.txt" - 360 00:17:19,099 --> 00:17:24,220 một tài liệu văn bản đơn giản - là trong cùng một thư mục như chương trình này là. 361 00:17:24,220 --> 00:17:26,859 Vì vậy, đó là một điều cần lưu tâm - đó nếu bạn muốn mở một tập tin 362 00:17:26,859 --> 00:17:30,050 ở một nơi khác, bạn thực sự cần bao gồm vị trí của nó. 363 00:17:30,050 --> 00:17:33,520 >> Thứ hai, bạn có thể vượt qua một đối số fopen, và đó là những gì bạn muốn làm 364 00:17:33,520 --> 00:17:34,620 với các tập tin. 365 00:17:34,620 --> 00:17:38,450 Có ba đối số chính bạn sẽ vượt qua để fopen. 366 00:17:38,450 --> 00:17:40,060 Ai có thể cho tôi những ba? 367 00:17:40,060 --> 00:17:44,960 368 00:17:44,960 --> 00:17:47,130 Ai có thể cho tôi một trong số họ? 369 00:17:47,130 --> 00:17:48,130 Vâng. 370 00:17:48,130 --> 00:17:50,010 >> HỌC SINH 4: tên tập tin? 371 00:17:50,010 --> 00:17:50,440 >> JASON Hirschhorn: Xin lỗi. 372 00:17:50,440 --> 00:17:55,490 Ba lập luận chính bạn có thể vượt qua như là đối số thứ hai để fopen. 373 00:17:55,490 --> 00:17:57,060 Bạn nói đúng - tên tập tin là số đầu tiên. 374 00:17:57,060 --> 00:18:01,620 Nhưng đối số thứ hai là để fopen nói chung là ba dây, và - có. 375 00:18:01,620 --> 00:18:02,210 Aleja. 376 00:18:02,210 --> 00:18:03,490 >> ALEJA: A để phụ thêm. 377 00:18:03,490 --> 00:18:06,840 >> JASON Hirschhorn: A, nếu bạn muốn thêm vào một tập tin đã tồn tại. 378 00:18:06,840 --> 00:18:07,810 >> HỌC SINH 5: R để đọc. 379 00:18:07,810 --> 00:18:09,930 >> JASON Hirschhorn: R, nếu bạn muốn đọc từ một tập tin. 380 00:18:09,930 --> 00:18:10,670 >> HỌC SINH 6: W cho viết. 381 00:18:10,670 --> 00:18:12,840 >> JASON Hirschhorn: Và w, nếu bạn muốn viết vào một tập tin. 382 00:18:12,840 --> 00:18:17,570 Vì vậy, trong trường hợp này, chúng tôi đang viết vào tập tin, vì vậy chúng tôi có w. 383 00:18:17,570 --> 00:18:22,360 Bạn mở nó, bạn cũng phải lưu nộp ở đâu đó, và đó là với 384 00:18:22,360 --> 00:18:26,000 mã để phía bên tay trái của toán tử gán - 385 00:18:26,000 --> 00:18:31,220 Tôi là tạo ra một con trỏ đến một tập tin được gọi là, trong trường hợp này, tập tin. 386 00:18:31,220 --> 00:18:36,070 >> Chúng tôi sẽ không phải lo lắng gì này tất cả các mũ FILE điều. 387 00:18:36,070 --> 00:18:40,600 Chỉ cần nói rằng, đó là một chặng đường dài dòng số không và những người thân. 388 00:18:40,600 --> 00:18:44,970 Và đó là cách chúng ta sẽ vận hành nó và hiểu nó. 389 00:18:44,970 --> 00:18:47,300 >> Điều tiếp theo chúng ta cần làm - và này là vô cùng quan trọng - 390 00:18:47,300 --> 00:18:49,070 bất cứ khi nào bạn mở một tập tin - 391 00:18:49,070 --> 00:18:54,250 trên thực tế, bất cứ khi nào bạn gọi malloc, cho ví dụ, và nhận được một số bộ nhớ và cố gắng 392 00:18:54,250 --> 00:18:57,980 và lưu nó trong một con trỏ, bạn luôn luôn muốn kiểm tra để đảm bảo rằng 393 00:18:57,980 --> 00:19:00,230 chức năng không trở về null. 394 00:19:00,230 --> 00:19:05,230 >> Vì vậy, trong trường hợp này, chúng tôi đang kiểm tra để thực hiện chắc chắn rằng chúng tôi thực sự đã mở 395 00:19:05,230 --> 00:19:10,230 nộp một cách chính xác, và có không có lỗi trong chương trình của chúng tôi. 396 00:19:10,230 --> 00:19:15,160 Tiếp theo, khi chúng tôi đã kiểm tra để chắc chắn rằng chúng ta có một tập tin làm việc, chúng ta có thể 397 00:19:15,160 --> 00:19:18,520 viết, hoặc đọc từ, hoặc thêm vào các tập tin. 398 00:19:18,520 --> 00:19:24,270 Trong trường hợp này, tôi chỉ đơn giản in một dòng vào tập tin này. 399 00:19:24,270 --> 00:19:25,450 >> Làm thế nào để tôi biết rằng? 400 00:19:25,450 --> 00:19:27,990 Vâng, tôi đang sử dụng chức năng này gọi là fprintf. 401 00:19:27,990 --> 00:19:30,970 Tất cả các chức năng mà bạn sẽ sử dụng khi viết, hoặc đọc từ, hoặc 402 00:19:30,970 --> 00:19:34,950 thao tác tập tin sẽ tương tự như chức năng mà bạn đã nhìn thấy trước, nhưng 403 00:19:34,950 --> 00:19:38,420 bắt đầu bằng chữ F, đứng cho tập tin. 404 00:19:38,420 --> 00:19:43,440 Và fprintf, không giống như in bình thường của chúng tôi ứng dụng, nhận một đối số bổ sung, 405 00:19:43,440 --> 00:19:47,800 và đó là tập tin mà bạn muốn in dòng này. 406 00:19:47,800 --> 00:19:50,640 >> Tôi không có bất cứ điều gì để quyền của Ohai. 407 00:19:50,640 --> 00:19:52,860 Tôi không có người thứ ba lập luận printf - 408 00:19:52,860 --> 00:19:57,030 hoặc đối số thứ hai printf, các số thứ ba để fprintf, bởi vì tôi 409 00:19:57,030 --> 00:19:59,480 không có bất kỳ giữ chỗ ở đây. 410 00:19:59,480 --> 00:20:01,070 Tôi không bao gồm bất kỳ biến. 411 00:20:01,070 --> 00:20:06,070 Nhưng một lần nữa, fprintf và tất cả các tập tin chức năng hoạt động với các tập tin 412 00:20:06,070 --> 00:20:09,820 thường sẽ cần các tập tin mà họ đang điều hành. 413 00:20:09,820 --> 00:20:15,960 >> Cuối cùng, điều quan trọng cuối cùng làm là để đóng tập tin, giống như 414 00:20:15,960 --> 00:20:19,530 với - bất cứ khi nào chúng tôi malloc một cái gì đó, chúng tôi muốn giải phóng một cái gì đó, vì sợ chúng tôi 415 00:20:19,530 --> 00:20:22,730 có một rò rỉ bộ nhớ - chúng tôi muốn để đóng tập tin của chúng tôi. 416 00:20:22,730 --> 00:20:28,180 Nếu chương trình này đã thoát mà không đóng cửa các tập tin, tỷ lệ cược là không có gì sẽ đi 417 00:20:28,180 --> 00:20:30,050 sai, đặc biệt là nếu nó là một tập tin nhỏ. 418 00:20:30,050 --> 00:20:35,020 >> Nhưng chắc chắn là phong cách mã hóa tốt và thực hành phải luôn luôn đóng tập tin của bạn 419 00:20:35,020 --> 00:20:38,050 khi bạn đã hoàn tất sử dụng nó. 420 00:20:38,050 --> 00:20:43,630 Vì vậy, đó là những điều cơ bản của tập tin I / O. Bạn đã có thể thấy rằng trước khi, hoặc 421 00:20:43,630 --> 00:20:45,710 xem nó ở chỗ ngắn tuyệt vời. 422 00:20:45,710 --> 00:20:48,410 Không ai có bất kỳ câu hỏi, trước khi chúng ta đi vào một số mã hóa thực hành 423 00:20:48,410 --> 00:20:51,800 vấn đề, về tập tin I / O hoặc bước Tôi chỉ cần đi qua? 424 00:20:51,800 --> 00:21:00,198 425 00:21:00,198 --> 00:21:03,162 >> [Gõ SOUNDS] 426 00:21:03,162 --> 00:21:04,150 >> JASON Hirschhorn: Bạn có có một câu hỏi, Avi? 427 00:21:04,150 --> 00:21:04,660 >> AVI: số 428 00:21:04,660 --> 00:21:04,740 >> JASON Hirschhorn: OK. 429 00:21:04,740 --> 00:21:06,746 Tôi sẽ chờ đợi thêm bảy giây. 430 00:21:06,746 --> 00:21:07,590 [LAUGHS] 431 00:21:07,590 --> 00:21:08,620 Đó là một mẹo thực sự tốt. 432 00:21:08,620 --> 00:21:10,750 Các bạn chỉ không thích đặt câu hỏi. 433 00:21:10,750 --> 00:21:11,660 Đó là tốt. 434 00:21:11,660 --> 00:21:12,330 OK. 435 00:21:12,330 --> 00:21:17,620 Vì vậy, vấn đề thực hành đầu tiên của chúng tôi là, chúng tôi đi lặp lại trong các chức năng của 436 00:21:17,620 --> 00:21:22,330 một công cụ dòng lệnh mà bạn có thể sử dụng trước - bản sao - 437 00:21:22,330 --> 00:21:23,500 các công cụ sao chép. 438 00:21:23,500 --> 00:21:28,050 Nếu bạn gõ cp và sau đó vượt qua nó hai đối số vào thiết bị đầu cuối của bạn, bạn có thể 439 00:21:28,050 --> 00:21:28,980 sao chép một tập tin. 440 00:21:28,980 --> 00:21:31,220 Và đó là những gì chúng ta sẽ viết ngay bây giờ. 441 00:21:31,220 --> 00:21:35,830 >> Vì vậy, một lần nữa, đọc tắt của slide này, tôi muốn bạn viết một chương trình mà có 442 00:21:35,830 --> 00:21:38,130 hai và chỉ có hai dòng lệnh đối số - 443 00:21:38,130 --> 00:21:40,750 một tập tin nguồn và file đích - 444 00:21:40,750 --> 00:21:44,590 và bản sao nội dung của nguồn tập tin vào tập tin điểm đến 445 00:21:44,590 --> 00:21:46,960 một byte tại một thời điểm. 446 00:21:46,960 --> 00:21:48,510 Vì vậy, đó là rất nhiều yêu cầu. 447 00:21:48,510 --> 00:21:52,200 >> Một lần nữa, một cách tiếp cận tốt này là để không đi thẳng vào mã C, nhưng 448 00:21:52,200 --> 00:21:54,280 chia nó ra thành một vài bước. 449 00:21:54,280 --> 00:21:58,400 Đầu tiên, suy nghĩ về logic - chính xác những gì tôi yêu cầu bạn làm - 450 00:21:58,400 --> 00:22:00,620 và hiểu tất cả các bước cho vấn đề này. 451 00:22:00,620 --> 00:22:04,410 Không trong C, chỉ trong một số giả, hoặc thậm chí là một mô hình tinh thần của 452 00:22:04,410 --> 00:22:06,030 những gì đang xảy ra. 453 00:22:06,030 --> 00:22:10,050 >> Tiếp theo, một khi bạn có giả xuống, tìm ra cách giả 454 00:22:10,050 --> 00:22:14,600 bản đồ vào các công cụ và những thứ chúng tôi đã học cách sử dụng trong C. 455 00:22:14,600 --> 00:22:19,070 >> Và cuối cùng, một khi bạn có tất cả những với nhau, bạn có thể mã vấn đề. 456 00:22:19,070 --> 00:22:23,370 Mất 5 đến 10 phút để làm việc về vấn đề này. 457 00:22:23,370 --> 00:22:25,800 Tôi sẽ đưa các hướng dẫn trở lại trong một giây. 458 00:22:25,800 --> 00:22:27,990 Và sau đó chúng ta sẽ đi qua mã giả, và mã 459 00:22:27,990 --> 00:22:29,230 nó sống như một nhóm. 460 00:22:29,230 --> 00:22:31,640 >> Nếu bạn có bất kỳ câu hỏi trong khi bạn đang làm việc này, cảm thấy tự do để nâng cao 461 00:22:31,640 --> 00:22:34,260 bàn tay của bạn, và tôi sẽ đến xung quanh và trả lời chúng. 462 00:22:34,260 --> 00:22:37,020 463 00:22:37,020 --> 00:22:39,330 >> HỌC SINH 7: Tôi có thể swipe một mảnh giấy? 464 00:22:39,330 --> 00:22:41,537 >> JASON Hirschhorn: Chuyện gì vậy? 465 00:22:41,537 --> 00:26:46,047 466 00:26:46,047 --> 00:26:48,043 >> [Gõ SOUNDS] 467 00:26:48,043 --> 00:26:48,730 >> JASON Hirschhorn: OK. 468 00:26:48,730 --> 00:26:51,710 Chúng ta hãy xem các giả đầu tiên, và sau đó tôi sẽ cung cấp cho bạn một vài chi tiết 469 00:26:51,710 --> 00:26:52,960 phút để kết thúc mã hóa. 470 00:26:52,960 --> 00:26:55,540 471 00:26:55,540 --> 00:26:58,650 >> Những người muốn bắt đầu tôi ra với dòng đầu tiên của 472 00:26:58,650 --> 00:27:00,030 giả cho chức năng này? 473 00:27:00,030 --> 00:27:03,330 474 00:27:03,330 --> 00:27:05,740 >> HỌC SINH 8: Kiểm tra để đảm bảo rằng bạn đã được đưa ra hai tập tin. 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 Và nếu chúng tôi không? 478 00:27:22,990 --> 00:27:25,974 >> HỌC SINH 8: Tôi sẽ trở về 0. 479 00:27:25,974 --> 00:27:27,872 >> JASON Hirschhorn: Chúng ta có nên trở về 0? 480 00:27:27,872 --> 00:27:30,182 >> HỌC SINH 8: Quay trở lại một - 481 00:27:30,182 --> 00:27:30,650 tẩy trống. 482 00:27:30,650 --> 00:27:30,850 Xin lôi. 483 00:27:30,850 --> 00:27:31,210 >> JASON Hirschhorn: Vâng. 484 00:27:31,210 --> 00:27:32,710 Có lẽ không phải 0. 485 00:27:32,710 --> 00:27:34,680 Vì 0 có nghĩa là tất cả mọi thứ là tốt. 486 00:27:34,680 --> 00:27:35,030 OK. 487 00:27:35,030 --> 00:27:36,730 Vì vậy, đó là những dòng đầu tiên của giả. 488 00:27:36,730 --> 00:27:38,715 Những người có dòng thứ hai của mã giả? 489 00:27:38,715 --> 00:27:40,630 >> HỌC SINH 9: Mở cả các tập tin? 490 00:27:40,630 --> 00:27:41,880 >> JASON Hirschhorn: Mở cả hai tập tin. 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 >> HỌC SINH 10: Kiểm tra xem nếu tập tin là NULL? 494 00:27:52,850 --> 00:28:10,906 495 00:28:10,906 --> 00:28:12,580 >> JASON Hirschhorn: Kiểm tra để chắc chắc chắn không phải là NULL. 496 00:28:12,580 --> 00:28:15,800 Như một sang một bên - 497 00:28:15,800 --> 00:28:17,540 giảm 0 - 498 00:28:17,540 --> 00:28:18,887 là NULL? 499 00:28:18,887 --> 00:28:20,080 >> HỌC SINH 11: Số 500 00:28:20,080 --> 00:28:21,190 >> JASON Hirschhorn: Đó không phải là NULL. 501 00:28:21,190 --> 00:28:23,400 Đó được gọi là terminator NULL. 502 00:28:23,400 --> 00:28:25,580 Nó thực sự viết chỉ với một l. 503 00:28:25,580 --> 00:28:28,580 Vì vậy, kiểm tra một cái gì đó so với - đó thực sự là một nhân vật - 504 00:28:28,580 --> 00:28:31,710 để kiểm tra một cái gì đó chống lại được không giống như kiểm tra xem nó 505 00:28:31,710 --> 00:28:32,690 bằng NULL. 506 00:28:32,690 --> 00:28:34,100 >> Và một số người - 507 00:28:34,100 --> 00:28:36,040 về câu đố của họ và vấn đề của họ bộ - đã nhận được 508 00:28:36,040 --> 00:28:36,890 hai trong số những nhầm lẫn. 509 00:28:36,890 --> 00:28:38,830 Nhưng hai trong số đó là trong thực tế khác nhau. 510 00:28:38,830 --> 00:28:40,220 Một kết thúc một chuỗi - 511 00:28:40,220 --> 00:28:43,210 một là một con trỏ đến 0. 512 00:28:43,210 --> 00:28:46,490 >> HỌC SINH 12: Tại sao bạn không kiểm tra đảm bảo rằng các tập tin không phải là NULL 513 00:28:46,490 --> 00:28:48,670 trước khi bạn mở chúng? 514 00:28:48,670 --> 00:28:54,772 >> JASON Hirschhorn: Vì vậy, mở tiết kiệm một cái gì đó trong tập tin đó. 515 00:28:54,772 --> 00:28:57,780 Và nếu bạn quay trở lại đây - 516 00:28:57,780 --> 00:28:59,520 để dòng này - fopen - 517 00:28:59,520 --> 00:29:05,300 sẽ cung cấp cho bạn một địa chỉ và lưu trữ địa chỉ trong tập tin nếu nó hoạt động. 518 00:29:05,300 --> 00:29:07,650 Nếu nó không hoạt động, nó sẽ lưu trữ NULL - 519 00:29:07,650 --> 00:29:08,020 >> HỌC SINH 12: Oh. 520 00:29:08,020 --> 00:29:08,180 OK. 521 00:29:08,180 --> 00:29:08,500 Có bạn. 522 00:29:08,500 --> 00:29:09,050 >> JASON Hirschhorn: Trong file. 523 00:29:09,050 --> 00:29:11,990 Vì vậy, bạn không thể kiểm tra NULL trước khi bạn mở chúng. 524 00:29:11,990 --> 00:29:13,520 NULL có nghĩa là một cái gì đó không hoạt động chính xác. 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 Vì vậy, hãy kiểm tra để chắc chắn không là? 528 00:29:22,590 --> 00:29:23,200 Hay là? 529 00:29:23,200 --> 00:29:23,770 Chúng ta nghĩ gì? 530 00:29:23,770 --> 00:29:24,310 Chúng tôi sẽ đi với điều đó. 531 00:29:24,310 --> 00:29:24,520 >> HỌC SINH 13: Liệu. 532 00:29:24,520 --> 00:29:25,020 >> JASON Hirschhorn: Liệu? 533 00:29:25,020 --> 00:29:25,930 Không là? 534 00:29:25,930 --> 00:29:26,350 >> HỌC SINH 13: Liệu. 535 00:29:26,350 --> 00:29:26,390 >> JASON Hirschhorn: OK. 536 00:29:26,390 --> 00:29:28,510 Chúng tôi dường như có một số sự đồng thuận về điều đó. 537 00:29:28,510 --> 00:29:30,520 Không là NULL. 538 00:29:30,520 --> 00:29:32,250 OK, dòng tiếp theo của mã giả. 539 00:29:32,250 --> 00:29:33,600 Người đã không cho tôi một dòng chưa? 540 00:29:33,600 --> 00:29:37,350 541 00:29:37,350 --> 00:29:38,295 Chúng tôi sẽ chờ đợi cho bạn. 542 00:29:38,295 --> 00:29:39,020 Yeah. 543 00:29:39,020 --> 00:29:40,895 >> HỌC SINH 14: Bạn phải đọc từ các tập tin đầu tiên? 544 00:29:40,895 --> 00:29:42,290 >> JASON Hirschhorn: OK. 545 00:29:42,290 --> 00:29:46,240 >> HỌC SINH 14: Hoặc chúng ta sử dụng fscanf hay một cái gì đó như là các tập tin đầu tiên? 546 00:29:46,240 --> 00:29:50,650 >> JASON Hirschhorn: Vì vậy, chúng tôi muốn đọc từ tập tin đầu tiên và - 547 00:29:50,650 --> 00:29:51,900 chúng ta hãy đặt rằng ngay tại đây. 548 00:29:51,900 --> 00:30:00,600 549 00:30:00,600 --> 00:30:01,880 Đọc từ tập tin nguồn. 550 00:30:01,880 --> 00:30:05,370 Và sau đó, chúng ta làm gì sau khi chúng tôi đọc từ tập tin nguồn? 551 00:30:05,370 --> 00:30:06,620 Người khác? 552 00:30:06,620 --> 00:30:09,150 553 00:30:09,150 --> 00:30:12,190 >> HỌC SINH 15: Viết vào các tập tin đích? 554 00:30:12,190 --> 00:30:22,080 555 00:30:22,080 --> 00:30:25,620 >> JASON Hirschhorn: Chúng tôi viết để các tập tin đích, và - 556 00:30:25,620 --> 00:30:26,210 OK. 557 00:30:26,210 --> 00:30:30,030 Những gì khác chúng ta đang mất tích? 558 00:30:30,030 --> 00:30:32,460 Người khác đã không cho tôi một dòng mã nào - của giả. 559 00:30:32,460 --> 00:30:33,510 Yeah. 560 00:30:33,510 --> 00:30:36,540 >> HỌC SINH 16: Có lẽ bạn luôn luôn có thể kiểm tra cho dù có điều gì đó để đọc cho, 561 00:30:36,540 --> 00:30:37,970 như dòng tiếp theo? 562 00:30:37,970 --> 00:30:39,550 Mà như dòng tiếp theo, xem nếu nó tồn tại. 563 00:30:39,550 --> 00:30:40,660 >> [Điện BEEP] 564 00:30:40,660 --> 00:30:41,095 >> JASON Hirschhorn: Rất tiếc. 565 00:30:41,095 --> 00:30:43,120 Đó là phần mềm nhật ký của tôi. 566 00:30:43,120 --> 00:30:43,580 Yeah? 567 00:30:43,580 --> 00:30:44,960 >> HỌC SINH 16: Vâng. 568 00:30:44,960 --> 00:30:48,940 >> JASON Hirschhorn: Vì vậy, cung cấp cho nó cho tôi một lần nữa. 569 00:30:48,940 --> 00:30:51,640 >> HỌC SINH 16: Kiểm tra xem có vẫn còn là một dòng tiếp theo từ 570 00:30:51,640 --> 00:30:52,920 tập tin mã nguồn để đọc. 571 00:30:52,920 --> 00:30:53,500 >> JASON Hirschhorn: OK. 572 00:30:53,500 --> 00:30:56,060 Vì vậy, chúng tôi không đọc dòng - được đọc byte ở đây - 573 00:30:56,060 --> 00:30:57,590 nhưng bạn đã đúng. 574 00:30:57,590 --> 00:31:00,040 Chúng tôi muốn đọc và viết cho đến khi không có nhiều byte. 575 00:31:00,040 --> 00:31:11,430 576 00:31:11,430 --> 00:31:11,735 OK. 577 00:31:11,735 --> 00:31:16,940 Và do đó, những thực sự cần được thụt vào một chút, bởi vì họ đang ở dưới đó. 578 00:31:16,940 --> 00:31:17,470 Phải không? 579 00:31:17,470 --> 00:31:20,620 Cho đến khi chúng tôi ra khỏi byte, chúng ta sẽ đọc từ nguồn tập tin và viết 580 00:31:20,620 --> 00:31:22,160 để file đích. 581 00:31:22,160 --> 00:31:24,510 >> Và sau đó, là những gì cuối cùng dòng giả? 582 00:31:24,510 --> 00:31:26,380 Một ai đó không được tôi một cái gì đó được nêu ra. 583 00:31:26,380 --> 00:31:29,270 584 00:31:29,270 --> 00:31:30,260 >> HỌC SINH 17: Đóng tập tin? 585 00:31:30,260 --> 00:31:31,510 >> JASON Hirschhorn: Chính xác. 586 00:31:31,510 --> 00:31:36,370 587 00:31:36,370 --> 00:31:37,450 Đóng cửa các tập tin. 588 00:31:37,450 --> 00:31:38,400 Do đó, có giả của chúng tôi. 589 00:31:38,400 --> 00:31:41,870 Tôi sẽ đặt giả vào gedit, và trong một vài phút chúng tôi 590 00:31:41,870 --> 00:31:44,626 sẽ mã này lại với nhau. 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 Chúng ta hãy bắt đầu như là một nhóm. 594 00:33:58,290 --> 00:33:59,940 Nishant, tôi có tập tin mới của tôi. 595 00:33:59,940 --> 00:34:01,130 Tôi vừa mới mở này lên. 596 00:34:01,130 --> 00:34:01,880 Tài liệu tiêu đề 1. 597 00:34:01,880 --> 00:34:05,490 Điều đầu tiên tôi phải làm là gì? 598 00:34:05,490 --> 00:34:07,040 >> NISHANT: Bao gồm các thư viện? 599 00:34:07,040 --> 00:34:08,219 >> JASON Hirschhorn: OK. 600 00:34:08,219 --> 00:34:11,070 Những gì thư viện? 601 00:34:11,070 --> 00:34:17,570 >> NISHANT: stdio.h, stdlib.h, tôi tin rằng? 602 00:34:17,570 --> 00:34:18,000 >> JASON Hirschhorn: OK. 603 00:34:18,000 --> 00:34:21,592 Stdlib cho là gì? 604 00:34:21,592 --> 00:34:23,010 >> NISHANT: Tôi quên. 605 00:34:23,010 --> 00:34:23,219 >> JASON Hirschhorn: OK. 606 00:34:23,219 --> 00:34:24,179 Vì vậy, bao gồm stdio. 607 00:34:24,179 --> 00:34:28,630 Tôi nên làm gì ngay cả trước khi Tôi bắt đầu viết mã? 608 00:34:28,630 --> 00:34:29,710 >> NISHANT: Viết tiêu đề? 609 00:34:29,710 --> 00:34:31,830 >> JASON Hirschhorn: Làm thế nào Tôi làm cho nó màu? 610 00:34:31,830 --> 00:34:34,060 >> [Interposing TIẾNG NÓI] 611 00:34:34,060 --> 00:34:35,040 >> NISHANT: Làm thế nào để bạn nhận được nó màu? 612 00:34:35,040 --> 00:34:38,060 >> JASON Hirschhorn: Làm thế nào Tôi màu sắc mã hóa? 613 00:34:38,060 --> 00:34:38,570 >> NISHANT: Tôi không biết. 614 00:34:38,570 --> 00:34:38,830 Oh. 615 00:34:38,830 --> 00:34:39,389 Tiết kiệm. 616 00:34:39,389 --> 00:34:39,929 >> JASON Hirschhorn: Lưu. 617 00:34:39,929 --> 00:34:40,270 Vâng. 618 00:34:40,270 --> 00:34:41,760 Tôi nên lưu nó như là một c.. 619 00:34:41,760 --> 00:34:46,239 Vì vậy, lưu nó vào máy tính để bàn như cp.c. 620 00:34:46,239 --> 00:34:47,280 Ngọt ngào. 621 00:34:47,280 --> 00:34:51,199 Và nếu tôi muốn nhận được phong cách đầy đủ điểm, những gì nên tôi 622 00:34:51,199 --> 00:34:53,085 bao gồm ở đầu trang? 623 00:34:53,085 --> 00:34:58,390 >> NISHANT: Bạn có thể viết tên, tên của bạn của chương trình, và mục đích 624 00:34:58,390 --> 00:34:59,640 của chương trình không? 625 00:34:59,640 --> 00:35:08,400 626 00:35:08,400 --> 00:35:10,040 >> JASON Hirschhorn: Hình tốt. 627 00:35:10,040 --> 00:35:10,470 Tuyệt vời. 628 00:35:10,470 --> 00:35:12,940 Vì vậy, bạn đã bắt đầu chúng tôi ra một cách hoàn hảo. 629 00:35:12,940 --> 00:35:13,720 # Bao gồm - 630 00:35:13,720 --> 00:35:15,365 chúng tôi cũng sẽ viết - 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 Vì vậy, tôi nghĩ rằng tôi tất cả các thiết lập để đi. 634 00:35:33,520 --> 00:35:38,003 Những người có dòng mã đầu tiên cho tôi - hoặc dòng đầu tiên của mã 635 00:35:38,003 --> 00:35:41,280 nó sẽ làm để đáp ứng đầu tiên của chúng tôi đăng giả? 636 00:35:41,280 --> 00:35:41,985 Bạn. 637 00:35:41,985 --> 00:35:48,780 >> HỌC SINH 18: không nên đó là int argc, và sau đó char * argv? 638 00:35:48,780 --> 00:35:49,490 >> JASON Hirschhorn: Tôi nghĩ rằng bạn nói đúng. 639 00:35:49,490 --> 00:35:56,270 Chúng ta hãy thay đổi nó để int main, dấu ngoặc mở, int argc, dấu phẩy, char * argv? 640 00:35:56,270 --> 00:35:57,150 Như thế? 641 00:35:57,150 --> 00:35:57,410 >> HỌC SINH 18: Chân đế. 642 00:35:57,410 --> 00:35:58,260 >> JASON Hirschhorn: Chân đế. 643 00:35:58,260 --> 00:35:59,860 Mở khung, khung gần, cha mẹ gần. 644 00:35:59,860 --> 00:36:00,240 Hoàn hảo. 645 00:36:00,240 --> 00:36:02,160 Bây giờ tôi có thể đối số dòng lệnh. 646 00:36:02,160 --> 00:36:02,430 OK. 647 00:36:02,430 --> 00:36:04,250 Đảm bảo chúng tôi đang đưa ra hai tập tin. 648 00:36:04,250 --> 00:36:07,905 Bạn có thể cho tôi đó là tốt. 649 00:36:07,905 --> 00:36:09,180 >> HỌC SINH 18: Nếu argc - 650 00:36:09,180 --> 00:36:11,060 này không bằng 3. 651 00:36:11,060 --> 00:36:14,360 >> JASON Hirschhorn: Nếu dấu ngoặc mở argc không bằng 3? 652 00:36:14,360 --> 00:36:16,970 >> HỌC SINH 18: Vâng, bạn quay trở lại 1 hoặc bất cứ điều gì. 653 00:36:16,970 --> 00:36:17,460 >> JASON Hirschhorn: Xin lỗi. 654 00:36:17,460 --> 00:36:19,120 >> HỌC SINH 18: Quay trở lại 1 hoặc bất cứ điều gì. 655 00:36:19,120 --> 00:36:20,270 >> JASON Hirschhorn: Trở về 1. 656 00:36:20,270 --> 00:36:22,230 OK? 657 00:36:22,230 --> 00:36:22,970 Tuyệt vời. 658 00:36:22,970 --> 00:36:24,290 Mở cả hai tập tin. 659 00:36:24,290 --> 00:36:26,160 Ai có thể giúp tôi mở cả hai tập tin? 660 00:36:26,160 --> 00:36:28,125 Người đã không cho tôi đang chưa? 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: Vì vậy, tất cả các mũ F-I-L-E nguồn sao. 664 00:36:36,145 --> 00:36:39,390 665 00:36:39,390 --> 00:36:40,920 >> JASON Hirschhorn: Tôi sẽ để đưa ra các nguyên âm. 666 00:36:40,920 --> 00:36:41,570 Đó là mát mẻ. 667 00:36:41,570 --> 00:36:42,716 Nó giống như Tumblr. 668 00:36:42,716 --> 00:36:44,610 >> HỌC SINH 18: Bình đẳng fopen - 669 00:36:44,610 --> 00:36:46,612 >> JASON Hirschhorn: Bình đẳng fopen? 670 00:36:46,612 --> 00:36:49,870 >> HỌC SINH 18: Mở dấu ngoặc, argv, khung mở. 671 00:36:49,870 --> 00:36:50,055 >> JASON Hirschhorn: Chờ. 672 00:36:50,055 --> 00:36:50,240 Xin lôi. 673 00:36:50,240 --> 00:36:51,050 Mở dấu ngoặc. 674 00:36:51,050 --> 00:36:51,456 OK. 675 00:36:51,456 --> 00:36:53,080 >> HỌC SINH 18: Vâng. 676 00:36:53,080 --> 00:36:55,110 Argv phụ 1. 677 00:36:55,110 --> 00:36:55,860 >> JASON Hirschhorn: Sub 1? 678 00:36:55,860 --> 00:36:56,140 >> HỌC SINH 18: Vâng. 679 00:36:56,140 --> 00:36:58,540 Argv khung mở 1 - 680 00:36:58,540 --> 00:36:59,730 Vâng. 681 00:36:59,730 --> 00:37:06,470 Và sau đó dấu phẩy, và sau đó mở đôi giá, r, giá gấp đôi, 682 00:37:06,470 --> 00:37:08,250 dấu ngoặc đóng, dấu chấm phẩy. 683 00:37:08,250 --> 00:37:09,450 >> JASON Hirschhorn: Sweet. 684 00:37:09,450 --> 00:37:10,950 Và những gì về một trong những khác? 685 00:37:10,950 --> 00:37:16,030 >> HỌC SINH 18: Rất tương tự, nhưng thay vì S-R-C, bạn muốn gọi nó là D-S-T. 686 00:37:16,030 --> 00:37:17,060 >> JASON Hirschhorn: Oo! 687 00:37:17,060 --> 00:37:17,772 Tôi thích điều đó. 688 00:37:17,772 --> 00:37:20,010 >> HỌC SINH 18: Chỉ cần D-S-T. Yeah. 689 00:37:20,010 --> 00:37:23,057 Và sau đó argv, mở khung, 2. 690 00:37:23,057 --> 00:37:23,200 Yeah. 691 00:37:23,200 --> 00:37:26,720 Và sau đó w thay vì r. 692 00:37:26,720 --> 00:37:27,620 Yeah. 693 00:37:27,620 --> 00:37:29,630 >> JASON Hirschhorn: Great. 694 00:37:29,630 --> 00:37:31,360 Vài dòng. 695 00:37:31,360 --> 00:37:34,040 Ngoài ra, nếu ai có điều để thêm vào đường mà chúng tôi đã thực hiện, cảm thấy tự do 696 00:37:34,040 --> 00:37:35,690 thêm những người là tốt. 697 00:37:35,690 --> 00:37:37,520 Kiểm tra để đảm bảo không là NULL. 698 00:37:37,520 --> 00:37:41,450 Ai có thể cho tôi mã tôi cần phải đáp ứng mà dòng giả? 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 >> CUNG: Nếu src bằng bình đẳng NULL hoặc dst bằng bình đẳng 702 00:37:58,645 --> 00:38:04,590 NULL, sau đó bạn quay trở lại - 703 00:38:04,590 --> 00:38:07,130 704 00:38:07,130 --> 00:38:07,976 >> JASON Hirschhorn: Cái gì? 705 00:38:07,976 --> 00:38:08,890 >> CUNG: Trở về 2? 706 00:38:08,890 --> 00:38:09,760 >> JASON Hirschhorn: Trở về 2. 707 00:38:09,760 --> 00:38:14,400 Vì vậy, nếu mở dấu ngoặc src bằng bằng NULL, hoặc - 708 00:38:14,400 --> 00:38:15,590 bất cứ điều gì mà thing's - ống? 709 00:38:15,590 --> 00:38:16,346 Ống? 710 00:38:16,346 --> 00:38:17,140 Chúng tôi sẽ gọi nó là đường ống. 711 00:38:17,140 --> 00:38:22,340 Đường ống, đường ống, dst bằng bình đẳng NULL, trả lại 2. 712 00:38:22,340 --> 00:38:23,900 OK? 713 00:38:23,900 --> 00:38:26,060 Cho đến khi chúng tôi ra khỏi byte - 714 00:38:26,060 --> 00:38:29,820 chúng tôi loại bỏ qua bước này từ phần giả để đi đến đây. 715 00:38:29,820 --> 00:38:31,970 >> Nhưng cho đến khi chúng tôi ra khỏi byte - những gì âm thanh mà không như thế nào? 716 00:38:31,970 --> 00:38:34,680 Loại cấu trúc C - 717 00:38:34,680 --> 00:38:36,160 nhưng tôi không sử dụng cấu trúc từ, bởi vì chúng ta sẽ bắt đầu sử dụng 718 00:38:36,160 --> 00:38:37,350 mà trong trường hợp khác - 719 00:38:37,350 --> 00:38:39,495 nhưng C công cụ không âm thanh như thế nào? 720 00:38:39,495 --> 00:38:39,970 >> HỌC SINH 19: Một vòng lặp. 721 00:38:39,970 --> 00:38:40,980 >> JASON Hirschhorn: Một vòng lặp. 722 00:38:40,980 --> 00:38:43,060 Nghe có vẻ như một vòng lặp. 723 00:38:43,060 --> 00:38:49,670 Vì vậy, những người có thể cung cấp cho tôi những dòng đầu tiên của mã vòng lặp ở đây? 724 00:38:49,670 --> 00:38:56,320 725 00:38:56,320 --> 00:39:01,980 Bạn cũng có thể chọn những loại vòng lặp mà bạn muốn, nếu bạn cho tôi 726 00:39:01,980 --> 00:39:03,215 dòng mã này. 727 00:39:03,215 --> 00:39:04,150 Có ba loại. 728 00:39:04,150 --> 00:39:06,530 Bạn có thể chọn. 729 00:39:06,530 --> 00:39:08,080 Tôi sẽ đề nghị một trong những. 730 00:39:08,080 --> 00:39:08,410 Avi. 731 00:39:08,410 --> 00:39:09,230 Mà một trong những bạn muốn? 732 00:39:09,230 --> 00:39:09,960 >> AVI: CHO. 733 00:39:09,960 --> 00:39:11,460 >> JASON Hirschhorn: CHO. 734 00:39:11,460 --> 00:39:15,180 >> AVI: int i bằng số không. 735 00:39:15,180 --> 00:39:17,360 >> JASON Hirschhorn: OK. 736 00:39:17,360 --> 00:39:18,570 >> AVI: Phần này tôi không chắc chắn về. 737 00:39:18,570 --> 00:39:29,080 Nhưng tôi nhỏ hơn kích thước nguồn sao? 738 00:39:29,080 --> 00:39:31,128 Tôi không chắc chắn về điều đó. 739 00:39:31,128 --> 00:39:32,580 >> JASON Hirschhorn: OK. 740 00:39:32,580 --> 00:39:35,870 >> AVI: Bởi vì bạn muốn kích thước của một tập tin, phải không? 741 00:39:35,870 --> 00:39:41,090 >> JASON Hirschhorn: Vì vậy, đây có lẽ sẽ không cung cấp cho chúng tôi kích thước của thực tế 742 00:39:41,090 --> 00:39:43,010 tập tin trong byte. 743 00:39:43,010 --> 00:39:47,680 Vì vậy, những gì khác chúng ta có thể làm gì? 744 00:39:47,680 --> 00:39:48,810 Một dạng khác của vòng lặp là gì? 745 00:39:48,810 --> 00:39:50,180 Hoặc chúng ta nên dính với các vòng lặp FOR? 746 00:39:50,180 --> 00:39:55,350 747 00:39:55,350 --> 00:39:57,900 >> HỌC SINH 20: Bạn có thể làm một vòng lặp while? 748 00:39:57,900 --> 00:40:01,350 Và sau đó, những gì bạn muốn làm là bạn mong - 749 00:40:01,350 --> 00:40:03,930 bởi vì chúng ta có một char * cho các tập tin. 750 00:40:03,930 --> 00:40:07,950 Vì vậy, nếu chúng ta chỉ cần giữ cách tăng mà cho đến khi chúng tôi tìm thấy những nhân vật NULL tại 751 00:40:07,950 --> 00:40:08,500 kết thúc của nó? 752 00:40:08,500 --> 00:40:11,130 Hoặc không có, đó là không phải là cách tập tin làm việc? 753 00:40:11,130 --> 00:40:14,300 >> JASON Hirschhorn: Vì vậy, chúng ta có thể giữ incrementing char * 754 00:40:14,300 --> 00:40:16,340 cho đến khi chúng ta tìm thấy NULL - 755 00:40:16,340 --> 00:40:18,580 >> HỌC SINH 20: Về cơ bản tiếp tục đi nhân vật của nhân vật cho đến khi chúng ta nhấn 756 00:40:18,580 --> 00:40:21,250 cuối của tập tin. 757 00:40:21,250 --> 00:40:21,600 >> JASON Hirschhorn: Có. 758 00:40:21,600 --> 00:40:22,560 Vì vậy, đó là những gì chúng tôi muốn làm. 759 00:40:22,560 --> 00:40:24,545 Chúng tôi muốn tiếp tục đọc, nhân vật của nhân vật, cho đến khi chúng tôi nhận được 760 00:40:24,545 --> 00:40:25,080 cuối của tập tin. 761 00:40:25,080 --> 00:40:25,375 >> HỌC SINH 20: Vâng. 762 00:40:25,375 --> 00:40:25,860 Tìm - 763 00:40:25,860 --> 00:40:28,540 kết thúc hoặc dấu hiệu dừng lại là những gì ở cuối của một tập tin văn bản. 764 00:40:28,540 --> 00:40:28,620 >> JASON Hirschhorn: OK. 765 00:40:28,620 --> 00:40:30,140 Vì vậy, khi chúng tôi nhận được vào cuối của tập tin - làm thế nào để chúng ta biết chúng ta đã đạt đến 766 00:40:30,140 --> 00:40:33,200 kết thúc của một tập tin? 767 00:40:33,200 --> 00:40:34,710 Nếu tôi gọi điện thoại - 768 00:40:34,710 --> 00:40:35,910 vì vậy hãy bước trở lại. 769 00:40:35,910 --> 00:40:37,550 Một chức năng là gì? 770 00:40:37,550 --> 00:40:39,360 Chúng ta hãy đi đến dòng này ngay tại đây. 771 00:40:39,360 --> 00:40:40,630 Đọc từ tập tin nguồn. 772 00:40:40,630 --> 00:40:41,880 Ai có thể cho tôi rằng dòng mã? 773 00:40:41,880 --> 00:40:45,592 774 00:40:45,592 --> 00:40:47,590 >> HỌC SINH 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 Những gì nếu tôi muốn đọc, rất đặc biệt, một byte? 778 00:40:52,240 --> 00:40:55,012 779 00:40:55,012 --> 00:40:56,860 >> HỌC SINH 21: Tôi không biết. 780 00:40:56,860 --> 00:40:57,110 >> JASON Hirschhorn: OK. 781 00:40:57,110 --> 00:40:59,380 Thậm chí đơn giản hơn fscanf - là những gì một - 782 00:40:59,380 --> 00:41:01,890 Tôi muốn đọc từ một tập tin nguồn? 783 00:41:01,890 --> 00:41:03,720 Đọc từ một tập tin nguồn. 784 00:41:03,720 --> 00:41:04,850 Một chức năng là những gì - yeah. 785 00:41:04,850 --> 00:41:05,380 >> HỌC SINH 22: Đó là fread? 786 00:41:05,380 --> 00:41:06,070 >> JASON Hirschhorn: fread. 787 00:41:06,070 --> 00:41:07,550 Tôi nghĩ rằng chúng ta hãy gắn bó với là một trong những cho bây giờ. 788 00:41:07,550 --> 00:41:10,380 789 00:41:10,380 --> 00:41:13,650 Loại đối số không fread nào? 790 00:41:13,650 --> 00:41:17,410 >> HỌC SINH 22: Có thể là các loại tập tin, và sau đó vị trí trong tập tin? 791 00:41:17,410 --> 00:41:19,550 >> JASON Hirschhorn: tôi có thể loại gì đây để tìm ra loại của các đối số 792 00:41:19,550 --> 00:41:20,950 fread mất? 793 00:41:20,950 --> 00:41:23,710 >> SINH VIÊN NHIỀU: Man fread. 794 00:41:23,710 --> 00:41:24,740 >> JASON Hirschhorn: Man fread và fwrite. 795 00:41:24,740 --> 00:41:25,980 Hình như họ đi chơi với nhau. 796 00:41:25,980 --> 00:41:29,589 Vì vậy, fread có bao nhiêu đối số? 797 00:41:29,589 --> 00:41:30,920 >> HỌC SINH 23: Bốn. 798 00:41:30,920 --> 00:41:32,690 >> JASON Hirschhorn: Phải mất bốn đối số. 799 00:41:32,690 --> 00:41:41,100 Phải mất một con trỏ, kích thước, và điều, đó là kỳ lạ, và một số tập tin. 800 00:41:41,100 --> 00:41:42,000 OK? 801 00:41:42,000 --> 00:41:43,990 Hãy đọc về nó ở đây. 802 00:41:43,990 --> 00:41:49,370 "Chức năng fread đọc n memb các yếu tố dữ liệu, mỗi kích thước byte 803 00:41:49,370 --> 00:41:53,840 dài, từ dòng trỏ đến bởi dòng, lưu trữ chúng ở vị trí 804 00:41:53,840 --> 00:41:56,170 được đưa ra bởi con trỏ. " 805 00:41:56,170 --> 00:41:57,960 >> Vì vậy, bốn đối số. 806 00:41:57,960 --> 00:42:04,510 Tại sao tôi không chỉ cần sao chép này, và dán ngay tại đây. 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 Vì vậy, những người có thể bắt đầu điền những lập luận này cho tôi không? 810 00:42:13,673 --> 00:42:15,840 Avi. 811 00:42:15,840 --> 00:42:17,720 >> AVI: Đi ra khoảng trống. 812 00:42:17,720 --> 00:42:20,530 Đưa chỉ src. 813 00:42:20,530 --> 00:42:23,142 Đưa ra con trỏ và các ngôi sao. 814 00:42:23,142 --> 00:42:26,102 Đặt src. 815 00:42:26,102 --> 00:42:27,050 Sau đó - 816 00:42:27,050 --> 00:42:28,500 >> JASON Hirschhorn: Vì vậy, tôi sẽ dừng lại bạn có, bởi vì đó là không chính xác. 817 00:42:28,500 --> 00:42:32,590 818 00:42:32,590 --> 00:42:34,710 Bạn nói đúng với src, nhưng nơi src nên đi đâu? 819 00:42:34,710 --> 00:42:35,960 >> [Interposing TIẾNG NÓI] 820 00:42:35,960 --> 00:42:38,976 821 00:42:38,976 --> 00:42:41,610 >> JASON Hirschhorn: Nó sẽ đi qua đây. 822 00:42:41,610 --> 00:42:43,790 Đó là src - src của chúng tôi là một loại. 823 00:42:43,790 --> 00:42:44,610 Chúng ta hãy xem đây. 824 00:42:44,610 --> 00:42:49,610 Đây là yêu cầu cho một loại FILE *, chúng tôi thực sự thường nhìn thấy chúng như thế. 825 00:42:49,610 --> 00:42:57,630 Vì vậy, đây là yêu cầu cho một đối số gõ FILE * gọi là dòng đó là src. 826 00:42:57,630 --> 00:42:58,480 OK? 827 00:42:58,480 --> 00:43:00,410 >> Điều gì kích thước của những điều làm chúng tôi muốn đọc? 828 00:43:00,410 --> 00:43:03,340 Tôi đưa cho bạn này trong Mô tả vấn đề. 829 00:43:03,340 --> 00:43:04,370 >> HỌC SINH 24: Một byte tại một thời điểm. 830 00:43:04,370 --> 00:43:05,340 >> JASON Hirschhorn: Một byte. 831 00:43:05,340 --> 00:43:08,205 Làm thế nào lớn là một byte? 832 00:43:08,205 --> 00:43:11,642 Kích thước của nó là trong byte, do đó những gì Tôi có thể đặt ngay tại đó? 833 00:43:11,642 --> 00:43:12,910 >> HỌC SINH 25: Một. 834 00:43:12,910 --> 00:43:14,730 >> JASON Hirschhorn: Một. 835 00:43:14,730 --> 00:43:17,020 Đúng. 836 00:43:17,020 --> 00:43:19,940 Kích thước của nó là trong đơn vị byte, do đó, 1 là 1 byte. 837 00:43:19,940 --> 00:43:22,284 Bao nhiêu tôi muốn đọc tại một thời điểm. 838 00:43:22,284 --> 00:43:23,520 >> HỌC SINH 26: Một? 839 00:43:23,520 --> 00:43:24,270 >> JASON Hirschhorn: Một điều. 840 00:43:24,270 --> 00:43:28,540 Tôi muốn đọc một điều kích thước 1, một vết cắn tại một thời điểm. 841 00:43:28,540 --> 00:43:32,110 Và nơi nào tôi đặt nó, một khi tôi đọc nó? 842 00:43:32,110 --> 00:43:35,050 843 00:43:35,050 --> 00:43:36,510 >> HỌC SINH 27: Điểm đến? 844 00:43:36,510 --> 00:43:39,270 >> JASON Hirschhorn: Vì vậy, tôi không thể đặt nó thẳng vào điểm đến. 845 00:43:39,270 --> 00:43:40,800 >> HỌC SINH 28: Bạn đang đặt sẽ vào một con trỏ thứ ba? 846 00:43:40,800 --> 00:43:41,780 >> HỌC SINH 27: Để đến đích. 847 00:43:41,780 --> 00:43:42,270 >> JASON Hirschhorn: OK. 848 00:43:42,270 --> 00:43:42,630 Yeah. 849 00:43:42,630 --> 00:43:46,820 >> HỌC SINH 29: Bạn có thể khai báo một cái gì đó để hoạt động như một lưu trữ tạm thời trước đó. 850 00:43:46,820 --> 00:43:47,350 >> JASON Hirschhorn: OK. 851 00:43:47,350 --> 00:43:50,080 Đưa cho tôi. 852 00:43:50,080 --> 00:43:53,930 >> HỌC SINH 29: tập tin khác con trỏ, có thể? 853 00:43:53,930 --> 00:43:54,220 >> JASON Hirschhorn: OK. 854 00:43:54,220 --> 00:43:55,585 Vì vậy, đây là khoảng trống sao - 855 00:43:55,585 --> 00:43:57,750 đó là một loại trống sao, do đó nó không phải là một con trỏ tập tin. 856 00:43:57,750 --> 00:44:02,520 Và nếu tôi đọc một byte, nơi sẽ là một nơi tốt 857 00:44:02,520 --> 00:44:03,850 để lưu trữ một byte? 858 00:44:03,850 --> 00:44:04,660 >> HỌC SINH 29: Một mảng? 859 00:44:04,660 --> 00:44:05,770 >> JASON Hirschhorn: Một mảng. 860 00:44:05,770 --> 00:44:07,730 OK. 861 00:44:07,730 --> 00:44:14,040 Và những gì khác là một cái gì đó chỉ kích thước một byte? 862 00:44:14,040 --> 00:44:16,980 863 00:44:16,980 --> 00:44:18,060 >> HỌC SINH 30: Một char *? 864 00:44:18,060 --> 00:44:18,530 >> HỌC SINH 29: Vâng. 865 00:44:18,530 --> 00:44:19,880 >> JASON Hirschhorn: Một char * không phải là một byte. 866 00:44:19,880 --> 00:44:20,440 >> HỌC SINH 29: Một char. 867 00:44:20,440 --> 00:44:21,810 >> JASON Hirschhorn: Một char là một byte. 868 00:44:21,810 --> 00:44:22,920 Phải không? 869 00:44:22,920 --> 00:44:26,740 Vì vậy, chúng ta hãy gọi bộ đệm này là một chung tên sử dụng cho những việc này để lưu trữ 870 00:44:26,740 --> 00:44:27,910 một cái gì đó tạm thời. 871 00:44:27,910 --> 00:44:30,880 Vì vậy, tôi tạo ra một vùng đệm. 872 00:44:30,880 --> 00:44:31,150 Phải không? 873 00:44:31,150 --> 00:44:32,990 Nhưng nó không phải mất một void *. 874 00:44:32,990 --> 00:44:38,660 Như vậy có lẽ bạn là đúng, rằng nó phải là một bộ đệm kích thước 0. 875 00:44:38,660 --> 00:44:41,070 Vì vậy, nó lưu một - 876 00:44:41,070 --> 00:44:41,280 đúng. 877 00:44:41,280 --> 00:44:43,560 >> Vì quyền này đây - char đệm là một nhân vật, nhưng 878 00:44:43,560 --> 00:44:45,110 này có một khoảng trống * - 879 00:44:45,110 --> 00:44:45,870 một con trỏ. 880 00:44:45,870 --> 00:44:50,640 Vì vậy, tôi có thể làm điều này và bây giờ đệm là một con trỏ. 881 00:44:50,640 --> 00:44:53,214 Tôi có thể làm những gì khác? 882 00:44:53,214 --> 00:44:55,775 >> HỌC SINH 31: Đặt một ngôi sao bên cạnh char. 883 00:44:55,775 --> 00:44:58,380 >> JASON Hirschhorn: tôi có thể đã tạo ra nó char *. 884 00:44:58,380 --> 00:45:00,216 OK. 885 00:45:00,216 --> 00:45:03,131 Một điều tôi có thể làm gì? 886 00:45:03,131 --> 00:45:04,050 Hoặc chúng ta hãy đi với một này. 887 00:45:04,050 --> 00:45:05,740 Char * buffer, vì vậy những gì Tôi đặt ở đây? 888 00:45:05,740 --> 00:45:08,290 889 00:45:08,290 --> 00:45:09,310 >> HỌC SINH 31: đệm. 890 00:45:09,310 --> 00:45:10,560 >> JASON Hirschhorn: đệm. 891 00:45:10,560 --> 00:45:12,640 892 00:45:12,640 --> 00:45:14,500 Đệm là một con trỏ đến một char. 893 00:45:14,500 --> 00:45:19,480 Và tại địa điểm đó, chúng tôi đang đặt một byte của một cái gì đó chúng ta đã đọc. 894 00:45:19,480 --> 00:45:19,980 Yeah. 895 00:45:19,980 --> 00:45:20,700 Avi. 896 00:45:20,700 --> 00:45:21,230 >> AVI: Chỉ cần một câu hỏi nhanh chóng. 897 00:45:21,230 --> 00:45:24,440 Bạn có muốn malloc đệm? 898 00:45:24,440 --> 00:45:25,930 >> JASON Hirschhorn: Ai có thể trả lời câu hỏi đó? 899 00:45:25,930 --> 00:45:30,210 >> HỌC SINH 32: Vâng, nó không thực sự điểm để bất cứ điều gì ngay bây giờ, vì vậy - 900 00:45:30,210 --> 00:45:32,610 >> JASON Hirschhorn: Nhưng làm chúng tôi muốn malloc nó? 901 00:45:32,610 --> 00:45:35,600 >> HỌC SINH 32: Nếu bạn đã làm điều đó mà cách nào, tôi đoán, yeah, bởi vì bạn cần 902 00:45:35,600 --> 00:45:36,990 một số nơi cho nó để trỏ đến. 903 00:45:36,990 --> 00:45:38,350 >> JASON Hirschhorn: Chúng ta phải malloc nó? 904 00:45:38,350 --> 00:45:40,580 >> HỌC SINH 33: Nếu bạn đang đi để sử dụng nó bên ngoài vòng lặp. 905 00:45:40,580 --> 00:45:42,524 >> JASON Hirschhorn: Chúng ta sẽ sử dụng nó bên ngoài vòng lặp? 906 00:45:42,524 --> 00:45:44,392 >> HỌC SINH 34: Có. 907 00:45:44,392 --> 00:45:44,860 >> HỌC SINH 35: Chờ. 908 00:45:44,860 --> 00:45:46,980 Chúng ta muốn khai báo trong vòng lặp để ngoài? 909 00:45:46,980 --> 00:45:50,100 >> JASON Hirschhorn: Vì vậy, tôi đoán chúng tôi có một số giả KHI vòng lặp ở đây là chúng tôi 910 00:45:50,100 --> 00:45:51,950 cố gắng tìm ra, mà chúng tôi đã không nhận được nêu ra. 911 00:45:51,950 --> 00:45:54,710 912 00:45:54,710 --> 00:45:56,010 Chúng tôi không cần phải malloc nó. 913 00:45:56,010 --> 00:45:59,310 Chúng tôi đang hoạt động trong chính, nó chỉ có được sử dụng trong vòng lặp này. 914 00:45:59,310 --> 00:46:00,540 Nó không cần phải tồn tại bên ngoài này. 915 00:46:00,540 --> 00:46:02,340 >> Vì vậy, nó có thể là một biến địa phương. 916 00:46:02,340 --> 00:46:03,925 Bạn có một con trỏ đến một biến địa phương. 917 00:46:03,925 --> 00:46:07,984 918 00:46:07,984 --> 00:46:09,590 >> HỌC SINH 36: Nhưng nó không phải trỏ đến bất cứ điều gì. 919 00:46:09,590 --> 00:46:11,540 >> JASON Hirschhorn: Không, nó không phải khởi tạo bất cứ điều gì. 920 00:46:11,540 --> 00:46:12,790 Nhưng chúng tôi sẽ không sử dụng nó cũng có. 921 00:46:12,790 --> 00:46:15,300 Chúng ta sẽ đặt một cái gì đó trong nó lần đầu tiên chúng tôi sử dụng nó. 922 00:46:15,300 --> 00:46:16,580 Vì vậy, có vẻ OK. 923 00:46:16,580 --> 00:46:17,780 Vì vậy, chúng ta không cần malloc đây. 924 00:46:17,780 --> 00:46:19,360 Và tôi nghĩ rằng đó là OK như là. 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 Chúng tôi có dòng fread. 928 00:46:27,190 --> 00:46:28,490 Chúng ta hãy làm dòng tiếp theo. 929 00:46:28,490 --> 00:46:32,984 >> Nếu chúng ta muốn ghi vào một tập tin, là những gì một chức năng tốt để sử dụng để làm điều đó? 930 00:46:32,984 --> 00:46:33,770 >> HỌC SINH 37: fwrite? 931 00:46:33,770 --> 00:46:35,140 >> HỌC SINH 38: fprintf? 932 00:46:35,140 --> 00:46:36,010 >> JASON Hirschhorn: fprintf là một. 933 00:46:36,010 --> 00:46:37,260 Nhau là những gì? 934 00:46:37,260 --> 00:46:37,680 >> HỌC SINH 39: fwrite. 935 00:46:37,680 --> 00:46:38,510 >> JASON Hirschhorn: fwrite. 936 00:46:38,510 --> 00:46:41,250 Và cho các mục đích của chúng tôi, fwrite, mà chúng tôi thấy ở đây, là 937 00:46:41,250 --> 00:46:42,500 có lẽ là lựa chọn tốt hơn. 938 00:46:42,500 --> 00:46:51,970 939 00:46:51,970 --> 00:46:53,950 Nó có bốn đối số là tốt. 940 00:46:53,950 --> 00:46:57,570 Nishant, bạn có thể cung cấp cho tôi lập luận? 941 00:46:57,570 --> 00:47:00,570 >> NISHANT: Người đầu tiên của đang diễn ra được chỉ đệm. 942 00:47:00,570 --> 00:47:02,210 >> JASON Hirschhorn: OK. 943 00:47:02,210 --> 00:47:06,752 >> NISHANT: Người thứ hai chỉ có được 1. 944 00:47:06,752 --> 00:47:09,510 Một phần ba sẽ là 1. 945 00:47:09,510 --> 00:47:11,470 Và một trong những thứ tư là có được dst. 946 00:47:11,470 --> 00:47:18,010 947 00:47:18,010 --> 00:47:19,550 >> JASON Hirschhorn: Không ai có thắc mắc về dòng? 948 00:47:19,550 --> 00:47:28,370 949 00:47:28,370 --> 00:47:29,130 Điều đó có vẻ tốt. 950 00:47:29,130 --> 00:47:29,590 OK. 951 00:47:29,590 --> 00:47:34,250 Vì vậy bây giờ nó trông giống như một điều chúng tôi mất tích - trên thực tế, chúng ta hãy viết 952 00:47:34,250 --> 00:47:35,090 dòng cuối cùng này. 953 00:47:35,090 --> 00:47:36,300 Đóng cửa các tập tin. 954 00:47:36,300 --> 00:47:38,880 Những người có thể kết thúc chúng tôi lên văn bản hai dòng cuối cùng này? 955 00:47:38,880 --> 00:47:39,120 Vâng. 956 00:47:39,120 --> 00:47:39,850 Xin lỗi, tên của bạn là gì? 957 00:47:39,850 --> 00:47:40,580 >> Lucy: Lucy. 958 00:47:40,580 --> 00:47:41,580 >> JASON Hirschhorn: Lucy. 959 00:47:41,580 --> 00:47:47,560 >> LUCY: src fclose và sau đó điểm đến fclose. 960 00:47:47,560 --> 00:47:52,430 >> JASON Hirschhorn: fclose, mở dấu ngoặc, src, dấu ngoặc đóng, dấu chấm phẩy. 961 00:47:52,430 --> 00:47:53,680 Và fclose - 962 00:47:53,680 --> 00:47:57,560 963 00:47:57,560 --> 00:47:58,090 yeah? 964 00:47:58,090 --> 00:48:01,710 >> LUCY: Mở ngoặc đơn, dst và sau đó chấm phẩy. 965 00:48:01,710 --> 00:48:02,520 >> JASON Hirschhorn: Great. 966 00:48:02,520 --> 00:48:04,338 Và những gì tôi nên bao gồm ở cuối? 967 00:48:04,338 --> 00:48:05,210 >> LUCY: Trở về 0. 968 00:48:05,210 --> 00:48:05,570 >> JASON Hirschhorn: Trở về 0. 969 00:48:05,570 --> 00:48:06,820 Tôi có phải? 970 00:48:06,820 --> 00:48:10,560 971 00:48:10,560 --> 00:48:12,590 Chỉ là một câu hỏi. 972 00:48:12,590 --> 00:48:14,957 Chúng ta phải bao gồm trở về 0? 973 00:48:14,957 --> 00:48:16,240 >> SINH VIÊN NHIỀU: số 974 00:48:16,240 --> 00:48:16,430 >> JASON Hirschhorn: số 975 00:48:16,430 --> 00:48:18,090 Chính không nó sẽ tự động nếu bạn nhận được đến cùng. 976 00:48:18,090 --> 00:48:20,580 Nhưng tôi nghĩ rằng nó tốt đẹp để bao gồm nó một cách rõ ràng. 977 00:48:20,580 --> 00:48:23,860 Đặc biệt là khi chúng tôi đang trở về khác việc trong suốt chương trình. 978 00:48:23,860 --> 00:48:24,810 OK. 979 00:48:24,810 --> 00:48:26,230 Đây là những gì chúng ta đang thiếu - 980 00:48:26,230 --> 00:48:28,520 KHI gì? 981 00:48:28,520 --> 00:48:31,630 Ai có thể nghĩ đến một số - 982 00:48:31,630 --> 00:48:35,240 có một số ý nghĩa của những điều có thể đi vào đó? 983 00:48:35,240 --> 00:48:37,350 Ngay cả khi nó chỉ là trong một số giả như ngôn ngữ? 984 00:48:37,350 --> 00:48:41,330 >> Chúng tôi là những gì thực sự - những gì Chúng ta muốn đi đến? 985 00:48:41,330 --> 00:48:41,980 Yeah, Lucy. 986 00:48:41,980 --> 00:48:43,240 >> LUCY: Sự kết thúc của tập tin. 987 00:48:43,240 --> 00:48:44,990 >> JASON Hirschhorn: Sự kết thúc của tập tin. 988 00:48:44,990 --> 00:48:49,280 Vì vậy, những gì bạn có nghĩa là vào cuối của tập tin? 989 00:48:49,280 --> 00:48:50,955 >> LUCY: Một khi bạn đạt đến cuối của tập tin, dừng lại. 990 00:48:50,955 --> 00:48:51,240 >> JASON Hirschhorn: OK. 991 00:48:51,240 --> 00:48:53,460 Vì vậy, một khi chúng ta đạt được kết thúc của tập tin. 992 00:48:53,460 --> 00:48:56,893 Làm thế nào để chúng ta biết khi nào chúng tôi đã đạt đến kết thúc của tập tin? 993 00:48:56,893 --> 00:48:59,900 >> HỌC SINH 40: Tôi nghĩ rằng bộ đệm sẽ được thiết lập để NULL. 994 00:48:59,900 --> 00:49:01,885 >> HỌC SINH 41: đệm được khai báo bên trong vòng lặp. 995 00:49:01,885 --> 00:49:03,670 >> JASON Hirschhorn: Vì vậy, bạn nghĩ bộ đệm sẽ được thiết lập để NULL. 996 00:49:03,670 --> 00:49:05,850 Tại sao đệm được thiết lập để NULL? 997 00:49:05,850 --> 00:49:10,420 >> HỌC SINH 40: Bởi vì khi bạn fread, bạn đang cố gắng để đưa 998 00:49:10,420 --> 00:49:13,528 không có gì vào bộ đệm. 999 00:49:13,528 --> 00:49:13,980 >> JASON Hirschhorn: OK. 1000 00:49:13,980 --> 00:49:15,550 Vì vậy, bạn đang suy nghĩ fread - 1001 00:49:15,550 --> 00:49:19,000 khi chúng tôi đã đạt đến kết thúc của tập tin, những gì đang fread sẽ làm gì? 1002 00:49:19,000 --> 00:49:21,230 Tôi nghĩ rằng đó là câu hỏi chúng ta phải tìm ra. 1003 00:49:21,230 --> 00:49:21,960 Không fread làm những gì? 1004 00:49:21,960 --> 00:49:25,640 Nó đặt NULL trong bộ đệm, hoặc nó làm cái gì khác? 1005 00:49:25,640 --> 00:49:27,510 Làm thế nào chúng ta có thể tìm ra những gì nó? 1006 00:49:27,510 --> 00:49:28,190 >> HỌC SINH 42: Man. 1007 00:49:28,190 --> 00:49:28,810 >> JASON Hirschhorn: Man. 1008 00:49:28,810 --> 00:49:32,280 Vì vậy, chúng ta hãy nhìn qua đây. 1009 00:49:32,280 --> 00:49:34,000 Trả lại giá trị. 1010 00:49:34,000 --> 00:49:39,620 Thành công, fread và fwrite trả lại số hạng mục đọc hoặc bằng văn bản. 1011 00:49:39,620 --> 00:49:43,700 Con số này tương đương với số byte chuyển khi kích thước là 1. 1012 00:49:43,700 --> 00:49:47,780 Nếu lỗi xảy ra, hoặc kết thúc tập tin được đạt tới, giá trị trả về là một 1013 00:49:47,780 --> 00:49:51,490 số mặt hàng ngắn hoặc 0. 1014 00:49:51,490 --> 00:49:57,860 >> Vì vậy, mục đích của chúng tôi, nếu đạt fread cuối của tập tin, và đọc từ 1015 00:49:57,860 --> 00:50:02,100 cuối tập tin, không có gì để lại là đọc, những gì nó sẽ trở lại? 1016 00:50:02,100 --> 00:50:03,290 >> HỌC SINH 43: Zero? 1017 00:50:03,290 --> 00:50:04,540 >> JASON Hirschhorn: Cái gì? 1018 00:50:04,540 --> 00:50:05,300 >> HỌC SINH 43: Zero? 1019 00:50:05,300 --> 00:50:05,690 >> JASON Hirschhorn: Zero. 1020 00:50:05,690 --> 00:50:06,940 Nó sẽ trở lại bằng không. 1021 00:50:06,940 --> 00:50:09,360 1022 00:50:09,360 --> 00:50:13,010 Vì vậy, chúng ta biết rằng fread, khi chúng tôi đã đạt đến kết thúc của tập tin, sẽ 1023 00:50:13,010 --> 00:50:13,690 trở về số không. 1024 00:50:13,690 --> 00:50:17,460 Làm thế nào chúng ta có thể sử dụng để lợi thế của chúng tôi? 1025 00:50:17,460 --> 00:50:21,733 >> AVI: Bạn có thể khai báo một biến bên ngoài của vòng lặp được gọi là kiểm tra. 1026 00:50:21,733 --> 00:50:27,040 Nếu kiểm tra bằng - 1027 00:50:27,040 --> 00:50:28,190 bây giờ - một. 1028 00:50:28,190 --> 00:50:28,920 >> JASON Hirschhorn: OK. 1029 00:50:28,920 --> 00:50:38,050 >> AVI: Và sau đó bạn có thể đặt một IF tuyên bố ngay sau khi fread nói rằng nếu 1030 00:50:38,050 --> 00:50:42,600 fread bằng không - 1031 00:50:42,600 --> 00:50:43,850 không. 1032 00:50:43,850 --> 00:50:46,002 1033 00:50:46,002 --> 00:50:47,252 >> JASON Hirschhorn: Ai có thể giúp Avi ra? 1034 00:50:47,252 --> 00:50:49,690 1035 00:50:49,690 --> 00:50:52,410 >> AVI: giá trị là gì trả về bởi fread? 1036 00:50:52,410 --> 00:50:54,060 >> JASON Hirschhorn: Chúng tôi chỉ đã đi qua đó. 1037 00:50:54,060 --> 00:50:55,450 >> AVI: Làm thế nào để đại diện cho nó? 1038 00:50:55,450 --> 00:50:57,190 >> JASON Hirschhorn: Vì vậy, nó sẽ trả về - hãy tìm ở đây - nó trả về một 1039 00:50:57,190 --> 00:50:59,340 size_t, mà chủ yếu là một số nguyên. 1040 00:50:59,340 --> 00:51:02,240 1041 00:51:02,240 --> 00:51:03,410 Vì vậy, nó sẽ trả về một số nguyên. 1042 00:51:03,410 --> 00:51:05,160 Và trong trường hợp của chúng tôi, nó sẽ trở về 1 hoặc 0 - 1043 00:51:05,160 --> 00:51:08,760 1 nếu nó đọc một điều - một byte, và 0 nếu chúng ta đã đạt đến kết thúc. 1044 00:51:08,760 --> 00:51:13,560 1045 00:51:13,560 --> 00:51:16,450 Vì vậy, nếu fread - 1046 00:51:16,450 --> 00:51:16,855 yeah? 1047 00:51:16,855 --> 00:51:20,330 >> HỌC SINH 45: Có thể bạn không chỉ cần đặt đầy đủ fread (buffer, 1, 1, src) vào 1048 00:51:20,330 --> 00:51:21,660 trong khi vòng lặp? 1049 00:51:21,660 --> 00:51:26,510 >> JASON Hirschhorn: Vì vậy, bạn đề nghị làm điều này vào đó? 1050 00:51:26,510 --> 00:51:27,600 >> [Interposing TIẾNG NÓI] 1051 00:51:27,600 --> 00:51:29,520 >> JASON Hirschhorn: Chờ chút. 1052 00:51:29,520 --> 00:51:30,885 Vì vậy, chúng ta đang thoát khỏi điều đó. 1053 00:51:30,885 --> 00:51:33,300 Vì vậy, bạn đang đề xuất đưa fread vào đó? 1054 00:51:33,300 --> 00:51:35,457 Những gì chúng ta có nên di chuyển nếu bạn muốn làm điều đó? 1055 00:51:35,457 --> 00:51:36,740 >> HỌC SINH 45: Các bộ đệm bên ngoài. 1056 00:51:36,740 --> 00:51:38,110 >> JASON Hirschhorn: Chúng ta nên cũng di chuyển này ra đây. 1057 00:51:38,110 --> 00:51:41,700 >> HỌC SINH 45: Nhưng liệu liên tục di chuyển nó về phía trước? 1058 00:51:41,700 --> 00:51:42,950 >> [Interposing TIẾNG NÓI] 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 Vì vậy, đây là những gì Okshar đề xuất. 1062 00:51:50,570 --> 00:51:51,930 Chúng tôi tạo ra đệm của chúng tôi. 1063 00:51:51,930 --> 00:51:57,020 Chúng tôi KHI fread, sau đó chúng tôi fwrite. 1064 00:51:57,020 --> 00:51:59,760 Suy nghĩ về điều này? 1065 00:51:59,760 --> 00:52:04,050 >> HỌC SINH 46: Câu hỏi duy nhất của tôi là, sẽ nó thực sự thực hiện lệnh fread? 1066 00:52:04,050 --> 00:52:06,175 >> JASON Hirschhorn: Great câu hỏi. 1067 00:52:06,175 --> 00:52:11,050 Khi bạn đang đặt một cuộc gọi chức năng bên trong một điều kiện, thực hiện điều đó 1068 00:52:11,050 --> 00:52:12,300 chức năng gọi thực hiện? 1069 00:52:12,300 --> 00:52:15,760 1070 00:52:15,760 --> 00:52:17,770 Chúng tôi đã nhìn thấy những ví dụ về điều này trước khi. 1071 00:52:17,770 --> 00:52:24,900 1072 00:52:24,900 --> 00:52:25,660 Phải không? 1073 00:52:25,660 --> 00:52:26,125 >> HỌC SINH 46: OK. 1074 00:52:26,125 --> 00:52:26,590 Yeah. 1075 00:52:26,590 --> 00:52:30,140 Vì vậy, nó thực thi. 1076 00:52:30,140 --> 00:52:31,790 >> JASON Hirschhorn: Chúng tôi đã nhìn thấy những điều như trước đây, nơi chúng tôi có một 1077 00:52:31,790 --> 00:52:33,550 chức năng cuộc gọi bên trong một điều kiện. 1078 00:52:33,550 --> 00:52:35,540 Điều đó có chức năng gọi thực hiện? 1079 00:52:35,540 --> 00:52:36,350 Vâng. 1080 00:52:36,350 --> 00:52:37,410 Vì vậy, câu trả lời là có. 1081 00:52:37,410 --> 00:52:41,010 Cuộc gọi chức năng này sẽ thực hiện. 1082 00:52:41,010 --> 00:52:42,418 Nhưng một lần nữa, là nó những gì chúng ta muốn? 1083 00:52:42,418 --> 00:52:49,250 1084 00:52:49,250 --> 00:52:52,204 >> Một trong những cách chúng ta có thể hình dung là những gì hiểu xem đó là những gì chúng ta muốn? 1085 00:52:52,204 --> 00:52:53,470 >> SINH VIÊN NHIỀU: Chạy nó? 1086 00:52:53,470 --> 00:52:54,460 >> JASON Hirschhorn: Chúng ta có thể chạy nó. 1087 00:52:54,460 --> 00:52:57,500 Nhưng trước khi chúng tôi làm điều đó, chúng ta có thể cũng thông qua lý do này. 1088 00:52:57,500 --> 00:52:57,920 Nếu - 1089 00:52:57,920 --> 00:53:01,920 nói rằng chúng ta có một byte trong của chúng tôi tập tin, chúng tôi sẽ nhận được ở đây, 1090 00:53:01,920 --> 00:53:02,660 chúng tôi sẽ nhận được mã này. 1091 00:53:02,660 --> 00:53:03,620 Điều này sẽ chạy. 1092 00:53:03,620 --> 00:53:07,780 fread sẽ trở lại một byte và lưu trữ nó trong bộ đệm. 1093 00:53:07,780 --> 00:53:11,290 Và điều này sẽ đánh giá 1, bên phải, sau khi ông trả về 1. 1094 00:53:11,290 --> 00:53:12,640 >> Vì vậy, TRONG KHI 1. 1095 00:53:12,640 --> 00:53:15,325 Điều đó có nghĩa là các mã bên trong các vòng lặp while sẽ thực hiện? 1096 00:53:15,325 --> 00:53:15,453 >> HỌC SINH 47: Vâng. 1097 00:53:15,453 --> 00:53:16,040 Đó là sự thật. 1098 00:53:16,040 --> 00:53:16,290 >> JASON Hirschhorn: Có. 1099 00:53:16,290 --> 00:53:17,490 1 là đúng. 1100 00:53:17,490 --> 00:53:18,240 Nó không phải là 0. 1101 00:53:18,240 --> 00:53:20,360 Vì vậy, các mã bên trong đây sẽ thực hiện. 1102 00:53:20,360 --> 00:53:22,300 Vì vậy, chúng tôi sẽ viết đó. 1103 00:53:22,300 --> 00:53:25,340 Chúng tôi sẽ quay trở lại này đường một lần nữa. 1104 00:53:25,340 --> 00:53:26,850 Bây giờ chúng ta có - 1105 00:53:26,850 --> 00:53:28,550 chúng ta đang ở cuối của tập tin của chúng tôi. 1106 00:53:28,550 --> 00:53:30,980 Chúng ta đọc từ khi kết thúc tập tin của chúng tôi, bởi vì chúng tôi chỉ có một byte trong đó. 1107 00:53:30,980 --> 00:53:34,270 >> Fread trả về 0, cửa hàng một cái gì đó trong bộ đệm. 1108 00:53:34,270 --> 00:53:35,890 Thực sự tôi không biết những gì nó lưu trong bộ đệm. 1109 00:53:35,890 --> 00:53:38,380 Có lẽ chúng ta có thể tìm để xem những gì nó làm. 1110 00:53:38,380 --> 00:53:40,130 Mà tôi thật không biết. 1111 00:53:40,130 --> 00:53:43,090 Chúng tôi không biết, những người quan tâm những gì nó lưu trong bộ đệm? 1112 00:53:43,090 --> 00:53:44,010 Nhưng nó trở về 0. 1113 00:53:44,010 --> 00:53:45,440 Và sẽ thực hiện trong khi 0? 1114 00:53:45,440 --> 00:53:49,950 1115 00:53:49,950 --> 00:53:51,180 >> KHI 0 sẽ không thực hiện. 1116 00:53:51,180 --> 00:53:54,030 Vì vậy, sau đó chúng tôi sẽ di chuyển xuống đây. 1117 00:53:54,030 --> 00:53:58,870 Vì vậy, hãy giơ tay nếu điều này là mã chúng tôi phải chạy, hoặc nếu chúng tôi 1118 00:53:58,870 --> 00:54:00,140 nên làm thay đổi đầu tiên. 1119 00:54:00,140 --> 00:54:02,180 Vì vậy, nếu bạn nghĩ rằng - bạn phải bỏ phiếu. 1120 00:54:02,180 --> 00:54:06,885 Nếu bạn nghĩ rằng chúng ta nên chạy mã này như là, xin vui lòng giơ tay lên. 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 Có một - 1124 00:54:14,315 --> 00:54:17,260 Bạn có một câu hỏi, mối quan tâm? 1125 00:54:17,260 --> 00:54:18,080 Yeah. 1126 00:54:18,080 --> 00:54:21,240 >> HỌC SINH 48: Sau khi chúng tôi di chuyển đệm bên ngoài vòng lặp, chúng ta 1127 00:54:21,240 --> 00:54:22,670 phải malloc nó? 1128 00:54:22,670 --> 00:54:23,310 >> JASON Hirschhorn: Great câu hỏi. 1129 00:54:23,310 --> 00:54:26,670 Sau khi chúng tôi di chuyển đệm bên ngoài vòng lặp, chúng ta phải malloc nó? 1130 00:54:26,670 --> 00:54:28,400 Đây là một câu hỏi phạm vi. 1131 00:54:28,400 --> 00:54:32,130 Nếu chúng ta khởi tạo bộ đệm bên ngoài của vòng lặp này, nó sẽ tồn tại 1132 00:54:32,130 --> 00:54:33,534 bên trong vòng lặp? 1133 00:54:33,534 --> 00:54:35,230 >> SINH VIÊN ĐA: Có. 1134 00:54:35,230 --> 00:54:35,580 >> JASON Hirschhorn: Có. 1135 00:54:35,580 --> 00:54:40,100 Phạm vi của nó bao gồm bên trong vòng lặp, và, thực sự, bất cứ điều gì dưới nó bên trong 1136 00:54:40,100 --> 00:54:42,460 của mã này, bao gồm cả những thứ bên trong đây. 1137 00:54:42,460 --> 00:54:43,930 Vì vậy, chúng ta không cần phải malloc nó. 1138 00:54:43,930 --> 00:54:47,766 Đó là một biến địa phương, và phạm vi của nó vẫn còn bao gồm các vòng lặp. 1139 00:54:47,766 --> 00:54:49,540 >> HỌC SINH 49: Chúng ta cần phải giải phóng nó? 1140 00:54:49,540 --> 00:54:51,770 >> JASON Hirschhorn: Chúng ta cần đệm miễn phí? 1141 00:54:51,770 --> 00:54:53,860 >> HỌC SINH 49: Vâng, nếu chúng ta không malloc. 1142 00:54:53,860 --> 00:54:55,750 >> JASON Hirschhorn: Chúng ta cần đệm miễn phí? 1143 00:54:55,750 --> 00:54:57,160 Chúng tôi không. 1144 00:54:57,160 --> 00:55:01,280 Một lần nữa, nó là một biến địa phương, vì vậy chúng tôi không cần phải giải phóng nó. 1145 00:55:01,280 --> 00:55:02,170 OK. 1146 00:55:02,170 --> 00:55:03,480 Hãy xem những gì sẽ xảy ra. 1147 00:55:03,480 --> 00:55:17,290 1148 00:55:17,290 --> 00:55:18,220 Vì vậy, nó là chưa được khởi tạo. 1149 00:55:18,220 --> 00:55:20,830 Đó là những gì một cái gì đó Marcus đề xuất trước đó. 1150 00:55:20,830 --> 00:55:25,340 Vì vậy, chúng ta có lỗi, biến đệm được uninitialized khi được sử dụng ở đây. 1151 00:55:25,340 --> 00:55:26,590 >> Làm thế nào chúng ta có thể sửa lỗi này? 1152 00:55:26,590 --> 00:55:29,460 1153 00:55:29,460 --> 00:55:30,960 >> HỌC SINH 50: malloc nó? 1154 00:55:30,960 --> 00:55:31,770 >> HỌC SINH 51: Bình đẳng NULL? 1155 00:55:31,770 --> 00:55:33,000 >> HỌC SINH 52: Nói đệm bằng 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 Có vẻ tốt. 1159 00:55:40,770 --> 00:55:42,410 Chúng tôi có nó ngay bây giờ. 1160 00:55:42,410 --> 00:55:45,630 Hãy tạo ra một cái gì đó để cố gắng sao chép. 1161 00:55:45,630 --> 00:56:08,990 1162 00:56:08,990 --> 00:56:10,490 Vì vậy, chúng tôi có tập tin văn bản của chúng tôi. 1163 00:56:10,490 --> 00:56:11,740 Làm thế nào chúng ta có thể chạy chương trình này? 1164 00:56:11,740 --> 00:56:14,140 1165 00:56:14,140 --> 00:56:15,472 Yeah. 1166 00:56:15,472 --> 00:56:22,230 >> HỌC SINH 53: Bạn có thể làm chấm giảm cp, test.txt. 1167 00:56:22,230 --> 00:56:25,140 Và sau đó bạn có thể đặt tên tập tin khác mà nó sẽ lưu trữ vào. 1168 00:56:25,140 --> 00:56:25,510 >> JASON Hirschhorn: OK. 1169 00:56:25,510 --> 00:56:27,380 Chúng tôi sẽ gọi nó out.txt. 1170 00:56:27,380 --> 00:56:28,630 Mát mẻ? 1171 00:56:28,630 --> 00:56:31,700 1172 00:56:31,700 --> 00:56:34,320 Seg lỗi. 1173 00:56:34,320 --> 00:56:35,570 Suy nghĩ về lỗi seg? 1174 00:56:35,570 --> 00:56:40,900 1175 00:56:40,900 --> 00:56:41,390 Điều này là rất tốt. 1176 00:56:41,390 --> 00:56:45,040 Làm thế nào chúng ta có thể tìm ra nơi lỗi seg là? 1177 00:56:45,040 --> 00:56:45,680 Những gì? 1178 00:56:45,680 --> 00:56:45,990 >> HỌC SINH 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 Chúng tôi chạy gdb bằng cách viết gdb dấu chấm dấu gạch chéo, tên của chương trình của chúng tôi. 1182 00:56:55,300 --> 00:56:57,020 Không có đối số dòng lệnh đó. 1183 00:56:57,020 --> 00:56:59,570 Chúng ta sẽ thiết lập một breakpoint ở chính. 1184 00:56:59,570 --> 00:57:02,190 Nếu tôi muốn bắt đầu gdb, tôi phải làm gì? 1185 00:57:02,190 --> 00:57:02,730 >> HỌC SINH 55: R. 1186 00:57:02,730 --> 00:57:08,910 >> JASON Hirschhorn: R. Và sau đó những gì? 1187 00:57:08,910 --> 00:57:09,400 >> HỌC SINH 55: Những lập luận? 1188 00:57:09,400 --> 00:57:10,650 >> JASON Hirschhorn: Sau đó, đối số dòng lệnh. 1189 00:57:10,650 --> 00:57:15,890 1190 00:57:15,890 --> 00:57:17,120 Chúng ta hãy đi bộ qua. 1191 00:57:17,120 --> 00:57:19,090 N chỉ được tham gia tôi từng dòng. 1192 00:57:19,090 --> 00:57:21,450 Tôi sẽ đi cho đến khi Tôi nhận được lỗi seg của tôi. 1193 00:57:21,450 --> 00:57:22,700 Có lỗi seg của tôi. 1194 00:57:22,700 --> 00:57:24,960 1195 00:57:24,960 --> 00:57:27,875 Có vẻ như gây ra fread lỗi seg của tôi. 1196 00:57:27,875 --> 00:57:30,570 1197 00:57:30,570 --> 00:57:32,770 Tôi biết fread gây ra lỗi seg của tôi, bởi vì đó là 1198 00:57:32,770 --> 00:57:34,950 dòng chúng tôi chỉ thực hiện. 1199 00:57:34,950 --> 00:57:36,530 >> Và điều duy nhất đó là xảy ra trong dòng - 1200 00:57:36,530 --> 00:57:37,520 hai điều đã xảy ra. 1201 00:57:37,520 --> 00:57:40,610 Fread được đi, và sau đó chúng tôi đã làm một số kiểm tra KHI. 1202 00:57:40,610 --> 00:57:44,820 Tôi sẵn sàng đặt cược rằng KHI kiểm tra không gây ra lỗi seg của tôi. 1203 00:57:44,820 --> 00:57:46,950 Nhiều khả năng, fread là gây ra lỗi seg của tôi. 1204 00:57:46,950 --> 00:57:49,260 Tôi cũng nhìn thấy một cái gì đó ở đây, memcopy. 1205 00:57:49,260 --> 00:57:50,500 >> Bản sao bộ nhớ. 1206 00:57:50,500 --> 00:57:53,820 Nghe có vẻ như di chuyển từ bộ nhớ một địa điểm đến khác. 1207 00:57:53,820 --> 00:57:56,890 Âm thanh như một cái gì đó sẽ xảy ra trong fread, có thể một số bộ nhớ 1208 00:57:56,890 --> 00:57:58,910 di chuyển từ đây đến đây. 1209 00:57:58,910 --> 00:58:01,740 1210 00:58:01,740 --> 00:58:03,860 Hãy đi qua này một lần nữa. 1211 00:58:03,860 --> 00:58:06,900 Làm thế nào để bắt đầu nó hơn và chạy nó một lần nữa? 1212 00:58:06,900 --> 00:58:08,092 Yeah. 1213 00:58:08,092 --> 00:58:15,140 >> HỌC SINH 56: Bạn cần phải đặt một ký hiệu trước khi đệm? 1214 00:58:15,140 --> 00:58:17,800 >> JASON Hirschhorn: Vì vậy, trước khi ký hiệu đệm sẽ cung cấp cho tôi địa chỉ của 1215 00:58:17,800 --> 00:58:22,330 đệm, mà là một char *. 1216 00:58:22,330 --> 00:58:25,250 Chúng ta hãy chạy qua này một lần nữa. 1217 00:58:25,250 --> 00:58:28,248 Làm thế nào để chạy qua nó một lần nữa? 1218 00:58:28,248 --> 00:58:29,210 >> HỌC SINH 57: Có thể bạn chỉ cần gõ chạy một lần nữa? 1219 00:58:29,210 --> 00:58:32,050 >> JASON Hirschhorn: Chỉ cần gõ chạy một lần nữa. 1220 00:58:32,050 --> 00:58:33,415 Vì vậy chúng tôi sẽ không thực hiện dòng này. 1221 00:58:33,415 --> 00:58:36,250 1222 00:58:36,250 --> 00:58:39,240 Vì vậy, bộ đệm là một con trỏ NULL. 1223 00:58:39,240 --> 00:58:40,490 Đúng không? 1224 00:58:40,490 --> 00:58:45,870 1225 00:58:45,870 --> 00:58:47,060 Nó đang trỏ đến - chúng ta hãy xem. 1226 00:58:47,060 --> 00:58:48,500 Nếu chúng ta có của chúng tôi - 1227 00:58:48,500 --> 00:58:50,430 vẽ một bức tranh nhanh chóng này. 1228 00:58:50,430 --> 00:58:53,500 Tất cả mọi người có thể xem Tôi viết trên đây? 1229 00:58:53,500 --> 00:59:02,890 >> Vì vậy, trong các ngăn xếp, chúng ta có một địa phương biến và nó được gọi là bộ đệm, và 1230 00:59:02,890 --> 00:59:08,230 đó là một con trỏ đến một char. 1231 00:59:08,230 --> 00:59:10,325 Địa chỉ những gì là char này? 1232 00:59:10,325 --> 00:59:12,550 >> HỌC SINH 58: 0x0. 1233 00:59:12,550 --> 00:59:13,400 >> JASON Hirschhorn: Đúng vậy. 1234 00:59:13,400 --> 00:59:14,200 Đó là đây là những gì. 1235 00:59:14,200 --> 00:59:17,600 Ở đây, bên trong bộ đệm, được lưu trữ 0x0. 1236 00:59:17,600 --> 00:59:20,480 Đó là những gì chúng tôi có - các thiết lập chúng tôi có ngay bây giờ. 1237 00:59:20,480 --> 00:59:27,540 Vì vậy, dòng này, fread, đặt một cái gì đó từ nguồn ở đâu? 1238 00:59:27,540 --> 00:59:30,560 Vào ô này hoặc hộp này? 1239 00:59:30,560 --> 00:59:31,060 Hộp đó? 1240 00:59:31,060 --> 00:59:33,290 Hộp hoặc hộp ở cánh phải? 1241 00:59:33,290 --> 00:59:34,750 Hộp quyền này. 1242 00:59:34,750 --> 00:59:38,440 >> Nó sau con trỏ, và đặt nó ở đây. 1243 00:59:38,440 --> 00:59:42,620 Khi chúng tôi cố gắng liên lạc và bộ nhớ tại vị trí 0, những gì chúng tôi nhận được? 1244 00:59:42,620 --> 00:59:45,050 Một lỗi phân khúc. 1245 00:59:45,050 --> 00:59:46,550 Đó là lỗi mà chúng tôi có ngay bây giờ. 1246 00:59:46,550 --> 00:59:46,970 Yeah. 1247 00:59:46,970 --> 00:59:48,410 >> HỌC SINH 59: Không có để đưa ngôi sao đệm? 1248 00:59:48,410 --> 00:59:49,180 Hay không? 1249 00:59:49,180 --> 00:59:50,050 Cho fread? 1250 00:59:50,050 --> 00:59:51,450 >> JASON Hirschhorn: Vì vậy, fread có một con trỏ. 1251 00:59:51,450 --> 00:59:54,920 1252 00:59:54,920 --> 00:59:55,900 Vì vậy, nó đi qua bộ đệm. 1253 00:59:55,900 --> 00:59:58,980 Và sau đó nó sẽ de-tham khảo nó ở đâu đó bên trong fread. 1254 00:59:58,980 --> 01:00:00,700 Nhưng một lần nữa, chúng ta đã thấy, phải mất một con trỏ. 1255 01:00:00,700 --> 01:00:02,560 Chúng tôi không cần phải vượt qua nó đệm sao. 1256 01:00:02,560 --> 01:00:05,350 Mà có thể đi qua nó bất cứ điều gì ở đây. 1257 01:00:05,350 --> 01:00:07,980 Và đó có lẽ sẽ cho chúng ta một lỗi bởi vì chúng tôi đang de-tham khảo nó. 1258 01:00:07,980 --> 01:00:08,150 >> Phải không? 1259 01:00:08,150 --> 01:00:10,690 Khi chúng tôi de-tham khảo con trỏ này, khi chúng tôi cố gắng để truy cập vào vị trí này, 1260 01:00:10,690 --> 01:00:13,140 chúng tôi nhận được một lỗi - lỗi phân khúc của chúng tôi. 1261 01:00:13,140 --> 01:00:15,800 Vì vậy, - 1262 01:00:15,800 --> 01:00:16,690 oops. 1263 01:00:16,690 --> 01:00:19,090 Chúng ta sẽ bỏ ra khỏi gdb. 1264 01:00:19,090 --> 01:00:20,160 Dòng của chúng tôi - 1265 01:00:20,160 --> 01:00:22,990 vấn đề của chúng ta - là đúng ở đây trên dòng này. 1266 01:00:22,990 --> 01:00:26,410 Và đó là một vấn đề bởi vì của dòng này. 1267 01:00:26,410 --> 01:00:31,780 >> Làm thế nào chúng ta có thể tạo ra một hộp thoại mà có thể truy cập trong fread. 1268 01:00:31,780 --> 01:00:31,980 Phải không? 1269 01:00:31,980 --> 01:00:35,190 Chúng ta cần phải tạo ra một hộp đó là một byte lớn, kích thước của một char. 1270 01:00:35,190 --> 01:00:38,590 Nhưng chúng ta cần hộp để có thể truy cập khi chức năng này được thực thi. 1271 01:00:38,590 --> 01:00:39,390 Vì vậy, nơi - 1272 01:00:39,390 --> 01:00:39,640 yeah. 1273 01:00:39,640 --> 01:00:40,440 Bất kỳ ý tưởng? 1274 01:00:40,440 --> 01:00:43,615 >> HỌC SINH 60: Chỉ cần đặt nó như bất kỳ ký tự ngẫu nhiên. 1275 01:00:43,615 --> 01:00:49,150 1276 01:00:49,150 --> 01:00:51,640 Chỉ cần làm char bình đẳng đệm các nhân vật. 1277 01:00:51,640 --> 01:00:53,795 Và sau đó, khi bạn đã có đệm - 1278 01:00:53,795 --> 01:00:54,110 >> JASON Hirschhorn: Chờ. 1279 01:00:54,110 --> 01:00:55,110 Char đệm? 1280 01:00:55,110 --> 01:00:55,880 Vì vậy, không sao? 1281 01:00:55,880 --> 01:00:56,390 >> HỌC SINH 60: Vâng. 1282 01:00:56,390 --> 01:00:58,560 Đưa ra các ngôi sao. 1283 01:00:58,560 --> 01:01:00,690 Bằng một ký tự ngẫu nhiên. 1284 01:01:00,690 --> 01:01:01,460 >> JASON Hirschhorn: OK. 1285 01:01:01,460 --> 01:01:02,420 Vì vậy, cho tôi một. 1286 01:01:02,420 --> 01:01:03,170 >> HỌC SINH 60: Giống như một hoặc một cái gì đó. 1287 01:01:03,170 --> 01:01:06,160 Và sau đó khi bạn có bộ đệm ở đó, bạn sử dụng một - 1288 01:01:06,160 --> 01:01:06,420 >> HỌC SINH 61: sao? 1289 01:01:06,420 --> 01:01:07,650 Ồ không, các ký hiệu. 1290 01:01:07,650 --> 01:01:09,000 >> HỌC SINH 60: Sử dụng các ký hiệu. 1291 01:01:09,000 --> 01:01:09,470 >> JASON Hirschhorn: OK. 1292 01:01:09,470 --> 01:01:11,320 Và những gì về trong fwrite? 1293 01:01:11,320 --> 01:01:14,150 >> HỌC SINH 60: Sử dụng các ký hiệu một lần nữa. 1294 01:01:14,150 --> 01:01:14,320 >> JASON Hirschhorn: Được rồi. 1295 01:01:14,320 --> 01:01:20,970 Vì vậy, ý tưởng của bạn, chúng tôi tạo ra một char và đặt một cái gì đó trong nó, và sau đó 1296 01:01:20,970 --> 01:01:22,612 viết thư cho char. 1297 01:01:22,612 --> 01:01:23,760 >> HỌC SINH 60: Vâng. 1298 01:01:23,760 --> 01:01:25,916 >> JASON Hirschhorn: Điều gì Mọi người suy nghĩ? 1299 01:01:25,916 --> 01:01:27,770 >> HỌC SINH 62: Nó phức tạp. 1300 01:01:27,770 --> 01:01:28,460 >> JASON Hirschhorn: OK. 1301 01:01:28,460 --> 01:01:29,760 Chúng ta hãy vẽ nó ra. 1302 01:01:29,760 --> 01:01:35,720 Vì vậy, thời gian này, tôi sẽ vẽ này trong màu đỏ trên stack ở đây, và sau đó chúng tôi 1303 01:01:35,720 --> 01:01:36,410 sẽ có - 1304 01:01:36,410 --> 01:01:36,822 ooh! 1305 01:01:36,822 --> 01:01:38,060 Xin lôi. 1306 01:01:38,060 --> 01:01:45,930 Vì vậy, lần này chúng tôi có một cái gì đó gọi là đệm, và đó là trên stack. 1307 01:01:45,930 --> 01:01:48,430 Đúng không? 1308 01:01:48,430 --> 01:01:51,520 Và chúng tôi đang lưu trong nó một, ban đầu. 1309 01:01:51,520 --> 01:01:53,830 >> Sau đó, chúng tôi có cuộc gọi của chúng tôi để fread. 1310 01:01:53,830 --> 01:02:01,300 Fread gì, không có gì phải mất một byte từ tập tin và chúng tôi đặt nó ở đâu đó. 1311 01:02:01,300 --> 01:02:04,570 Nó đặt nó trong bất cứ điều gì Điều trỏ đến. 1312 01:02:04,570 --> 01:02:09,130 Vâng, trước khi chúng tôi đã có địa chỉ này - 1313 01:02:09,130 --> 01:02:10,250 0x0. 1314 01:02:10,250 --> 01:02:13,349 Bây giờ những gì chúng ta có địa chỉ? 1315 01:02:13,349 --> 01:02:14,650 >> HỌC SINH 63: Bất cứ điều gì địa chỉ đệm. 1316 01:02:14,650 --> 01:02:15,970 >> JASON Hirschhorn: Bất cứ điều gì địa chỉ đệm. 1317 01:02:15,970 --> 01:02:22,370 Nó có thể sẽ là một cái gì đó như thế. 1318 01:02:22,370 --> 01:02:26,950 Có lẽ sẽ bắt đầu với một b và một e, và sau đó có sáu khác 1319 01:02:26,950 --> 01:02:27,970 chữ số thập lục phân. 1320 01:02:27,970 --> 01:02:28,480 Không quan trọng. 1321 01:02:28,480 --> 01:02:29,470 Một số địa chỉ. 1322 01:02:29,470 --> 01:02:31,410 Và chúng tôi đang đi qua địa chỉ in 1323 01:02:31,410 --> 01:02:34,790 >> Và chúng ta sẽ đặt một của chúng tôi byte điều tại địa chỉ đó. 1324 01:02:34,790 --> 01:02:38,470 Vì vậy, chúng ta sẽ đặt một của chúng tôi byte điều trong đây. 1325 01:02:38,470 --> 01:02:40,800 Và sau đó chúng ta sẽ viết từ những gì bao giờ bên trong đây. 1326 01:02:40,800 --> 01:02:43,425 1327 01:02:43,425 --> 01:02:45,380 Không ai có bất kỳ câu hỏi về điều đó? 1328 01:02:45,380 --> 01:02:50,990 1329 01:02:50,990 --> 01:02:54,690 Người nghĩ rằng mã này sẽ làm việc? 1330 01:02:54,690 --> 01:02:56,020 >> Nâng cao tay của bạn nếu bạn nghĩ mã này sẽ làm việc. 1331 01:02:56,020 --> 01:02:57,270 Bạn phải có một lập trường. 1332 01:02:57,270 --> 01:03:00,670 1333 01:03:00,670 --> 01:03:02,500 Và những người nghĩ rằng mã này sẽ không làm việc? 1334 01:03:02,500 --> 01:03:04,610 Giơ tay lên. 1335 01:03:04,610 --> 01:03:06,750 Tất cả mọi người khác nên được nâng cao tay của họ. 1336 01:03:06,750 --> 01:03:07,670 OK. 1337 01:03:07,670 --> 01:03:09,390 Michael, nơi anh đứng? 1338 01:03:09,390 --> 01:03:10,680 >> MICHAEL: tôi không thể quyết định. 1339 01:03:10,680 --> 01:03:12,070 Loại ở giữa. 1340 01:03:12,070 --> 01:03:12,736 >> JASON Hirschhorn: Anh ở giữa. 1341 01:03:12,736 --> 01:03:13,092 Chọn một. 1342 01:03:13,092 --> 01:03:14,400 >> MICHAEL: tôi sẽ có niềm tin và nói rằng nó sẽ làm việc. 1343 01:03:14,400 --> 01:03:14,660 >> JASON Hirschhorn: OK. 1344 01:03:14,660 --> 01:03:16,047 Bạn sẽ có niềm tin và nói nó hoạt động? 1345 01:03:16,047 --> 01:03:26,490 1346 01:03:26,490 --> 01:03:27,020 Những gì đã xảy ra? 1347 01:03:27,020 --> 01:03:28,270 >> [Interposing TIẾNG NÓI] 1348 01:03:28,270 --> 01:03:35,170 1349 01:03:35,170 --> 01:03:35,950 >> JASON Hirschhorn: Không có lỗi seg. 1350 01:03:35,950 --> 01:03:40,320 Làm thế nào chúng ta có thể kiểm tra xem Hai điều này là bằng nhau? 1351 01:03:40,320 --> 01:03:42,060 Hai tập tin đều bình đẳng. 1352 01:03:42,060 --> 01:03:43,300 >> HỌC SINH 64: Diff. 1353 01:03:43,300 --> 01:03:45,490 >> JASON Hirschhorn: Diff. 1354 01:03:45,490 --> 01:03:51,630 Kiểm tra khác cho sự khác biệt giữa hai tập tin, và nếu nó trở về 1355 01:03:51,630 --> 01:03:52,890 không có gì, họ giống hệt nhau. 1356 01:03:52,890 --> 01:03:59,030 Và nếu chúng ta mở ra, chúng tôi nhận được tập tin của chúng tôi. 1357 01:03:59,030 --> 01:04:00,490 Vì vậy, đó là giải pháp đúng. 1358 01:04:00,490 --> 01:04:01,780 Chúng ta hãy nhìn lại nó một lần nữa. 1359 01:04:01,780 --> 01:04:04,080 Chúng tôi thực sự thậm chí không cần phải khởi tạo nó. 1360 01:04:04,080 --> 01:04:05,520 >> Nó có lẽ sẽ xem xét một chút sạch hơn nếu bạn không đặt 1361 01:04:05,520 --> 01:04:07,680 một cái gì đó ngẫu nhiên trong đó. 1362 01:04:07,680 --> 01:04:13,070 Điểm được, bạn cần thiết để tạo ra một số không gian để lưu trữ một cái gì đó từ 1363 01:04:13,070 --> 01:04:15,530 fread và có một cái gì đó ra khỏi fwrite. 1364 01:04:15,530 --> 01:04:18,400 Và điều đó có được, hoặc một địa phương biến trên stack - bạn 1365 01:04:18,400 --> 01:04:19,890 có thể đã malloc'd một số không gian. 1366 01:04:19,890 --> 01:04:23,030 >> Vì vậy, chúng tôi thực sự có thể có malloc viết ở đây, và 1367 01:04:23,030 --> 01:04:25,420 mà có thể đã làm việc. 1368 01:04:25,420 --> 01:04:28,660 Và sau đó chúng tôi đã được lưu trữ điều chúng tôi ở đâu đó trên đống. 1369 01:04:28,660 --> 01:04:31,940 Nhưng điều này thực sự, có lẽ, các giải pháp thanh lịch nhất. 1370 01:04:31,940 --> 01:04:34,490 Chỉ cần tạo ra một số không gian trên stack cho những việc này đi. 1371 01:04:34,490 --> 01:04:37,690 1372 01:04:37,690 --> 01:04:38,990 >> Tôi sẽ có hai ý kiến ​​khác. 1373 01:04:38,990 --> 01:04:44,650 Nếu bạn đã có lần lượt trong này, và sau đó có được ghi vào điều này, ý kiến ​​của tôi 1374 01:04:44,650 --> 01:04:47,400 sẽ là như sau. 1375 01:04:47,400 --> 01:04:54,300 Những 1 ở đây, với tôi, nhìn như con số ma thuật. 1376 01:04:54,300 --> 01:04:56,860 1 này, về fread, có ý nghĩa. 1377 01:04:56,860 --> 01:04:59,580 Đó là số thứ đọc hay viết. 1378 01:04:59,580 --> 01:05:03,740 >> Nhưng điều này ngay tại đây nên có thể là cái gì khác. 1379 01:05:03,740 --> 01:05:05,180 Vì vậy, một giải pháp là gì? 1380 01:05:05,180 --> 01:05:06,545 >> HỌC SINH 65: Kích thước của byte. 1381 01:05:06,545 --> 01:05:10,100 1382 01:05:10,100 --> 01:05:11,080 >> JASON Hirschhorn: Giống như điều đó không? 1383 01:05:11,080 --> 01:05:13,130 >> HỌC SINH 65: Kích thước của char. 1384 01:05:13,130 --> 01:05:13,820 >> JASON Hirschhorn: Kích thước của char. 1385 01:05:13,820 --> 01:05:15,290 Yeah, byte không phải là một loại. 1386 01:05:15,290 --> 01:05:16,320 Vì vậy, quy mô công trình char. 1387 01:05:16,320 --> 01:05:30,270 Chúng ta có thể có, ở đầu mã của chúng tôi, # định nghĩa đó. 1388 01:05:30,270 --> 01:05:33,410 Được gọi là một cái gì đó và BYTE nó thực sự là một char. 1389 01:05:33,410 --> 01:05:37,675 Trên thực tế, một cách tiếp cận tốt hơn có thể có được điều này - 1390 01:05:37,675 --> 01:05:39,391 uint. 1391 01:05:39,391 --> 01:05:40,780 Ai biết đó là những gì? 1392 01:05:40,780 --> 01:05:44,388 1393 01:05:44,388 --> 01:05:44,840 >> Xin lôi. 1394 01:05:44,840 --> 01:05:46,090 Tôi có nó về phía sau. 1395 01:05:46,090 --> 01:05:51,620 1396 01:05:51,620 --> 01:05:52,200 Chờ đợi, không có. 1397 01:05:52,200 --> 01:05:53,450 Cách mà nó đi đâu? 1398 01:05:53,450 --> 01:05:58,071 1399 01:05:58,071 --> 01:05:59,660 Ai biết đó là những gì? 1400 01:05:59,660 --> 01:06:00,950 Yeah. 1401 01:06:00,950 --> 01:06:05,650 >> HỌC SINH 67: Nghĩa vụ phải giúp chuẩn hóa qua các hệ điều 1402 01:06:05,650 --> 01:06:08,760 có - như số nguyên không dấu có 8 byte? 1403 01:06:08,760 --> 01:06:11,785 >> JASON Hirschhorn: Đó là chính xác. 1404 01:06:11,785 --> 01:06:14,310 Trên các máy khác nhau, kích thước của một char - 1405 01:06:14,310 --> 01:06:15,180 không thường là một char. 1406 01:06:15,180 --> 01:06:16,100 Ký tự thường một byte. 1407 01:06:16,100 --> 01:06:19,590 Nhưng kích thước của các loại dữ liệu khác kích cỡ khác nhau trên một máy 32-bit 1408 01:06:19,590 --> 01:06:21,370 so với một máy tính 64-bit. 1409 01:06:21,370 --> 01:06:25,180 Một uint8_t luôn luôn là 8 bit - 1410 01:06:25,180 --> 01:06:27,210 luôn luôn một byte. 1411 01:06:27,210 --> 01:06:29,580 >> Và tôi cần phải bao gồm rằng tiêu chuẩn tập tin int tiêu đề. 1412 01:06:29,580 --> 01:06:35,040 Vì vậy, bây giờ, điều này sẽ có thể được cách tốt nhất để viết mã này. 1413 01:06:35,040 --> 01:06:40,160 1414 01:06:40,160 --> 01:06:41,450 Vì vậy, tôi thoát khỏi những con số kỳ diệu. 1415 01:06:41,450 --> 01:06:44,690 Và tôi cũng có một hợp lý hơn gõ cho bộ đệm. 1416 01:06:44,690 --> 01:06:49,450 Nó không chỉ đơn giản là một char, đó là một byte, đó là những gì chúng tôi mong đợi nó được. 1417 01:06:49,450 --> 01:06:53,400 >> Và ở đây, chúng tôi đã thực sự được một chút mạnh mẽ hơn. 1418 01:06:53,400 --> 01:06:55,190 Chúng tôi không gọi đó là một char, mà - 1419 01:06:55,190 --> 01:06:58,630 có lẽ, ai biết được - có thể là một khác nhau kích thước trên các máy khác nhau. 1420 01:06:58,630 --> 01:07:02,025 Chúng tôi đang thực sự nói điều này là chính xác một byte, luôn luôn, không có vấn đề gì. 1421 01:07:02,025 --> 01:07:05,810 Và nếu chúng ta nhìn ở đây, chúng tôi làm cp. 1422 01:07:05,810 --> 01:07:08,340 Uh-oh. 1423 01:07:08,340 --> 01:07:09,590 Những gì đã xảy ra? 1424 01:07:09,590 --> 01:07:14,470 1425 01:07:14,470 --> 01:07:16,170 >> HỌC SINH 68: Nó có thể được chuyển sang. 1426 01:07:16,170 --> 01:07:17,880 >> JASON Hirschhorn: Cái gì? 1427 01:07:17,880 --> 01:07:19,130 >> HỌC SINH 69: là nó? 1428 01:07:19,130 --> 01:07:21,940 1429 01:07:21,940 --> 01:07:25,080 >> HỌC SINH 70: Bạn đã làm không định nghĩa nó như là một loại. 1430 01:07:25,080 --> 01:07:28,684 >> HỌC SINH 71: Nhưng nó phải được xác định trong tiêu chuẩn. 1431 01:07:28,684 --> 01:07:29,934 >> HỌC SINH 72: Điều gì đang xảy ra? 1432 01:07:29,934 --> 01:07:37,660 1433 01:07:37,660 --> 01:07:40,210 >> HỌC SINH 73: nên xác định được tất cả các mũ? 1434 01:07:40,210 --> 01:07:41,370 >> JASON Hirschhorn: Vì vậy, nó không # xác định. 1435 01:07:41,370 --> 01:07:45,490 Trên thực tế, trong trường hợp này, tôi sẽ sử dụng typedef. 1436 01:07:45,490 --> 01:07:48,590 Bởi vì chúng ta đang sử dụng nó như là một loại tại một địa điểm. 1437 01:07:48,590 --> 01:07:51,990 Vì vậy, trong trường hợp này, chúng tôi thực sự muốn typedef như chúng tôi đang in một loại mới 1438 01:07:51,990 --> 01:07:54,490 byte, và nó là, về cơ bản, điều này. 1439 01:07:54,490 --> 01:07:56,590 Đó là một chút khác biệt so với # define. 1440 01:07:56,590 --> 01:08:02,740 >> Và bây giờ, mã của chúng tôi hoạt động hoàn hảo. 1441 01:08:02,740 --> 01:08:05,230 Vì vậy, một lần nữa, # xác định có một cái gì đó, thay thế nó ở khắp mọi nơi 1442 01:08:05,230 --> 01:08:06,780 với những điều khác. 1443 01:08:06,780 --> 01:08:07,920 Nó chỉ là một vĩ mô - 1444 01:08:07,920 --> 01:08:09,420 viết tắt để thoát khỏi con số ma thuật. 1445 01:08:09,420 --> 01:08:11,360 Nhưng trong trường hợp này, bởi vì chúng tôi sử dụng nó như là một loại - 1446 01:08:11,360 --> 01:08:12,180 ngay tại đây - 1447 01:08:12,180 --> 01:08:19,880 để cho rằng để làm việc, chúng ta cần để typedef bất cứ điều gì byte là. 1448 01:08:19,880 --> 01:08:21,840 >> Và chúng tôi xác định nó phải ở đây. 1449 01:08:21,840 --> 01:08:24,750 Nó không phải là một cấu trúc, nó thực sự chỉ là một số nguyên không dấu. 1450 01:08:24,750 --> 01:08:27,680 Đó là một byte. 1451 01:08:27,680 --> 01:08:31,910 Mã này sẽ có sẵn trực tuyến, và tất cả các bạn cần phải có nó ngay bây giờ. 1452 01:08:31,910 --> 01:08:33,830 >> Vì vậy, chúng tôi có - 1453 01:08:33,830 --> 01:08:34,250 hoàn hảo - 1454 01:08:34,250 --> 01:08:41,359 13 phút còn lại để đi vấn đề trên đặt 5. 1455 01:08:41,359 --> 01:08:44,270 Tôi muốn đi bộ qua copy.c với nhau, và sau đó chúng tôi sẽ nói ngắn gọn 1456 01:08:44,270 --> 01:08:47,120 về các bộ phận khác của vấn đề thiết lập. 1457 01:08:47,120 --> 01:08:48,899 Vì vậy, hãy để tôi kéo lên copy.c. 1458 01:08:48,899 --> 01:09:03,930 1459 01:09:03,930 --> 01:09:08,810 Và điều thú vị là, chúng tôi đã thực sự đã viết rất nhiều mã này. 1460 01:09:08,810 --> 01:09:11,180 >> Mã chúng tôi đã viết theo nghĩa đen chỉ ra khỏi đây khi tôi còn 1461 01:09:11,180 --> 01:09:13,120 văn bản này trên của riêng tôi. 1462 01:09:13,120 --> 01:09:16,990 Nhưng đây là copy.c, tạo nền tảng cho hai phần đầu của 1463 01:09:16,990 --> 01:09:22,340 vấn đề đặt ra cho whodunit.c, mà bạn cần phải viết, và resize.c. 1464 01:09:22,340 --> 01:09:27,050 Recover.c, đó là thứ ba và cuối cùng một phần của bộ vấn đề, không phải là 1465 01:09:27,050 --> 01:09:29,529 dựa tắt của tập tin này. 1466 01:09:29,529 --> 01:09:32,200 >> Bạn sẽ cần phải viết tập tin đó, chúng tôi cung cấp cho bạn một khuôn mẫu cho rằng 1467 01:09:32,200 --> 01:09:34,620 nộp, nhưng nó không có gì để làm với copy.c. 1468 01:09:34,620 --> 01:09:38,675 Nhưng vì copy.c là nền tảng cho hai phần đầu, chúng ta sẽ 1469 01:09:38,675 --> 01:09:42,000 đi bộ qua nó, vì vậy bạn có một cảm giác tốt về những gì nó làm. 1470 01:09:42,000 --> 01:09:43,640 >> Và các ý kiến ​​đưa ra một số của nó đi. 1471 01:09:43,640 --> 01:09:45,120 Chúng ta đã viết một số điều này. 1472 01:09:45,120 --> 01:09:49,220 Đầu tiên, chúng tôi đảm bảo chúng tôi có được ba đối số. 1473 01:09:49,220 --> 01:09:50,560 Tiếp theo, chúng ta ghi nhớ tên file. 1474 01:09:50,560 --> 01:09:52,960 Vì vậy, chúng tôi bỏ qua bước này khi chúng tôi mã hóa điều chúng tôi - 1475 01:09:52,960 --> 01:09:54,700 khi cp của chúng tôi. 1476 01:09:54,700 --> 01:09:56,750 Nhưng ở đây, họ đang làm nó một chút bụi. 1477 01:09:56,750 --> 01:09:59,350 >> Họ đang kiểm tra để đảm bảo cả hai tập tin là tốt, trong 1478 01:09:59,350 --> 01:10:00,450 Ngoài mở chúng. 1479 01:10:00,450 --> 01:10:04,760 Chúng tôi đã viết tất cả các mã này ngay bây giờ, vì vậy tôi sẽ không dừng lại ở mã này. 1480 01:10:04,760 --> 01:10:09,670 Tiếp theo là một số công cụ đó là cụ thể để các loại tập tin, chúng tôi đang sử dụng, mà 1481 01:10:09,670 --> 01:10:12,240 là các tập tin bitmap. 1482 01:10:12,240 --> 01:10:15,660 Các tập tin bitmap có một số siêu dữ liệu liên kết với chúng. 1483 01:10:15,660 --> 01:10:20,190 >> Vì vậy, các cặp vợ chồng đầu tiên của byte cho bạn biết về các tập tin. 1484 01:10:20,190 --> 01:10:23,460 Họ không phải là màu sắc của các điểm ảnh trong hình ảnh đó. 1485 01:10:23,460 --> 01:10:25,120 Họ cho bạn biết về các tập tin. 1486 01:10:25,120 --> 01:10:28,220 Và nếu bạn đọc thông qua các bộ vấn đề, bạn sẽ có nhiều thông tin hơn 1487 01:10:28,220 --> 01:10:33,100 về những loại cấu trúc siêu dữ liệu được bao gồm với bitmap. 1488 01:10:33,100 --> 01:10:39,350 >> Nhưng đó là lý do tại sao chúng tôi có điều này đầu tiên bộ - mã này ngay tại đây. 1489 01:10:39,350 --> 01:10:42,490 Chúng tôi đang đọc các siêu dữ liệu - 1490 01:10:42,490 --> 01:10:45,800 hai phần của siêu dữ liệu - các tập tin tiêu đề và tiêu đề thông tin. 1491 01:10:45,800 --> 01:10:51,030 Và chúng tôi đang kiểm tra một số bộ phận của nó chắc chắn rằng nó là một tập tin bitmap đúng 1492 01:10:51,030 --> 01:10:52,420 trước khi tiếp tục. 1493 01:10:52,420 --> 01:10:55,470 >> Và một lần nữa, đây là những chi tiết chúng tôi không cần phải đi vào ngay bây giờ. 1494 01:10:55,470 --> 01:10:57,720 Nếu bạn đọc thông qua các thiết lập vấn đề, bạn sẽ hiểu này. 1495 01:10:57,720 --> 01:11:01,370 Long câu chuyện ngắn, đây là những chỉ nói, đây là một tập tin bitmap, và 1496 01:11:01,370 --> 01:11:02,810 xác nhận rằng. 1497 01:11:02,810 --> 01:11:05,180 >> Tiếp theo, chúng tôi đang viết những đến tập tin ra. 1498 01:11:05,180 --> 01:11:05,660 Chúng ta thấy rằng ở đây. 1499 01:11:05,660 --> 01:11:06,910 Chúng tôi muốn gửi đến con trỏ ra. 1500 01:11:06,910 --> 01:11:09,260 1501 01:11:09,260 --> 01:11:11,320 Tiếp theo, chúng tôi xác định padding. 1502 01:11:11,320 --> 01:11:15,240 Vì vậy, một lần nữa, như là đặc thù với một tập tin bitmap, bao gồm một số dòng 1503 01:11:15,240 --> 01:11:16,840 đệm ở cuối. 1504 01:11:16,840 --> 01:11:19,000 Và nếu bạn đọc thông qua các bộ vấn đề, bạn sẽ tìm hiểu thêm về đệm. 1505 01:11:19,000 --> 01:11:22,330 Đây là công thức để tìm padding. 1506 01:11:22,330 --> 01:11:23,610 >> Quan trọng cần nhớ - 1507 01:11:23,610 --> 01:11:29,720 khi bạn thay đổi kích thước của một bitmap tập tin, thay đổi padding. 1508 01:11:29,720 --> 01:11:31,970 Khi bạn thay đổi kích thước của một tập tin, thay đổi padding. 1509 01:11:31,970 --> 01:11:34,310 Nó không bao giờ có lớn hơn 3 - 1510 01:11:34,310 --> 01:11:36,510 nó sẽ được 0 đến 3, bao gồm. 1511 01:11:36,510 --> 01:11:38,930 Nhưng khi bạn thay đổi kích thước của một cái gì đó, những thay đổi padding. 1512 01:11:38,930 --> 01:11:47,100 >> Nếu tôi chỉ có một điểm ảnh trong hàng đó, tôi cần ba byte của đệm, vì 1513 01:11:47,100 --> 01:11:51,190 mỗi hàng có là bội số của bốn byte dài trong một tập tin bitmap. 1514 01:11:51,190 --> 01:11:56,120 Nhưng nếu tôi tăng gấp đôi nó, để đi từ một điểm ảnh để hai pixel, mỗi trong số đó, 1515 01:11:56,120 --> 01:11:59,510 hãy nói, là một byte, sau đó tôi cần hai byte của đệm để thực hiện 1516 01:11:59,510 --> 01:12:00,970 mà bằng bốn. 1517 01:12:00,970 --> 01:12:04,200 >> Vì vậy, khi tôi thay đổi kích thước của một cái gì đó, Tôi cần phải thay đổi số tiền 1518 01:12:04,200 --> 01:12:06,551 đệm tôi có. 1519 01:12:06,551 --> 01:12:08,100 Điều đó có ý nghĩa với tất cả mọi người? 1520 01:12:08,100 --> 01:12:12,020 1521 01:12:12,020 --> 01:12:18,720 Tiếp theo, chúng ta lặp qua mỗi hàng, hoặc thông qua tất cả các hàng. 1522 01:12:18,720 --> 01:12:21,400 Và sau đó chúng ta lặp qua mỗi cột trong mỗi hàng. 1523 01:12:21,400 --> 01:12:25,330 Chúng tôi đang điều trị bitmap này như một mạng lưới, giống như chúng tôi đã xử lý 1524 01:12:25,330 --> 01:12:26,490 hội đồng quản trị trong 15. 1525 01:12:26,490 --> 01:12:29,200 >> Như chúng ta xử lý những viên gạch khi chúng tôi in chúng trên màn hình. 1526 01:12:29,200 --> 01:12:31,350 Một mạng lưới các hàng và cột. 1527 01:12:31,350 --> 01:12:32,350 Sau đó - chúng ta thấy điều này. 1528 01:12:32,350 --> 01:12:33,840 Chúng tôi thực sự chỉ cần mã hóa này. 1529 01:12:33,840 --> 01:12:35,780 Chúng tôi tạo ra một số lưu trữ tạm thời. 1530 01:12:35,780 --> 01:12:38,710 Chúng ta đọc thấy trong đó, và sau đó chúng tôi viết nó ra. 1531 01:12:38,710 --> 01:12:42,680 Đây là chính xác những gì chúng ta đã làm. 1532 01:12:42,680 --> 01:12:46,760 >> Tiếp theo, bởi vì tôi đã nói mỗi dòng kết thúc trong một số đệm, chúng tôi 1533 01:12:46,760 --> 01:12:48,260 bỏ qua đệm đó - 1534 01:12:48,260 --> 01:12:51,000 padding cũ. 1535 01:12:51,000 --> 01:12:52,630 Và sau đó chúng ta thêm nó trở lại. 1536 01:12:52,630 --> 01:12:55,140 Trong trường hợp này, chúng tôi đang tạo các tập tin chính xác. 1537 01:12:55,140 --> 01:12:56,180 Chúng ta chỉ cần sao chép nó. 1538 01:12:56,180 --> 01:12:57,700 Vì vậy, dòng này là loại ngớ ngẩn. 1539 01:12:57,700 --> 01:12:59,660 Chúng ta có thể theo nghĩa đen chỉ đặt đệm in 1540 01:12:59,660 --> 01:13:04,290 >> Nhưng nếu bạn thay đổi kích thước của tập tin, bạn vẫn còn muốn dòng này? 1541 01:13:04,290 --> 01:13:08,510 1542 01:13:08,510 --> 01:13:11,560 Vì vậy, nếu chúng ta thay đổi kích thước của một tập tin, chúng ta vẫn muốn bỏ qua 1543 01:13:11,560 --> 01:13:12,810 trong đệm cũ? 1544 01:13:12,810 --> 01:13:15,170 1545 01:13:15,170 --> 01:13:15,970 >> HỌC SINH 74: Có. 1546 01:13:15,970 --> 01:13:17,090 >> JASON Hirschhorn: Vì vậy, chúng tôi làm. 1547 01:13:17,090 --> 01:13:19,290 Bởi vì điều này, một lần nữa, giao dịch với tập tin nguồn. 1548 01:13:19,290 --> 01:13:21,570 Chúng tôi không quan tâm đến các padding từ tập tin nguồn. 1549 01:13:21,570 --> 01:13:23,410 Chúng tôi muốn đi đến dòng kế tiếp. 1550 01:13:23,410 --> 01:13:28,850 Nhưng chúng tôi không chỉ đơn giản là đưa trở lại số lượng cũ của padding. 1551 01:13:28,850 --> 01:13:31,540 Chúng ta cần phải đặt lại số tiền mới của padding. 1552 01:13:31,540 --> 01:13:35,810 >> Vì vậy, khi chúng ta thay đổi kích thước của một tập tin, chúng tôi vẫn muốn bỏ qua 1553 01:13:35,810 --> 01:13:38,270 đệm trong tập tin cũ - những gì chúng tôi đang đọc từ. 1554 01:13:38,270 --> 01:13:40,370 Nhưng những gì chúng tôi muốn gửi đến, chúng ta sẽ cần phải đặt lại một số khác nhau 1555 01:13:40,370 --> 01:13:41,890 số đệm mà chúng tôi đã xác định. 1556 01:13:41,890 --> 01:13:42,780 Yeah. 1557 01:13:42,780 --> 01:13:44,550 >> HỌC SINH 75: Trình tự của hai dòng không quan trọng, phải không? 1558 01:13:44,550 --> 01:13:46,160 Bởi vì bạn đang xử lý tập tin khác nhau. 1559 01:13:46,160 --> 01:13:46,620 >> JASON Hirschhorn: Chính xác. 1560 01:13:46,620 --> 01:13:48,220 Thứ tự của hai dòng không quan trọng. 1561 01:13:48,220 --> 01:13:49,790 Chúng tôi viết dòng này. 1562 01:13:49,790 --> 01:13:51,430 Này là ở đây cho tập tin chúng tôi muốn gửi đến. 1563 01:13:51,430 --> 01:13:54,370 Đó là quan trọng, vì vậy chúng tôi có được số tiền phải của padding. 1564 01:13:54,370 --> 01:13:57,560 Này có để đối phó với các tập tin trong. 1565 01:13:57,560 --> 01:13:58,560 Chúng tôi muốn bỏ qua ngay trong đệm. 1566 01:13:58,560 --> 01:13:59,470 >> Chúng tôi không muốn đọc - 1567 01:13:59,470 --> 01:14:01,500 nếu chúng ta đang đọc một byte tại một thời gian, chúng tôi không quan tâm đến những byte padding. 1568 01:14:01,500 --> 01:14:04,070 Chúng tôi muốn chuyển đến dòng kế tiếp. 1569 01:14:04,070 --> 01:14:11,800 Cuối cùng giống như Lucy đã cho chúng ta, chúng tôi đóng cửa các tập tin và trả về 0. 1570 01:14:11,800 --> 01:14:13,890 Vì vậy, đây là copy.c. 1571 01:14:13,890 --> 01:14:17,850 Và chúng tôi thực sự đã viết - chúng tôi đã dành hầu hết phần viết này, về cơ bản. 1572 01:14:17,850 --> 01:14:18,740 >> Bạn thực hiện điều này. 1573 01:14:18,740 --> 01:14:22,440 Vì vậy, hy vọng bạn có một cảm giác tốt về những gì đang xảy ra ở đây. 1574 01:14:22,440 --> 01:14:25,890 Sự khác biệt lớn, trung thực, chỉ là phần đầu tiên này giao dịch với 1575 01:14:25,890 --> 01:14:29,970 đặc thù của các tập tin bitmap. 1576 01:14:29,970 --> 01:14:33,570 Vì vậy, tôi có như slide tiếp theo của tôi, những gì chúng ta cần phải làm gì? 1577 01:14:33,570 --> 01:14:35,510 Vâng, chúng ta hãy suy nghĩ về whodunit. 1578 01:14:35,510 --> 01:14:38,080 >> Và cho ai đó đọc qua vấn đề thiết lập, những gì chúng tôi 1579 01:14:38,080 --> 01:14:41,410 cần làm trong whodunit? 1580 01:14:41,410 --> 01:14:42,080 Đơn giản. 1581 01:14:42,080 --> 01:14:42,460 Aleja. 1582 01:14:42,460 --> 01:14:48,570 >> ALEJA: Bạn có thể đưa ra các phần của mỗi điểm ảnh biểu thị màu đỏ. 1583 01:14:48,570 --> 01:14:49,730 Và sau đó - 1584 01:14:49,730 --> 01:14:50,730 loại? 1585 01:14:50,730 --> 01:14:51,860 >> JASON Hirschhorn: OK. 1586 01:14:51,860 --> 01:14:54,460 Vì vậy, đưa ra các phần của mỗi điểm ảnh biểu thị màu đỏ. 1587 01:14:54,460 --> 01:14:57,234 Đó là gần, nhưng không phải tất cả của nó. 1588 01:14:57,234 --> 01:14:59,780 >> HỌC SINH 76: Vâng, có cách khác nhau để làm điều đó. 1589 01:14:59,780 --> 01:14:59,870 >> JASON Hirschhorn: OK. 1590 01:14:59,870 --> 01:15:03,070 Cho tôi một cách. 1591 01:15:03,070 --> 01:15:08,240 >> HỌC SINH 76: Đi ra tất cả các màu đỏ, và sau đó nhấn mạnh màu xanh và màu xanh lá cây. 1592 01:15:08,240 --> 01:15:10,010 >> JASON Hirschhorn: OK. 1593 01:15:10,010 --> 01:15:11,830 Vì vậy, cho cả hai cách - 1594 01:15:11,830 --> 01:15:15,210 có vẻ như chúng ta cung cấp cho nó một điểm ảnh, nó có một mức đỏ, xanh dương và xanh lá. 1595 01:15:15,210 --> 01:15:19,350 Chúng tôi muốn thay đổi cấp độ tương đối của màu đỏ, xanh dương và xanh lá cây, tùy thuộc 1596 01:15:19,350 --> 01:15:20,740 trên pixel. 1597 01:15:20,740 --> 01:15:28,380 Nơi trong mã này, chúng ta nên thay đổi tương đối đỏ, xanh dương và xanh lá cây 1598 01:15:28,380 --> 01:15:29,720 mức độ của một điểm ảnh nhất định. 1599 01:15:29,720 --> 01:15:30,600 Sau khi chúng tôi đã đọc nó - 1600 01:15:30,600 --> 01:15:32,520 trước khi chúng tôi viết nó? 1601 01:15:32,520 --> 01:15:34,564 Cho tôi số dòng. 1602 01:15:34,564 --> 01:15:35,950 >> SINH VIÊN NHIỀU: 83. 1603 01:15:35,950 --> 01:15:37,320 >> JASON Hirschhorn: 83. 1604 01:15:37,320 --> 01:15:38,570 Vì vậy, ngay tại đây. 1605 01:15:38,570 --> 01:15:40,830 1606 01:15:40,830 --> 01:15:45,710 Cho whodunit, mã bạn cần ghi tất cả nên đi ngay. 1607 01:15:45,710 --> 01:15:47,640 Và đó là mã duy nhất bạn cần phải viết. 1608 01:15:47,640 --> 01:15:51,520 Bởi vì, như chúng ta đã nghe, tất cả bạn cần làm là thay đổi những màu xanh tương đối, 1609 01:15:51,520 --> 01:15:54,420 mức màu đỏ, và màu xanh lá cây từ mỗi điểm ảnh. 1610 01:15:54,420 --> 01:15:58,250 >> Bạn đã đọc nó vào, và bây giờ bạn đang sẽ viết nó ra. 1611 01:15:58,250 --> 01:16:03,100 Làm thế nào để tôi nhận được - nếu tôi có điều này gọi là ba, ngay tại đây, và nó có 1612 01:16:03,100 --> 01:16:04,570 gõ RGBTRIPLE - 1613 01:16:04,570 --> 01:16:08,650 tốt, nếu chúng ta nhìn vào bmp.h, RGBTRIPLE là gì? 1614 01:16:08,650 --> 01:16:11,450 1615 01:16:11,450 --> 01:16:12,700 >> HỌC SINH 77: Đó là một cấu trúc. 1616 01:16:12,700 --> 01:16:17,440 1617 01:16:17,440 --> 01:16:18,900 >> JASON Hirschhorn: RGBTRIPLE là một cấu trúc. 1618 01:16:18,900 --> 01:16:22,330 Chúng ta thấy rằng phải xuống đây. 1619 01:16:22,330 --> 01:16:26,600 Và do đó, nếu tôi muốn truy cập, nói, mức độ màu đỏ của các cấu trúc, làm thế nào tôi 1620 01:16:26,600 --> 01:16:30,005 truy cập mức độ màu đỏ của cấu trúc này? 1621 01:16:30,005 --> 01:16:37,280 >> [CLASS thì thầm] 1622 01:16:37,280 --> 01:16:38,530 >> HỌC SINH 78: RGBTRIPLE.rgbtred? 1623 01:16:38,530 --> 01:16:47,250 1624 01:16:47,250 --> 01:16:48,856 >> JASON Hirschhorn: Là đúng? 1625 01:16:48,856 --> 01:16:53,040 >> HỌC SINH 79: Nó sẽ được ba dấu chấm, thay vì chấm RGBTRIPLE? 1626 01:16:53,040 --> 01:16:54,120 >> JASON Hirschhorn: Triple. 1627 01:16:54,120 --> 01:16:56,700 Ba là biến địa phương, vì vậy ở đây, không có con trỏ ở đây. 1628 01:16:56,700 --> 01:16:58,400 Vì vậy, chúng ta chỉ cần sử dụng các ký hiệu dấu chấm. 1629 01:16:58,400 --> 01:17:00,480 Điều này sẽ cho tôi mức độ của màu đỏ. 1630 01:17:00,480 --> 01:17:06,180 Nếu tôi muốn thay đổi nó, tôi chỉ cần đặt nó bằng một cái gì đó khác nhau. 1631 01:17:06,180 --> 01:17:13,190 Vì vậy, một lần nữa, dòng mã này truy cập biến này bên trong cấu trúc này, và 1632 01:17:13,190 --> 01:17:15,070 chúng ta có thể đặt nó vào một cái gì đó mới. 1633 01:17:15,070 --> 01:17:20,040 >> Vì vậy, cho whodunit, một lần nữa, đây là, trong bản chất, những gì chúng ta cần làm. 1634 01:17:20,040 --> 01:17:21,170 Rất đơn giản. 1635 01:17:21,170 --> 01:17:25,020 Chỉ cần thay đổi một số mức độ tương đối, và đây là nơi mà mã đi. 1636 01:17:25,020 --> 01:17:27,720 Thay đổi kích thước, mặt khác, là một chút phức tạp hơn. 1637 01:17:27,720 --> 01:17:30,900 Trong thực tế, thay đổi kích cỡ có lẽ là một phần khó khăn nhất trong vấn đề này thiết lập. 1638 01:17:30,900 --> 01:17:32,720 Chúng tôi có ba phút để đi qua nó. 1639 01:17:32,720 --> 01:17:34,910 >> Nhưng một lần nữa, chúng tôi đã viết hầu hết các mã này, vì vậy chúng tôi 1640 01:17:34,910 --> 01:17:36,500 nên được khá quen thuộc. 1641 01:17:36,500 --> 01:17:40,750 Một số điều chúng tôi muốn làm trong là gì thay đổi kích thước, nếu bạn đã đọc qua các 1642 01:17:40,750 --> 01:17:43,470 vấn đề thiết lập? 1643 01:17:43,470 --> 01:17:45,290 Nếu bạn cung cấp cho họ với tôi, chúng tôi có thể nói chuyện về chúng. 1644 01:17:45,290 --> 01:17:47,340 Một số điều chúng tôi muốn làm là gì? 1645 01:17:47,340 --> 01:17:47,970 >> HỌC SINH 80: theo chiều dọc - 1646 01:17:47,970 --> 01:17:52,360 vì vậy bạn phải theo chiều ngang thay đổi kích thước, nhưng theo chiều dọc thay đổi kích thước không? 1647 01:17:52,360 --> 01:17:58,475 >> JASON Hirschhorn: Vì vậy, một khi chúng tôi đang đưa ra pixel, và chúng tôi muốn thay đổi kích thước của một 1648 01:17:58,475 --> 01:18:03,460 yếu tố của hai, bây giờ nó cần phải được thay đổi kích thước theo chiều ngang và thay đổi kích cỡ 1649 01:18:03,460 --> 01:18:05,220 theo chiều dọc. 1650 01:18:05,220 --> 01:18:06,640 Điều đó có ý nghĩa? 1651 01:18:06,640 --> 01:18:07,060 Yeah. 1652 01:18:07,060 --> 01:18:09,300 Vì vậy, đó có thể là Thách thức lớn nhất. 1653 01:18:09,300 --> 01:18:10,430 Và chúng ta sẽ nói về điều đó trong một giây. 1654 01:18:10,430 --> 01:18:11,065 Yeah. 1655 01:18:11,065 --> 01:18:15,270 >> HỌC SINH 81: Con đường tôi nghĩ về nó bạn là cần thiết in nó ra - 1656 01:18:15,270 --> 01:18:15,490 >> JASON Hirschhorn: Chờ. 1657 01:18:15,490 --> 01:18:17,580 Không cho chúng tôi biết những gì bạn đã làm. 1658 01:18:17,580 --> 01:18:20,620 Chúng ta sẽ nói chuyện trong logic. 1659 01:18:20,620 --> 01:18:21,870 >> HỌC SINH 81: OK. 1660 01:18:21,870 --> 01:18:25,090 1661 01:18:25,090 --> 01:18:27,410 Câu hỏi là gì? 1662 01:18:27,410 --> 01:18:28,892 >> JASON Hirschhorn: Bạn chỉ giơ tay của bạn. 1663 01:18:28,892 --> 01:18:31,600 Không có câu hỏi. 1664 01:18:31,600 --> 01:18:32,520 Hãy để tôi trình bày nó. 1665 01:18:32,520 --> 01:18:34,560 Hãy để tôi chỉ thảo luận ngắn gọn này. 1666 01:18:34,560 --> 01:18:38,400 Vì vậy, chúng tôi có một điểm ảnh, chúng tôi muốn tái tạo nó, cả hai chiều ngang và 1667 01:18:38,400 --> 01:18:39,360 theo chiều dọc. 1668 01:18:39,360 --> 01:18:48,920 Vì vậy, lý tưởng những gì chúng tôi làm ở đây là, chúng tôi đọc trong điểm ảnh của chúng tôi, chúng tôi viết nó 1669 01:18:48,920 --> 01:18:51,690 Tuy nhiên rất nhiều lần. 1670 01:18:51,690 --> 01:18:54,720 >> Nhưng sau đó chúng tôi có lừa của chúng tôi ở đây, bởi vì sau đó chúng tôi muốn bỏ qua 1671 01:18:54,720 --> 01:18:57,660 dòng kế tiếp và viết nó ở bắt đầu của dòng tiếp theo. 1672 01:18:57,660 --> 01:19:02,960 Vì vậy, nếu chúng ta muốn tái tạo cả theo chiều ngang và theo chiều dọc, là những gì 1673 01:19:02,960 --> 01:19:05,050 một cách tốt để làm điều đó - 1674 01:19:05,050 --> 01:19:06,780 một tốt mặc dù để làm điều đó? 1675 01:19:06,780 --> 01:19:11,950 Vì vậy, chúng ta không cần phải liên tục tìm kiếm xung quanh tập tin của chúng tôi để đặt những điều. 1676 01:19:11,950 --> 01:19:14,360 >> Câu hỏi đó có thể không có có ý nghĩa, nhưng tôi nghĩ rằng một 1677 01:19:14,360 --> 01:19:15,800 câu trả lời cho nó sẽ giúp. 1678 01:19:15,800 --> 01:19:17,210 >> HỌC SINH 82: Tạo một mảng? 1679 01:19:17,210 --> 01:19:20,090 >> JASON Hirschhorn: Vì vậy, hãy suy nghĩ của mỗi tập tin như là một hàng. 1680 01:19:20,090 --> 01:19:22,550 Chúng ta hãy suy nghĩ về hàng. 1681 01:19:22,550 --> 01:19:26,670 Nếu chúng ta có hàng đầu tiên của chúng tôi từ nhỏ của chúng tôi hình ảnh, chúng ta có thể thực hiện liên tiếp 1682 01:19:26,670 --> 01:19:30,640 vào một hàng lớn từ một bức tranh lớn, và sau đó nhân rộng liên tiếp tuy nhiên 1683 01:19:30,640 --> 01:19:34,250 nhiều lần nó cần phải được nhân rộng, thay vì đi từng pixel, 1684 01:19:34,250 --> 01:19:37,260 mà được khó hiểu khi đối phó với các tập tin. 1685 01:19:37,260 --> 01:19:38,730 >> Bởi vì nếu chúng ta có - 1686 01:19:38,730 --> 01:19:41,260 Tôi đang chạy ra khỏi không gian. 1687 01:19:41,260 --> 01:19:46,490 Nếu đây là tập tin của chúng tôi, và chúng tôi có mà một điểm ảnh đó, và chúng tôi muốn đặt nó 1688 01:19:46,490 --> 01:19:49,840 phải có, chúng tôi vẫn có một số điều mà cần phải đi qua có khi chúng ta 1689 01:19:49,840 --> 01:19:51,450 văn bản và tạo ra tập tin mới của chúng tôi - 1690 01:19:51,450 --> 01:19:53,250 tập tin của chúng tôi đó là lớn gấp đôi. 1691 01:19:53,250 --> 01:19:56,820 >> Nhưng nó thực sự khó khăn với các chức năng tập tin để bỏ qua xung quanh đường dây mới 1692 01:19:56,820 --> 01:20:00,260 như thế, và sau đó quay trở lại đây và đặt mọi thứ trong đó. 1693 01:20:00,260 --> 01:20:04,500 Nó hầu như không thể làm điều gì đó như vậy, nếu có ý nghĩa. 1694 01:20:04,500 --> 01:20:10,180 Vì vậy, nếu chúng ta suy nghĩ về hàng, chúng tôi có thể lấy hàng của chúng tôi, và sau đó đặt nó - 1695 01:20:10,180 --> 01:20:11,720 tái tạo hàng theo chiều dọc. 1696 01:20:11,720 --> 01:20:15,860 >> Và đó là cách chúng ta đối phó với thay đổi kích thước theo chiều dọc thay vì theo chiều ngang. 1697 01:20:15,860 --> 01:20:18,810 Đó là loại nhanh chóng, và một chút bối rối. 1698 01:20:18,810 --> 01:20:22,375 Thật không may thời gian của chúng tôi là lên. 1699 01:20:22,375 --> 01:20:27,340 Tôi sẽ đứng bên ngoài cho những người bạn ở đây ai có thắc mắc về 1700 01:20:27,340 --> 01:20:30,500 bộ vấn đề, bao gồm phục hồi. 1701 01:20:30,500 --> 01:20:32,320 >> Vì vậy, hãy hoãn cho bây giờ. 1702 01:20:32,320 --> 01:20:34,480 Và một lần nữa, nếu bạn có bất kỳ câu hỏi, chúng tôi có thể trò chuyện bên ngoài. 1703 01:20:34,480 --> 01:20:38,294