JASON HIRSCHHORN: خوش آمدید، هر کس، به هفته 6. خوشحالم که همه شما را مشاهده زنده ام و به خوبی بعد از امتحان 0، زیرا من می دانم که کمی خشن بود. اما خوشبختانه، همه شما انجام باور نکردنی خوب. و به طوری که فوق العاده است. اگر شما در بخش من هستی، من بیشتر داده ام از شما به آزمونها خود را در حال حاضر. زن و شوهر از شما، من ملاقات بعد از کلاس. و اگر شما یک دانش آموز گسترش و هستیم شما امتحان خود را دریافت نکرده اند به عقب در عین حال، TF شما است احتمالا کار بر روی آن و درجه بندی آن، و آن را به عقب بر گردیم به شما در مدت کوتاهی. بنابراین دانش آموزان برنامه افزودنی من که تماشای در حال حاضر - امیدوارم زندگی می کنند - من امتحان خود را دریافت کنید مدت کوتاهی نیز هست. دستور کار ما امروز به شرح زیر است. اول، ما قصد داریم به برخی از به منابع که CS50 فراهم می کند به شما. ما قصد داریم تا بیش از امتحان 0 به بعد، و من به هر گونه سوال شما پاسخ کسی دارد در مورد مشکل خاصی. و پس از آن، ما خواهد بود بیش از رفتن فایل I / O و مشکل تنظیم 5. این دو مبحث گذشته خواهد شد تا بخش عمده ای از بخش امروز. من به این لیست هر هفته به عنوان قرار داده تا یادآوری به همه شما، اما هسته بخش ما فقط 90 دقیقه - ما قادر به پوشش همه چیز را که من دوست دارم برای پوشش برای شما بچه ها. ولی ما یک تن از منابع شما را به منظور جلب به عنوان شما را بشناسند مواد و کار را از طریق مشکل شما مجموعه. یادآور می شود که من آنلاین متن جعبه، برای شما راه اندازی را پر کنید اگر شما هر گونه بازخورد برای من، هر دو مثبت و سازنده، در مورد بخش. این URL واقع شده است حق را در اینجا. پس لطفا، لحظه ای اگر شما هر گونه بازخورد، چه در بخش، و یا پس از آن، یا بعد از ویدیوی شما را تماشا آنلاین، به من بازخورد شما. من واقعا هیچ و همه آن را قدردانی میکنیم. پس من با ام مکالمات کوچک با تعداد زیادی از من دانش آموزان در طول هفته - به من دست آزمونها به عقب، صحبت کردن در مورد البته، دیدن شما چگونه در حال انجام. و یک موضوع تا به تا بیش از آمده و بیش از در صحبت کردن در مورد - در خاص - مشکل مجموعه. و من که موضوع را بسته بندی در هیئت مدیره در حال حاضر. اساسا، یک تفاوت وجود دارد بین چرخش در چیزی است که درست و کاری را انجام داده است که به خوبی انجام می شود. اکثر مردم انجام شده است فوق العاده از نظر صحت - 5 و یا 4 در همه psets. اکثر مردم در حال گرفتن تمام کسانی که از زمان. با این حال، فقط به خاطر شما انجام داده ام درست به این معنا نیست که شما انجام چیزی به عنوان زیبایی، و یا کارآمد، و یا به عنوان پاک که شما می تواند آن را انجام می شود. و این چیزی است که طراحی است - و به درجه، سبک کمتر - محور هستند. بنابراین من از همه شما هل دادن هستم، و دیگر TFS در حال هل دادن شما بچه ها، نه تنها به نوبه خود در چیزهایی که درست است، اما به نوبه خود در چیزهایی که به خوبی رمزی. انجام نشده غیر ضروری را برای حلقه ها، متغیرهای اگر محاسبه مجدد ندارد شما لازم نیست. به عنوان مثال، به دنبال بازگشت به مشکل تنظیم 4 هنگام قرار دادن آجر در صفحه نمایش، در هر سطر - هر آجر در ردیف داده شده است، همان مختصات y - همان ارتفاع هماهنگ می کند. به طوری که مختصات y به نیاز ندارد در داخل کشور محاسبه تو در تو حلقه For که شما به احتمال زیاد مورد استفاده قرار برای قرار دادن آن آجر بر روی صفحه نمایش. تنها نیاز به هر محاسبه می شود زمانی که شما روشن یک ردیف، و یا منتقل کردن یک ردیف. بنابراین می گویند اگر 10 آجر در یک وجود دارد ردیف، هر آجر می توانید همان مختصات y، و مختصات y فقط می توانید محاسبه می شود برای یک بار همه از آن. این کار نیاز به محاسبه توان 10 بار، و نه که نیاز به محاسبه به در واقعی اتفاق می افتد فراخوانی تابع - جدید فراخوانی تابع gracked. بنابراین اگر که کمی گیج کننده بود شما، عام تر، چیزهایی که لازم نیست هر بار تنها اتفاق می افتد شما را از طریق یک حلقه FOR رفتن نیست باید باشد قرار دادن در داخل حلقه FOR و نباید رخ می دهد هر بار که شما به از طریق حلقه FOR. یکی دیگر از مثال طراحی خوب دیدیم در هفته 3 15، شما می توانید نگه دارید آهنگ از صفر است. بنابراین، هنگامی که شما مقداردهی اولیه هیئت مدیره، شما صرفه جویی - در یک متغیر جهانی، شاید - x و y مختصات از صفر است. و پس از آن هر زمان که شما - در تابع حرکت خود را، هر زمان که شما را یک حرکت موفقیت آمیز، شما به روز رسانی محل صفر است. که شما را از نیاز به صرفه جویی در تو در تو FOR حلقه را از طریق نگاه هیئت مدیره در هر زمان در تابع حرکت خود را و پیدا کردن صفر، و یا پیدا کردن کاشی، و سپس به بررسی آنچه که در کنار آن. در عوض، شما باید محل صفر است، شما می توانید فقط، نگاه بالا به زیر، و به چپ و راست از آن، برای پیدا کردن کاشی تو به دنبال. بنابراین در شرایط از برنامه های ما نوشتن، آنها هرگز به اندازه کافی بزرگ هستند که برخی از این تصمیم گیری های طراحی واقعا به مانع خود را برنامه، و یا آن را آهسته تر اجرا شود، و یا شاید حتی از حافظه اجرا شود. اما ما هنوز شما هل دادن بچه ها برای نوشتن به عنوان ظریف و کد کارآمد که ممکن است. بنابراین اگر شما در انجام پایان دادن به نوشتن چیز که به طور قابل توجهی بزرگتر دامنه، آنها را با خوب نوشته شده است طراحی علاوه بر درست بودن. بنابراین تعدادی از شما آورده است که از. این چیزی است که ما به دنبال این - چیزی است که ما قصد داریم به ادامه بچه ها در فشار شما. اگر تا به حال هر گونه سوال در مورد داشته طراحی برنامه های خود را، احساس رایگان برای رسیدن به من، و من خوشحال هستم راه رفتن را از طریق برنامه خود را با شما، و اشاره به برخی از طرح تصمیم گیری های شما ساخته شده است، و برخی از شما را پیشنهادات در مورد چگونگی ساخت حتی تصمیم گیری های طراحی بهتر است. بنابراین ما در حال به حرکت در تاریخ به صحبت کردن در مورد امتحان 0. قبل از ما انجام این کار، کسی هر گونه سوال در مورد آنچه I تحت پوشش تا کنون؟ [سر و صدا سر و صدا] JASON HIRSCHHORN: هفت ثانیه صورت گرفت. OK. اجازه دهید در مورد امتحان 0 بحث کمی. بسیاری از شما امتحان خود را به عقب 0 است. اگر اینکار را نکنید، امیدوارم شما آن را به یاد داشته باشید کمی. اما اگر شما امتحان 0، پس از آن گرفته شده همچنین دسترسی به PDF آنلاین در داشته باشد راه حل های نمونه. آیا هر کسی هر گونه سوال قبل ما به مواد هفته در مورد پرش مشکل خاصی در امتحان 0 - چرا جواب این است آنچه در آن است؟ آیا کسی در مورد هر چیزی اشتباه گرفته؟ حتی اگر شما این مشکل را درست کردم، اما فقط می خواهم به توضیح آن را کمی بیشتر، من خوشحال بودم که این کار را در حال حاضر. بنابراین من به شما بچه ها خواسته اند تا آمده آماده شده با برخی از افکار در مورد امتحان 0. پس چه کسی می خواهم تا ما را آغاز شده با یک سوال و یا در مورد امتحان 0 نظر؟ [سر و صدا PAPER] JASON HIRSCHHORN: هر کسی نیست کاملا انجام داد. بنابراین من می دانم که [می خندد] باید برخی از سوالات وجود دارد در مورد امتحان 0. OK. بله. Ompica. OMPICA: شماره 10. JASON HIRSCHHORN: شماره 10. کدام یک عدد 10 بود؟ OMPICA: - JASON HIRSCHHORN: I haven't - OMPICA: شامل - JASON HIRSCHHORN: شماره 10 هشت بود برای من - نوشتن هشت به من؟ OMPICA: آره. JASON HIRSCHHORN: OK. بنابراین یکی دیگر از سوال شما می تواند داشته باشد خواسته بود من از پیش آگاهانه؟ پاسخ مثبت است. در بخش قبل از مسابقه، از او خواستم شما بچه ها به کد هر دو پوند و هشت به من. هر دوی آنها به اتفاق افتاد در مسابقه ظاهر می شود. پس امیدوارم، شما پرداخت می شود با توجه به که. و اگر شما تا به حال، پس از آن شما را مجبور احتمالا به خوبی در آن دو انجام می شود. اما هشت به من، ما در واقع کد آن را در کلاس، اما، دوباره، در مسابقه پرسید. بنابراین چند چیز را به توجه داشته باشید که برنامه نویسی هشت به من. اولین چیزی که، در هر سوال، بود که شما نیاز به چک کردن رشته به تهی برابر بود. زن و شوهر از مردم سعی در بررسی بعد در در این برنامه اگر S براکت من بود - بنابراین یک کاراکتر خاص در آن رشته - به تهی برابر بود. اما به یاد داشته باشید، که تهی است که در اصل - آن را خوب به از فکر می کنم null به عنوان یک اشاره گر صفر - یک اشاره گر به صفر - جایی در حافظه که در آن شما هرگز نمی تواند دسترسی پیدا کنید. بنابراین اگر چیزی به تهی برابر است، شما می دانم که آن را مقدار دهی اولیه نشده است، و یا هیچ چیز وجود دارد وجود دارد. بنابراین یک ستاره کاراکتر است، ها براکت من یک کاراکتر است. پس از آن را حس می کند برای مقایسه به تهی، اما براکت ندارد و من تهی. اما باز هم - به طوری که اولین چیزی بود که شما قرار بود به انجام - بررسی کنید تا مطمئن شوید که شما در واقع یک رشته واقعی است. بعد، شما می خواهید از طریق هر کاراکتر در رشته. و به طوری که می خواهم یک علامت کوچکتر باشد من، به عنوان مثال، اگر من تکرارکننده شما است. و که شخصیت، و دریافت ارزش واقعی آن است. شما آن را به عنوان یک کاراکتر ذخیره شده، اما مقدار ASCII برای صفر - صفر به عنوان یک شخصیت - در واقع عدد صحیح صفر نیست. برخی از آن تعداد دیگر که شما می توانید در نگاه کردن در جدول ASCII. پس یک راه برای اصلاح آن - احتمالا بهترین راه برای اصلاح که - از آن تفریق ارزش شخصیت - صفر به عنوان یک شخصیت. بنابراین منهای نقل قول تنها، صفر، یکی دیگر از نقل قول تنها. هر شماره شما را که خواهد شد به عنوان یک کاراکتر، و آن را برابر تعداد به عنوان یک عدد صحیح واقعی. و این بسیار شبیه به روش بسیاری از مردم در زمان مشکل تنظیم 2، با سزار و Viginere - آن رمز، هنگامی که شما آنها چرخش شدند. بنابراین پس از شما آن را به عنوان یک عدد از صفر تا نه، پس از آن - بسته به نوع جایی که آن را در تعداد نهایی می رود - شما نیاز به آن را چند برابر با قدرت 10. برخی از افراد از پشت به نقل مکان کرد جلو، و ضرب فرد شماره های قدرت 10. برخی از افراد از نقل مکان کرد جلو به عقب - و به همین ترتیب در زمان بالاترین اولین سفارش اعداد - و کسانی که در صرفه جویی متغیر شمارنده جهانی است. و پس از آن در هر زمان از طریق FOR حلقه، چند برابر است که غول های جهانی متغیر شمارنده 10، به فضا برای کاراکتر بعدی. به طوری که کمی گیج کننده بدون بود من نوشتن در هیئت مدیره. اما راه حل نمونه در دسترس شما است. اما آن چیز بزرگ بودند ما به دنبال. همچنین چک کنید تا مطمئن شوید که هر شخصیت در واقع یک بود شخصیت بین صفر و نه، و نه برخی از شخصیت های دیگر، مانند A، به عنوان مثال. آن چیزهایی که ما به دنبال بود در این سوال. آیا این پاسخ به سوال شما؟ OMPICA: آره. JASON HIRSCHHORN: OK. آیا هر گونه سؤال دیگر وجود دارد در مورد امتحان 0؟ چه در مورد تدوین؟ همه کامپایل درست است؟ شماره بودند وجود دارد - [می خندد] هر گونه سؤال در مورد فرآیند کامپایل؟ وای. [سر و صدا PAPER] JASON HIRSCHHORN: بله. مایکل. MICHAEL از: آیا شماره 7 - تصادفی؟ JASON HIRSCHHORN: شماره 7. شماره 7 دریافت یک عدد صحیح تصادفی بود. عالی. بنابراین یک عدد صحیح به شما داده می و عدد صحیح ب، و شما می خواهید یک تصادفی عدد صحیح بین a و b. ما در واقع می تواند ارسال این یکی در هیئت مدیره، چرا که این یک یک خط کد بود - یک راه برای انجام این کار. بنابراین ما drand به عنوان یک داده شده عملکرد ما می تواند استفاده کنید. و چه drand - با فرض آن کاشته شده است - چه drand بازگشت؟ MICHAEL: یک شناور بین 0.0 و 1.0. JASON HIRSCHHORN: A تعداد - آره. یک عدد بین 0 و 1. و به این ترتیب ما ب و. و پس از آن ما باید عدد تصادفی ما بین 0 و 1 توسط drand به ما داده شده است. برخی از افراد تلاش برای قرار دادن ب یا ب منفی ، و یا چیزی در داخل آن پرانتز. این بدان معنی است که آنها آرگومان این تابع. drand هیچ استدلال را ندارد - مانند getString می کند هر گونه استدلال را ندارد. پس از آن فقط پرانتز باز، بسته پرانتز - و این، خود، است فراخوانی تابع است. و این به شما می دهد تعداد بین 0 و 1. البته، ما یک طیف وسیعی که اعداد را می شوید می شود می گویند، اگر ب 10 است و 5 است، ما واقعا می خواهید یک تعداد با طیف وسیعی از 5. بنابراین چیزی که بعد از ما باید انجام دهیم این است ضرب این محدوده ب منهای یک. بنابراین با این فرض که ضرب. و این هم به ما تعدادی را در محدوده داده شده است. و آن محدوده خاص تفاوت بین ب منهای یک. و در نهایت، که شما فقط آن را از را - می گویند محدوده بین ب منهای یک 5، که به ما می دهد عدد از 0 تا 5. اما اگر در واقع 5، ما نیاز به افزایش این محدوده تا جایی که آن را در واقع تصور می شود، با اضافه کردن. به طوری که سمت راست منطق می شود. و پس از آن، به شما یکی دیگر از سوال؟ MICHAEL: شماره من فقط احساس می کنید واقعا گنگ در حال حاضر. [می خندد] JASON HIRSCHHORN: شماره آیا احساس واقعا گنگ. تعدادی از مردم تلاش با این سوال. و سپس، سوال دیگر این است که، drand، به شما گفت، شما می دهد شناور - شناور بر می گرداند. اما این عملکرد در واقع خواسته برای یک عدد صحیح می شود برگشت. شما لازم نیست به بازیگران این صراحت به یک عدد صحیح، چرا که این عملیات آن را به عنوان تمام درمان شناور - به عنوان یک عدد ممیز شناور. مثل این - حتی اگر این یک عدد صحیح، این اراده است به درستی ضرب. همه ضرب کار می کنند. شما لازم نیست به آن رای دادند در اینجا. در واقع، شما باید آن را به بازیگران نیست. که - اگر شما می توانید تعداد بازیگران که بین 0 و 1 - یک عدد تصادفی، یک نقطه شناور - سپس آن را یا فقط 0 یا 1 خواهد بود، بنابراین شما همه که دقت شما از دست بدهند. اما در پایان، هنگامی که شما بازگشت، آن را به طور خودکار می شود به عنوان یک عدد صحیح ارسال می شود. بنابراین شما لازم نیست که برای انجام این کار که ریخته گری خودتان. پس این پاسخ به بود این سوال، شماره 7. هر گونه سؤال دیگر در امتحان 0؟ آره، آنی. ANNIE: چه زمانی استفاده از بازگشتی ما - هنگامی که ما استفاده از حلقه های تکرار شونده؟ JASON HIRSCHHORN: هنگامی که استفاده می کنید بازگشتی - بنابراین به طور کلی، جوانب مثبت و منفی از بازگشت در مقابل یک روش تکرار شونده. آیا می توانم هر کسی ارائه یک حرفه و یا باهم؟ لطفا؟ آیا می توانم هر کسی. چه کسی می تواند یک حرفه یا یک کنترل را ارائه می دهند؟ [سر و صدا PAPER] STUDENT 1: بازگشتی کمتر است برنامه نویسی - تایپ کمتر؟ JASON HIRSCHHORN: بنابراین به طور کلی، بازگشت به ویژه، یک تابع - و یا یک الگوریتم مانند ادغام مرتب سازی بر اساس - که خود آشنایی به روش بازگشتی - ممکن است ساده تر به کد به صورت بازگشتی. و فقط حس را برای انجام آن به صورت بازگشتی. به طوری که می شود یک حرفه ای را به بازگشت. دیگران؟ آره؟ STUDENT 2: باهم به بازگشت - با استفاده از حافظه بیشتر. JASON HIRSCHHORN: پس دقیقا درست است. تابع بازگشتی را حفظ خواهد کرد با اضافه کردن پشته فریم به پشته. بنابراین اگر شما در بسیاری از عامل اعداد و باید به این عمل به مقدار زیادی، و سپس شما قطعا خواهد شد حافظه بیشتر، در حالی که یک روش تکرار شونده تنها یک قرار داده خواهد شد پشته قاب بر روی پشته، به دلیل آن همه در درون یک تابع اتفاق می افتد. هر جوانب مثبت و منفی دیگر؟ آره. STUDENT 3: مزایا را برای بازگشت. شما لازم نیست برای تعیین در پیش چند بار کد مجبور به تکرار شود. شما می توانید یک شماره از پیش تعیین شده از بار که شما مجبور به تکرار، و سپس بازگشت بهتر است، چرا که آن است که در نتیجه طول می کشد. JASON HIRSCHHORN: من فکر می کنم که درست است. اما من در هر دو مورد فکر می کنم شما هرگز - شما احتمالا برخی از ورودی از کاربر. یا این عملکرد برخی از ورودی که تعیین کنید که چگونه چند بار آن را باید اجرا شود. بنابراین به طور کلی، شما می توانید کد سخت نیست - حتی در یک روش تکرار شونده - چگونه چند بار که حلقه باید اجرا شود. آیا دیگر شما شما فکر کردن در مورد، آنی؟ OK. بنابراین کسانی که احتمالا دو - بزرگترین طرفدار و بزرگترین باهم به بازگشتی در مقابل یک روش تکرار شونده. OK. هر چیز دیگری در امتحان 0؟ بیایید در حرکت می کند. فایل I / O. است کوتاه فوق العاده وجود دارد این هفته در فایل I / O که امیدوارم شما چند تماشا کرده ام بار، و تحسین. مقدار زیادی از کار را که کرد، و من شنیده ام این است دیوانه مفید باشد. من همچنین شامل لینک در این اسلاید، در مورد شما نداشته اند فرصتی برای تماشای آن را 10 بار. بنابراین، ما می رویم به طور خلاصه در طول بروید گام اصلی برای باز کردن و کار با فایل های، و پس از آن ما می رویم به شیرجه رفتن به یک مشکل برنامه نویسی قبل بررسی مجموعه ای مشکل است. بنابراین دوباره، من قصد دارم برای قرار دادن این در صفحه نمایش، اما من قصد دارم برای صحبت فقط یک دقیقه در مورد آنچه ما انجام در اینجا با فایل I/O-- به چه معنا است؟ این بدان معناست که ما می توانیم ایجاد ما برنامه ها، و پس از آن برنامه های ما خروج، و ساخته شده است هیچ تاثیری در جهان خارج از برنامه ما. اما زمانی که ما شروع به کار با فایل ها - هر دو آنها را به خواندن در و ایجاد آنها را - ما می توانیم برخی اثر در داشته باشد جهان خارج از برنامه ما. درست مثل اگر مایکروسافت ورد بود قادر به هر گونه اسناد ورد، پس از آن یک بار مایکروسافت ورد ترک، همه خود را کار می رفته است، و آن را واقعا بی فایده است. ما در نهایت می خواهم که قادر به ارسال برنامه های است که می تواند تحت تاثیر قرار جهان اطراف آنها، هر دو با در نظر گرفتن در ورودی های پیچیده - از نظر فایل ها و از طریق فایل، و نیز جالب ایجاد و خروجی فوتی و فوری - از نظر نوع مختلف از فایل های. بنابراین به همین دلیل است که ما شروع به یاد بگیرند که چگونه برای کار با فایل. بیشتر به طور خاص، چه ما انجام می دهیم به شرح زیر است. این بسیار ساده است. تنها چند گام وجود دارد، و آنها در اینجا در این کد ذکر شده است. بنابراین ما قصد داریم از طریق رفتن این خط کد به خط. اول، شما می بینید برجسته - هنگامی که شما در حال کار با فایل، بدون در نظر گرفتن نوع فایل در آن است، شما نیاز به آن را باز کنید. و این است که با یک تماس به fopen - حق در اینجا. شما شامل نام فایل. اگر این فایل را در دایرکتوری شما نیست، و یا پوشه ای که این برنامه زندگی، پس شما نیز باید شامل یک مسیر به جایی که فایل است. ما قصد داریم فرض کنیم که این فایل با نام "text.txt" - یک سند متنی ساده - است در همان پوشه به عنوان این برنامه است. به طوری که دیگر چیزی برای نگه داشتن در ذهن - که اگر شما می خواهید برای باز کردن فایل در جایی دیگر، شما در واقع نیاز شامل محل آن است. دوم، شما می توانید یک آرگومان به تصویب fopen، و این چیزی است که می خواهید انجام دهید با فایل. سه استدلال اصلی که وجود دارد شما در حال رفتن برای تصویب به fopen. چه کسی می تواند به من آن سه را؟ چه کسی می تواند به من یکی از آنها را؟ بله. STUDENT 4: نام فایل؟ JASON HIRSCHHORN: متاسفم. سه استدلال اصلی شما می توانید عبور به عنوان آرگومان دوم به fopen. حق با شماست - نام فایل آرگومان اول است. اما دلیل دوم به fopen است به طور کلی سه رشته، و - بله. Aleja. ALEJA: A برای اضافه نماییم. JASON HIRSCHHORN: A، اگر شما می خواهید اضافه به یک فایل که در حال حاضر وجود دارد. STUDENT 5: R برای خواندن. JASON HIRSCHHORN: R، اگر شما می خواهید از یک فایل خوانده شوند. STUDENT 6: W برای نوشتن. JASON HIRSCHHORN: و W، اگر شما می خواهم برای نوشتن به یک فایل. بنابراین در این مورد، ما در حال نوشتن به فایل، بنابراین ما باید عرض. شما آن را باز کنید، شما نیز باید برای نجات فایل در جایی، و این با کد را به سمت چپ عملگر انتساب - من ایجاد یک اشاره گر به یک فایل نامیده می شود، در این مورد، فایل. ما می خواهیم نیست که نگران باشید که چه این همه کلاه چیزی FILE است. کافی است گفته شود، آن است که طولانی جریان از صفر و آنهایی که. و این که چگونه ما می رویم به عمل به آن و درک آن. چیزی که بعد از ما باید انجام دهیم - و این فوق العاده مهم - هر زمان که شما باز کردن یک فایل - در واقع، هر زمان که شما malloc تماس بگیرید، برای به عنوان مثال، و برخی از حافظه و سعی کنید و ذخیره آن در یک اشاره گر، شما همیشه می خواهم به بررسی کنید تا مطمئن شوید که که تابع نمی گرداند تهی. بنابراین در این مورد، ما در حال بررسی را به مطمئن باشید که ما در واقع باز فایل به درستی، و در آنجا بود هیچ خطا در برنامه ما. بعد، زمانی که ما بررسی کرده تا مطمئن شوید که ما یک فایل کار می کند، ما می توانیم ارسال به، و یا خواندن از، و یا الحاق به فایل. در این مورد، من به سادگی چاپ یک خط به این فایل. چگونه من می دانم که؟ خوب، من با استفاده از این تابع نام fprintf. همه توابع شما با استفاده از در هنگام نوشتن به، و یا خواندن از و یا دستکاری فایل های مشابه خواهد بود توابع را ندیده اید، اما شروع با حرف F، ایستاده برای فایل. و fprintf، بر خلاف چاپ معمولی ما برنامه، طول می کشد یک آرگومان های اضافی، و این که فایل است که در آن شما چاپ شود این خط به. من هیچ چیز نیست که حق ohai. من سوم ندارد آرگومان چون printf - و یا آرگومان دوم به چون printf، استدلال سوم به fprintf، چون من هیچ متغیرهایی را ندارید. من از جمله هر متغیر نیست. اما باز هم، fprintf و تمام این فایل توابع است که با فایل کار به طور کلی نیاز به رفتن به فایل که بر روی آنها در حال فعالیت. در نهایت، آخرین چیزی که مهم است به انجام دهید این است برای بستن فایل، درست مثل با - هر زمان که ما چیزی malloc، ما می خواهیم برای آزادی چیزی، تا مبادا ما یک نشت حافظه - ما می خواهیم بستن پرونده ما. اگر این برنامه را بدون بستن خارج فایل، شانس هستند چیزی را به اشتباه، به خصوص اگر آن را یک فایل کوچک بود. اما آن را قطعا به سبک برنامه نویسی خوب و تمرین برای همیشه فایل خود را ببندید زمانی که شما با استفاده از آن به پایان رسید. به طوری که اصول اولیه فایل I / O. است شما احتمالا دیده می شود که قبل از، و یا آن را در آن کوتاه فوق العاده تماشا. آیا هر کسی هر گونه سوال، قبل از ما به برخی از برنامه نویسی عمل به مشکلات، در مورد فایل I / O یا مراحل من فقط بر رفت؟ [تایپ SOUNDS] JASON HIRSCHHORN: آیا شما یک سوال، AVI؟ AVI: شماره JASON HIRSCHHORN: OK. من قصد دارم به دیگر صبر کنید هفت ثانیه صورت گرفت. [می خندد] این نکته واقعا خوب است. شما بچه ها فقط دوست ندارم پرسیدن سوال. این خوب است. OK. بنابراین اولین مشکل عمل ما است، ما رفتن به تکراری عملکرد یک ابزار خط فرمان است که شما احتمالا استفاده قبل از - کپی - ابزار کپی کنید. اگر شما CP را تایپ کنید و سپس تصویب آن دو استدلال به ترمینال خود را، شما می توانید کپی کردن یک فایل. و این چیزی است که ما می رویم برای نوشتن در حال حاضر. پس باز هم مطالعه کردن از این اسلاید، من می خواهم شما به یک برنامه بنویسید که طول می کشد دو و فقط دو خط فرمان استدلال - یک فایل منبع و فایل مقصد - و کپی از محتویات منبع فایل به فایل قسمت یک بایت در یک زمان. به طوری که زیاده از حد است. باز هم، یک روش خوب این است که به رفتن نیست مستقیما به کد C، اما شکستن آن را به یک زن و شوهر از مراحل. اول، فکر می کنم در مورد منطق - دقیقا آنچه که از شما می خواهم به انجام - و درک همه از گام برای رسیدن به این مشکل است. نه در C، فقط در برخی شبه، و یا حتی یک مدل ذهنی از چه خبر است. بعد، وقتی شبه پایین، درک چگونگی شبه نقشه ها بر روی ابزار و چیزهایی که ما کرده ایم طرز استفاده از در C. و در نهایت، هنگامی که شما تمام است که با هم، شما می توانید مشکل کد. نگاهی به 5 تا 10 دقیقه به کار بر روی این مشکل است. من دستورالعمل را قرار داده را به بالا و در یک ثانیه. و پس از آن ما قصد داریم تا بیش از شبه، و کد آن را به عنوان یک گروه زندگی می کنند. اگر شما هر گونه سوال در حالی که شما کار بر روی این، تمایل به افزایش دست خود را، و من خواهد آمد در اطراف و آنها را پاسخ دهد. STUDENT 7: آیا من می توانم کش رفتن یک تکه کاغذ؟ JASON HIRSCHHORN: چه خبر؟ [تایپ SOUNDS] JASON HIRSCHHORN: OK. اجازه دهید در طول شبه اول، و سپس من شما را زن و شوهر بیشتر را دقیقه به پایان برنامه نویسی. چه کسی می خواهم به من شروع کردن با خط اول شبه برای این تابع؟ STUDENT 8: چک کنید تا مطمئن شوید که شما دو فایل داده شد. JASON HIRSCHHORN: OK. و اگر ما نیست؟ STUDENT 8: من می خواهم 0 بازگشت. JASON HIRSCHHORN: باید به بازگشت ما 0؟ STUDENT 8: بازگشت - نبلرس. متأسفم. JASON HIRSCHHORN: آره. احتمالا نه 0. از آنجا که 0 به معنی همه چیز خوب بود. OK. به طوری که اولین خط است از شبه. چه کسی خط دوم از شبه؟ STUDENT 9: هر دو فایل باز؟ JASON HIRSCHHORN: باز کردن هر دو فایل. OK؟ STUDENT 10: بررسی کنید ببینید در صورتی که فایل NULL است؟ JASON HIRSCHHORN: چک کنید تا مطمئن مطمئن باشید نه NULL می باشد. همانطور که به کنار - بریده بریده 0 - NULL است؟ STUDENT 11: شماره JASON HIRSCHHORN: به NULL نیست. است که نابودگر NULL نامیده می شود. این در واقع تنها با یک ل نوشته. بنابراین چک کردن چیزی در برابر آن - که در واقع یک شخصیت - بنابراین چک کردن چیزی در برابر آن است نه همان چک کنید تا از در برابر با NULL. و برخی از مردم - در آزمونها و مشکل خود را مجموعه - کردم دو تا از آن اشتباه گرفته شود. اما دو نفر از کسانی که می در واقع متفاوت است. یکی به پایان می رسد یک رشته - یک اشاره گر به 0 است. STUDENT 12: چرا نمی خواهد شما برای بررسی مطمئن شوید که فایل ها NULL نمی قبل از شما آنها را باز کنید؟ موجب صرفه جویی در پس باز: JASON HIRSCHHORN چیزی که در فایل. و اگر شما بروید به اینجا - بنابراین این خط - fopen - به شما یک آدرس و ذخیره را آن آدرس را در فایل اگر آن کار می کند. اگر آن کار نمی کند، آن را به خواهد NULL ذخیره - STUDENT 12: اوه. OK. به شما کردم. JASON HIRSCHHORN: در فایل. بنابراین شما می توانید برای NULL بررسی قبل از شما آنها را باز کرده اید. NULL به معنی چیزی نبود به درستی کار می کنند. OK. بنابراین بررسی کنید تا مطمئن شوید نه است؟ و یا هستند؟ چه فکر می کنم ما؟ ما به سراغ آن میرویم. STUDENT 13: آیا. JASON HIRSCHHORN: آیا؟ نه است؟ STUDENT 13: آیا. JASON HIRSCHHORN: OK. ما به نظر می رسد به برخی از اتفاق نظر بر روی آن. نه NULL است. OK، خط بعدی از شبه. چه کسی به من داده نشده است یک خط رتبهدهی نشده است؟ ما برای شما صبر کنید. آره. STUDENT 14: شما باید به عنوان خوانده شده از فایل اول؟ JASON HIRSCHHORN: OK. STUDENT 14: یا ما با استفاده از fscanf و یا چیزی شبیه به آن فایل برای اولین بار؟ JASON HIRSCHHORN: بنابراین ما به خواهید خواندن از فایل اول و - اجازه دهید که این حق در اینجا. دفعات بازدید از فایل منبع. و پس از آن، ما چه چیزی داریم پس ما انجام می دهیم از فایل منبع به عنوان خوانده شده؟ شخص دیگری؟ STUDENT 15: نوشتن به فایل قسمت را؟ JASON HIRSCHHORN: ما به نوشتن فایل مقصد، و - OK. چه چیز دیگری گم می کنیم؟ کسی دیگری که به من داده نشده است خط از کد رتبهدهی نشده است - از شبه. آره. STUDENT 16: شاید شما همیشه می توانید چک کنید آیا چیزی برای خواندن وجود دارد، مثل خط بعدی؟ که شبیه به خط بعدی می باشد، ببینید که اگر آن وجود دارد. [ELECTRONIC BEEP] JASON HIRSCHHORN: اوه. این نرم افزار یادداشتهای روزانه من است. آره؟ STUDENT 16: آره. JASON HIRSCHHORN: پس بدهد آن را به من یک بار. STUDENT 16: بررسی کنید که آیا وجود دارد هنوز هم یک خط بعدی از فایل منبع به عنوان خوانده شده. JASON HIRSCHHORN: OK. بنابراین ما خطوط خواندن نیست - بایت را مطالعه اینجا - اما شما درست است. ما می خواهیم به خواندن و نوشتن تا می بایت بیشتر وجود دارد. OK. و به این ترتیب این واقعا باید فاصله دار است کمی، چرا که آنها در زیر وجود دارد. درست است؟ تا زمانی که ما از کلمه در ادامه متن هستید، ما قصد داریم به خواندن از فایل منبع و ارسال به فایل مقصد. و پس از آن، آنچه که گذشته خط شبه؟ کسی که داده نشده است به من چیزی نشده است. STUDENT 17: بستن فایل؟ JASON HIRSCHHORN: دقیقا. بستن فایل های. بنابراین شبه ما وجود دارد. من قصد دارم برای قرار دادن شبه به نرمافزاری gedit، و در چند دقیقه ما این با هم کد. OK. اجازه دهید ما را به عنوان یک گروه آغاز شده است. Nishant، من فایل جدید من. من فقط این رو باز کردم. سند بدون عنوان 1. اولین چیزی که من باید انجام دهید چیست؟ NISHANT: شامل کتابخانه ها دارد؟ JASON HIRSCHHORN: OK. چه کتابخانه ها دارد؟ NISHANT: Stdio.h، stdlib.h، به اعتقاد من؟ JASON HIRSCHHORN: OK. stdlib برای چیست؟ NISHANT: من را فراموش کرده. JASON HIRSCHHORN: OK. بنابراین شامل stdio. من حتی قبل از اینکه باید چه کار شروع من برنامه نویسی؟ NISHANT: نوشتن یک ضربه سر؟ JASON HIRSCHHORN: چگونه آن رنگ را دریافت کنم؟ [INTERPOSING صداهای] NISHANT: چگونه می توانم آن را به شما رنگ؟ JASON HIRSCHHORN: چگونه آیا رنگ من برنامه نویسی؟ NISHANT: من نمی دانم. آه. ذخیره کنید. JASON HIRSCHHORN: ذخیره. بله. من باید آن را به عنوان یک ج را نجات دهد. پس از آن بر روی دسکتاپ به عنوان cp.c. نجات شیرین. و اگر من می خواهم به سبک کامل امتیاز، باید چه کار کنم شامل در بالای؟ NISHANT: شما می توانید نام خود، نام ارسال از برنامه و هدف از برنامه و همچنین؟ JASON HIRSCHHORN: به نظر می رسد خوب است. عالی. بنابراین شما ما را به کمال را شروع کرده است. # شامل - ما نیز به شما ارسال - OK. بنابراین من فکر می کنم من همه را به رفتن. چه کسی اولین خط از کد را برای من - و یا در اولین خط کد است که آن را به برآورده اول ما اظهار نظر در شبه؟ شما. STUDENT 18: باید آن را از نوع int است تعداد آنها، و سپس کاراکتر * argv؟ JASON HIRSCHHORN: من فکر می کنم حق با شماست. اجازه دهید آن را تغییر دهید به اعضای هیات تحریریه اصلی، پرانتز باز، argc هوشمند، کاما، کاراکتر * argv؟ که می خواهم؟ STUDENT 18: براکت. JASON HIRSCHHORN: براکت. براکت باز، براکت نزدیک، پدر و مادر نزدیک است. کامل. در حال حاضر من می تواند استدلال خط فرمان است. OK. اطمینان از ما با توجه به در حال دو فایل. شما می توانید به من که نیز هست. STUDENT 18: اگر تعداد آنها - این یک برابر نیست 3. JASON HIRSCHHORN: اگر پرانتز باز تعداد آنها برابر نیست 3؟ STUDENT 18: آره، تو بازگشت 1 و یا هر چیزی. JASON HIRSCHHORN: متاسفم. STUDENT 18: بازگشت 1 و یا هر چیزی. JASON HIRSCHHORN: بازگشت 1. OK؟ بزرگ. هر دو فایل را باز کنید. چه کسی می تواند به من کمک کند هر دو فایل را باز کنید؟ چه کسی به من کد داده نشده است؟ کورت؟ کورت: پس همه کلاه منبع ستاره F-I-L-E. JASON HIRSCHHORN: من قصد دارم را از حروف صدادار است. کسانی که سرد هستند. آن را مانند وبلاگ Tumblr است. STUDENT 18: برابر fopen - JASON HIRSCHHORN: برابر fopen؟ STUDENT 18: پرانتز باز، argv را، براکت باز. JASON HIRSCHHORN: صبر کنید. متأسفم. پرانتز باز. OK. STUDENT 18: آره. و argv زیر 1. JASON HIRSCHHORN: زیر 1؟ STUDENT 18: آره. و argv براکت باز 1 - بله. و پس از آن با کاما از هم، و سپس باز دو نقل قول، R، دو نقل قول، پرانتز بسته، نقطه و ویرگول بدین. JASON HIRSCHHORN: شیرین. و آنچه در مورد یکی دیگر؟ STUDENT 18: خیلی مشابه است، اما به جای از S-R-C، شما می خواهم آن را به D-S-T تماس بگیرید. JASON HIRSCHHORN: دیگه! من دوست دارم که. STUDENT 18: فقط D-S-T. آره. و پس از آن و argv، براکت باز، 2. آره. و پس از آن عرض به جای R. آره. JASON HIRSCHHORN: بزرگ. زن و شوهر بعد از خط. همچنین، اگر کسی چیزهایی برای اضافه کردن به خطوط است که ما انجام داده ایم، در صورت تمایل به اضافه کردن آن نیز هست. بررسی کنید تا مطمئن شوید نه NULL است. چه کسی می تواند به من کد من نیاز به دادن راضی است که خط از شبه؟ آرچر. ARCHER: اگر SRC برابر برابر NULL یا DST برابر برابر NULL، و سپس شما بازگشت - JASON HIRSCHHORN: چه؟ ARCHER: بازگشت 2؟ JASON HIRSCHHORN: بازگشت 2. بنابراین اگر SRC پرانتز باز برابر است با برابر با NULL، و یا - هر آنچه که thing's - لوله؟ لوله؟ ما آن را لوله تماس بگیرید. لوله، لوله، DST برابر برابر NULL، بازگشت 2. OK؟ تا زمانی که ما از بایت هستید - ما مرتب کردن بر اساس بیش از این مرحله از قلم بخش شبه به رفتن به اینجا. اما تا زمانی که ما از بایت هستید - چه چیزی است که صدا مانند؟ چه نوع ساختار C - اما من ساختار کلمه استفاده نمی کند، از آنجا که ما در حال رفتن به شروع به استفاده از که در سایر موارد - اما ابزار C است که صدا مانند؟ STUDENT 19: A حلقه. JASON HIRSCHHORN: A حلقه. به نظر می رسد حلقه. پس چه کسی می تواند به من خط اول را کد حلقه در اینجا؟ شما همچنین می توانید انتخاب کنید که چه نوع از حلقه شما می خواهید، اگر شما به من بدهد این خط از کد. سه نوع وجود دارد. شما دریافت می کنید انتخاب کنید. من یکی از آن نشان می دهد. AVI. کدام یک را می خواهید؟ AVI: FOR. JASON HIRSCHHORN: FOR. AVI: اعضای هیات من برابر صفر است. JASON HIRSCHHORN: OK. AVI: این بخش من مطمئن هستم که در مورد نیستم. اما من کمتر از اندازه است منبع ستاره؟ خیلی مطمئن نیستم. JASON HIRSCHHORN: OK. AVI: از آنجا که شما می خواهید اندازه از فایل، درست است؟ JASON HIRSCHHORN: پس این احتمالا نمی خواهد اندازه واقعی به ما فایل به بایت. پس چرا کار می کنیم؟ نوع دیگری از حلقه چیست؟ یا اینکه ما باید با حلقه FOR چوب؟ STUDENT 20: آیا می توانید یک حلقه WHILE؟ و پس از آن، آنچه را که می خواهم انجام you'd است - چرا که * کاراکتر برای فایل. بنابراین اگر ما فقط حفظ افزایش است که تا زمانی که ما می خواهم شخصیت NULL در پیدا کردن در پایان آن؟ یا نه، این است که چگونه فایل کار می کند؟ JASON HIRSCHHORN: بنابراین ما می توانیم نگه دارید افزایش کاراکتر * تا زمانی که ما پیدا NULL - STUDENT 20: اساسا ادامه دهم شخصیت های شخصیت تا زمانی که ما آمار در پایان فایل. JASON HIRSCHHORN: بله. بنابراین این چیزی است که ما می خواهیم انجام دهیم. ما می خواهیم برای حفظ خواندن، شخصیت با شخصیت، تا زمانی که ما برای به دست آوردن در پایان فایل. STUDENT 20: آره. یافتن - چه پایان و یا علامت توقف است در پایان یک فایل متنی. JASON HIRSCHHORN: OK. بنابراین، هنگامی که ما به انتهای فایل دریافت کنید - چگونه ما می دانیم که ما رسیده ایم پایان یک فایل؟ اگر من خواستار - پس بیایید قدم به عقب. یک تابع چیست؟ اجازه دهید به این خط راست صفحه بروید. دفعات بازدید از فایل منبع. چه کسی می تواند به من که خط از کد را؟ STUDENT 21: Fscanf؟ JASON HIRSCHHORN: Fscanf. OK. چه می شود اگر من می خواهم به عنوان خوانده شده، بسیار به طور خاص، یک بایت؟ STUDENT 21: من نمی دانم. JASON HIRSCHHORN: OK. حتی ساده تر از fscanf - چه شده است - من می خواهم از یک فایل منبع به عنوان خوانده شده؟ خوانده شده از یک فایل منبع. یک تابع چیست - آره. STUDENT 22: این از fread است؟ JASON HIRSCHHORN: از fread. من فکر می کنم اجازه دهید با چوب که در حال حاضر. چه نوع از استدلال می کند از fread می برد؟ STUDENT 22: احتمالا نوع فایل، و پس از آن محل در فایل؟ JASON HIRSCHHORN: چه می توانید در اینجا نوع I به شکل از چه نوع استدلال از fread طول می کشد؟ دانش آموزان متعدد: انسان از fread. JASON HIRSCHHORN: مرد از fread و fwrite. به نظر می رسد مانند آنها آویزان از با هم. پس از fread که چگونه بسیاری از استدلال ها طول می کشد؟ STUDENT 23: چهار. JASON HIRSCHHORN: طول می کشد چهار استدلال. طول می کشد تا یک اشاره گر، اندازه، و چیزی است که عجیب و غریب، و برخی از فایل. OK؟ بیایید در مورد آن خوانده شده در اینجا ببینید. "تابع از fread بار خوانده شده N memb عناصر داده، بایت هر اندازه طولانی، از جریان با اشاره به توسط جریان، ذخیره سازی آنها را در محل داده های اشاره گر. " بنابراین چهار استدلال. چرا من فقط کپی این، و آن را در اینجا وارد کنید. OK. پس چه کسی می تواند شروع به پر کردن این استدلال برای من؟ AVI. AVI: نگاهی از درجه اعتبار ساقط. با قرار دادن فقط SRC. نگاهی از اشاره گر و ستاره. SRC قرار دهید. پس از آن - JASON HIRSCHHORN: من می خواهم برای متوقف کردن شما وجود دارد، چرا که اشتباه است. شما راست با SRC است، اما SRC که در آن باید برود؟ [INTERPOSING صداهای] JASON HIRSCHHORN: باید بیش از اینجا. این SRC است - SRC ما یک نوع است. اجازه دهید در اینجا. این است که برای یک نوع FILE * درخواست ما در واقع معمولا آنها را مانند که ببینید. پس این است که برای یک آرگومان از درخواست نوع فایل * به نام جریان است که SRC. OK؟ چه اندازه از کارها را انجام ما می خواهیم به عنوان خوانده شده؟ من این در به توضیحات مشکل است. STUDENT 24: یک بایت در یک زمان. JASON HIRSCHHORN: یک بایت. یک بایت چقدر است؟ اندازه آن در بایت است، چه خوب، می تواند من را به سمت راست وجود دارد؟ STUDENT 25: یک. JASON HIRSCHHORN: یک. راست. اندازه آن در واحد بایت است، بنابراین 1 1 بایت است. چگونه بسیاری از من می خواهم به خواندن در یک زمان. STUDENT 26: یکی؟ JASON HIRSCHHORN: یک چیز. من می خواهم به عنوان خوانده شده یک چیز از اندازه 1، یک گاز در یک زمان. و در جایی که انجام این کار را من، یک بار من آن را بخوانید؟ STUDENT 27: مقصد؟ JASON HIRSCHHORN: بنابراین من نمی توانم قرار داده آن را مستقیما به مقصد. STUDENT 28: شما تو قرار داده است آن را به یک اشاره گر سوم؟ STUDENT 27: به مقصد. JASON HIRSCHHORN: OK. آره. STUDENT 29: شما می توانید چیزی به اعلام به عنوان یک ذخیره سازی موقت قبل از آن عمل می کنند. JASON HIRSCHHORN: OK. به من بده که. STUDENT 29: فایل دیگر اشاره گر، شاید؟ JASON HIRSCHHORN: OK. بنابراین این ستاره از درجه اعتبار ساقط است - آن یک ستاره از نوع درجه اعتبار ساقط است، بنابراین آن را نمی کند باید یک اشاره گر فایل. و اگر من خواندن یک بایت، که در آن می تواند یک جای خوب برای ذخیره یک بایت؟ STUDENT 29: یک آرایه؟ JASON HIRSCHHORN: یک آرایه. OK. و چه چیز دیگری چیزی است که است فقط به اندازه یک بایت؟ STUDENT 30: A * کاراکتر؟ STUDENT 29: آره. JASON HIRSCHHORN: A کاراکتر * است یک بایت نیست. STUDENT 29: A کاراکتر. JASON HIRSCHHORN: A کاراکتر یک بایت است. درست است؟ بنابراین اجازه دهید این بافر تماس بگیرید عمومی نام مورد استفاده برای این چیزها را به ذخیره چیزی به طور موقت. بنابراین من ایجاد یک بافر شده است. درست است؟ اما آن را از درجه اعتبار ساقط *. شاید حق با شما باشد، که آن را باید یک بافر و اندازه 0 باشد. بنابراین این فروشگاه یک - سمت راست. از آنجا که این حق در اینجا - کاراکتر بافر یک شخصیت است، اما این طول می کشد خالی * - یک اشاره گر. بنابراین من می تواند این کار را انجام و در حال حاضر بافر یک اشاره گر است. چه چیز دیگری می توانم انجام دهم؟ STUDENT 31: قرار دادن یک ستاره بعدی به char. JASON HIRSCHHORN: من می توانم ایجاد شده آن را به کاراکتر *. OK. چیز دیگری که می تواند انجام دهد چیست؟ یا اجازه دهید با این یکی بروید. * کاراکتر بافر، چه خوب، من در قرار داده که اینجا هستید؟ STUDENT 31: بافر. JASON HIRSCHHORN: بافر. بافر یک اشاره گر به کاراکتر است. و در آن مکان، ما در حال دادن یک بایت از چیزی است که ما را خوانده ام. آره. AVI. AVI: فقط یک سوال. آیا می خواهید به malloc بافر؟ JASON HIRSCHHORN: چه کسی می تواند پاسخ به این سوال؟ STUDENT 32: خب، این کار واقعا نقطه به نقطه هر چیزی در حال حاضر، پس - JASON HIRSCHHORN: اما انجام ما می خواهیم به آن malloc؟ STUDENT 32: اگر شما این کار را انجام داد که راه، من حدس می زنم، بله، چون شما می خواهم نیاز برخی از مکان آن را به نقطه را به. JASON HIRSCHHORN: آیا ما باید آن را malloc؟ STUDENT 33: اگر شما به استفاده از آن در خارج از حلقه. JASON HIRSCHHORN: آیا ما به رفتن استفاده از آن در خارج از حلقه؟ STUDENT 34: بله. STUDENT 35: صبر کن. آیا ما می خواهیم آن را اعلام در حلقه به فراتر از آن؟ JASON HIRSCHHORN: بنابراین من حدس می زنم ما برخی از شبه حلقه WHILE در اینجا که ما هستیم تلاش برای کشف کردن، که ما به بدست نشده است. ما لازم نیست به آن malloc. ما در اصلی در حال انجام است، آن را تنها رفتن است که در داخل این حلقه استفاده می شود. این کار نیاز به وجود خارج از این. بنابراین می توان آن را یک متغیر محلی است. شما باید یک اشاره گر به یک متغیر محلی است. STUDENT 36: اما این درست نیست با اشاره به هر چیزی. JASON HIRSCHHORN: نه، این طور نیست مقدار دهی اولیه به هر چیزی. اما ما قصد داریم به استفاده از آن را نیز. ما قصد داریم برای قرار دادن چیزی در این اولین بار است که ما از آن استفاده کنید. به طوری که OK به نظر می رسد. بنابراین ما malloc در اینجا لازم نیست. و من فکر می کنم آن را OK به عنوان است. OK. ما خط از fread. اجازه دهید در خط بعدی. اگر ما می خواهیم برای نوشتن به یک فایل، چه است یک تابع خوب برای استفاده به انجام این کار؟ STUDENT 37: Fwrite؟ STUDENT 38: Fprintf؟ JASON HIRSCHHORN: Fprintf است. یکی دیگر چیست؟ STUDENT 39: Fwrite. JASON HIRSCHHORN: Fwrite. و برای اهداف ما، fwrite، که ما آن را در اینجا دیدم، است احتمالا انتخاب بهتر است. این متد چهار پارامتر دارد نیز هست. Nishant، می تواند به شما بدهد من استدلال؟ NISHANT: رفتن یکی از اولین را به بافر فقط. JASON HIRSCHHORN: OK. NISHANT: دومین فرد فقط برای رفتن به 1. یک سوم خواهد بود 1. و یک چهارم است برای رفتن به DST. JASON HIRSCHHORN: آیا کسی داشته هر گونه سوال در مورد این خط؟ که به نظر می رسد خوب است. OK. بنابراین در حال حاضر آن را مانند یک چیز ما به نظر می رسد از دست رفته - در واقع، اجازه دهید ارسال این خط گذشته است. بستن فایل های. چه کسی می تواند ما را تا پایان نوشتن این دو خط آخر؟ بله. با عرض پوزش، چیزی است که نام خود را؟ لوسی: لوسی. JASON HIRSCHHORN: لوسی. لوسی: SRC Fclose و پس از آن قسمت fclose. JASON HIRSCHHORN: Fclose، پرانتز باز، SRC، پرانتز بسته، نقطه و ویرگول بدین. و fclose - آره؟ لوسی: پرانتز باز، DST و پس از آن نقطه و ویرگول. JASON HIRSCHHORN: بزرگ. و آنچه که باید در پایان شامل I؟ لوسی: بازگشت 0. JASON HIRSCHHORN: بازگشت 0. آیا من به؟ فقط یک سوال. آیا ما باید شامل بازگشت 0؟ دانش آموزان متعدد: شماره JASON HIRSCHHORN: شماره بخش اصلی آن را به طور خودکار اگر شما به پایان گرفتن. اما من فکر می کنم آن را به خوبی شامل آن صراحت. به ویژه هنگامی که ما در حال بازگشت دیگر چیزهایی که در طول برنامه. OK. این چیزی است که ما در حال از دست رفته - در حالی که چه؟ چه کسی می تواند از برخی فکر می کنم - تا به برخی از چیزی که همه چیز می تواند در آن وجود دارد بروید؟ حتی اگر آن را فقط در برخی از شبه مانند زبان؟ چه هستند که ما واقعا - چه می خواهیم تا برای رفتن؟ آره، لوسی. لوسی: در انتهای فایل. JASON HIRSCHHORN: در انتهای فایل. بنابراین چه چیزی شما را با انتهای فایل چیست؟ لوسی: هنگامی که شما در رسیدن به پایان فایل، متوقف شود. JASON HIRSCHHORN: OK. بنابراین زمانی که ما رسیدن به انتهای فایل. چگونه ما می دانیم زمانی که ما رسیده ایم در پایان فایل؟ STUDENT 40: من فکر می کنم بافر خواهد شد به NULL تنظیم شده است. STUDENT 41: بافر اعلام شده است در داخل حلقه. JASON HIRSCHHORN: پس شما فکر می کنم بافر به NULL تنظیم شده است. چرا بافر تنظیم شود به NULL؟ STUDENT 40: از آنجا که در زمانی که شما از fread، شما در حال تلاش برای قرار دادن هیچ چیز به بافر شده است. JASON HIRSCHHORN: OK. بنابراین شما فکر از fread - زمانی که ما به پایان رسیده ام فایل، چیزی است که از fread کاری انجام دهید؟ من فکر می کنم که سوال ما باید به شکل از. چه از fread انجام دهید؟ آیا این NULL در بافر قرار داده، و یا کاری می کند چیز دیگری است؟ چگونه می توانیم چهره ای از آنچه در آن می کند؟ STUDENT 42: مرد. JASON HIRSCHHORN: مرد. پس بیایید اینجا. بازگشت ارزش. در موفقیت، از fread و fwrite بازگشت تعداد آیتم های خوانده شده و یا نوشته شده است. این تعداد برابر با تعداد بایت انتقال تنها زمانی که اندازه 1 است. اگر خطا رخ می دهد، و یا پایان فایل رسیده است، مقدار برگردانده شده است تعداد آیتم کوتاه و یا 0. بنابراین برای اهداف ما، اگر رسد از fread در پایان فایل، و بار خوانده شده از در انتهای فایل، هیچ چیز سمت چپ وجود دارد به خواندن، چه چیزی را به بازگشت؟ STUDENT 43: صفر؟ JASON HIRSCHHORN: چه؟ STUDENT 43: صفر؟ JASON HIRSCHHORN: صفر. آن را به بازگشت به صفر. بنابراین ما می دانیم که از fread، زمانی که ما کرده ایم به انتهای فایل است، رفتن به صفر بازگشت. چگونه می توان استفاده می کنیم که به نفع ما؟ AVI: شما می توانید یک متغیر در خارج از اعلام از حلقه به نام چک. اگر چک برابر - در حال حاضر - یک. JASON HIRSCHHORN: OK. AVI: و پس از آن شما می توانید یک IF قرار داده بیانیه درست بعد از fread و گفت اگر از fread برابر با صفر - هیچ. JASON HIRSCHHORN: چه کسی می توانید AVI را کمک کند؟ AVI: ارزش چیست توسط از fread می گردد؟ JASON HIRSCHHORN: ما فقط بیش از آن رفت. AVI: چگونه می توانم آن را به شما نشان می دهد؟ JASON HIRSCHHORN: بنابراین آن را می گرداند - اجازه دهید نگاه کردن در اینجا - آن را می گرداند size_t، که اساسا یک عدد صحیح. بنابراین آن را می گرداند یک عدد صحیح. و در مورد ما، آن را بازگشت 1 یا 0 - 1 اگر آن را به عنوان خوانده شده یک چیز - یک بایت، و 0 اگر ما به پایان رسیده ایم. بنابراین اگر از fread - آره؟ STUDENT 45: آیا می توانم شما فقط با قرار دادن کامل fread (بافر، 1، 1، SRC) به در حالی که حلقه؟ JASON HIRSCHHORN: پس شما پیشنهاد انجام این کار وجود دارد؟ [INTERPOSING صداهای] JASON HIRSCHHORN: صبر. بنابراین ما در حال رهایی از آن. بنابراین شما پیشنهاد دادن به از fread وجود دارد؟ چه باید همچنین حرکت اگر شما می خواهید به انجام این کار؟ STUDENT 45: بافر خارج. JASON HIRSCHHORN: ما باید همچنین این حرکت را اینجا ببینید. STUDENT 45: اما این کار را به طور مداوم حرکت آن را به جلو؟ [INTERPOSING صداهای] JASON HIRSCHHORN: OK. بنابراین این چیزی است که Okshar ارائه شده است. ما ایجاد بافر است. ما از fread WHILE، پس ما fwrite. افکار در این؟ STUDENT 46: فقط سوال من این است، که آن را در واقع از fread فرمان اجرا؟ JASON HIRSCHHORN: سؤال بسیار خوبی است. وقتی که شما با قرار دادن یک فراخوانی تابع در داخل از یک بیماری، می کند که فراخوانی تابع اجرا؟ ما نمونه هایی از این دیده ام قبل از. درست است؟ STUDENT 46: OK. آره. پس از آن اجرا کند. JASON HIRSCHHORN: ما همه چیز را دیده ام مانند که قبل، که در آن ما فراخوانی تابع در داخل یک وضعیت. آیا این فراخوانی تابع اجرا؟ بله. بنابراین پاسخ مثبت است. این فراخوانی تابع اجرا خواهد شد. اما باز هم، آن چیزی است که ما می خواهیم؟ یکی از راه های ما می تواند شکل چیست اگر آن چیزی است که ما می خواهیم؟ دانش آموزان چندگانه: راه اندازی کنید؟ JASON HIRSCHHORN: ما می توانیم آن را اجرا کنید. اما قبل از انجام این کار، ما می تواند همچنین از طریق این دلیل. اگر - می گویند ما یک بایت در ما فایل، ما را به اینجا، ما این کد را دریافت کنید. این اجرا خواهد شد. از fread خواهد یک بایت بازگشت و ذخیره آن را در بافر شده است. و این تا 1، ارزیابی، درست است، پس از او باز می گردد 1. بنابراین در حالی که 1. آیا معنی این کد در داخل حلقه WHILE اجرا خواهد شد؟ STUDENT 47: آره. این درست است. JASON HIRSCHHORN: بله. 1 درست است. این 0 نیست. بنابراین کد داخل در اینجا اجرا خواهد شد. بنابراین ما ارسال شده است. ما به این حرکت خط یک بار دیگر. در حال حاضر ما - ما در پایان از فایل های ما است. ما را از انتهای فایل ما به عنوان خوانده شده، از آنجا که ما تنها یک بایت در آن بود. از fread می گرداند 0، فروشگاه ها چیزی در بافر شده است. من صادقانه نمی دانم چه آن را در RAM ذخیره می کند. ما احتمالا می تواند نگاه کردن برای دیدن آنچه آن را ندارد. که من صادقانه نمی دانم. ما نمی دانیم، که مراقبت چه آن را در بافر ذخیره؟ اما آن را نشانی از بازگشت 0. و در حالی که خواهد 0 اجرا؟ WHILE 0 نمی اجرا خواهد شد. پس ما در اینجا به شما حرکت کردن. بنابراین اجازه دهید یک نمایش از دست اگر این کد ما باید اجرا شود، و یا اگر ما است اول باید تغییرات را انجام دهد. بنابراین اگر شما فکر می کنم - شما را مجبور به رای دادن. اگر شما فکر می کنم ما باید این کد را اجرا کنید به عنوان است، لطفا دست خود را بالا می برد. OK. وجود دارد یک - آیا شما یک سوال، نگرانی؟ آره. STUDENT 48: بعد از ما حرکت بافر خارج از حلقه، ما باید آن را malloc؟ JASON HIRSCHHORN: سؤال بسیار خوبی است. پس از ما حرکت بافر در خارج از حلقه، آیا ما باید آن را malloc؟ این سوال دامنه است. اگر ما مقدار دهی اولیه بافر خارج از این حلقه، آن را به وجود داخل حلقه؟ دانش آموزان متعدد: بله. JASON HIRSCHHORN: بله. دامنه آن را پوشش می دهد در داخل حلقه، و، در واقع، هر چیزی در زیر آن را در داخل از این کد، از جمله همه چیز در داخل در اینجا. بنابراین ما نیازی به آن malloc. این یک متغیر محلی دامنه آن است، و هنوز هم شامل حلقه. STUDENT 49: آیا لازم است که رایگان است؟ JASON HIRSCHHORN: آیا ما نیاز به بافر آزاد؟ STUDENT 49: آره، اگر ما malloc نیست. JASON HIRSCHHORN: آیا ما نیاز به بافر آزاد؟ ما نمی کنند. باز هم، آن را به یک متغیر محلی است، بنابراین ما لازم نیست که آن را آزاد کند. OK. بیایید ببینید چه اتفاقی می افتد. پس از آن آماده سازی نشده است. این چه چیزی بود که مارکوس که قبلا ارائه شده است. پس ما که خطا، بافر متغیر است مقدار دهی نکردن وقتی که در اینجا استفاده می شود. چگونه می توان ثابت؟ STUDENT 50: Malloc آن؟ STUDENT 51: برابر NULL؟ STUDENT 52: بگو بافر برابر با NULL. JASON HIRSCHHORN: OK. به نظر می رسد خوب است. ما در حال حاضر آن را داشته باشد. اجازه دهید چیزی را امتحان کنید کپی ایجاد کنید. بنابراین ما باید فایل متنی است. چگونه می توان این برنامه را اجرا می کنیم؟ آره. STUDENT 53: شما می توانید نقطه انجام بریده بریده CP، test.txt. و سپس شما می توانید یک فایل دیگر نام که آن را به ذخیره کنند. JASON HIRSCHHORN: OK. ما آن را out.txt تماس بگیرید. دانلود؟ گسل SEG. افکار در گسل SEG؟ این فوق العاده است. چگونه می توانم پیدا کنیم که در آن گسل SEG است؟ چه؟ STUDENT 54: GDB. JASON HIRSCHHORN: GDB. ما اجرا از gdb با نوشتن از gdb نقطه اسلش، نام برنامه ما. بدون آرگومان خط فرمان وجود دارد. ما قصد داریم به مجموعه نقطه انفصال در اصلی. اگر من می خواهم برای شروع از gdb، چه می توانم بکنم؟ STUDENT 55: R. JASON HIRSCHHORN: R. و پس از آن چه؟ STUDENT 55: استدلال؟ JASON HIRSCHHORN: سپس آرگومان خط فرمان. اجازه دهید از طریق راه رفتن. N است فقط به من گرفتن خط به خط. من قصد دارم تا زمانی که I گسل SEG من دریافت کنید. تقصیر SEG من وجود دارد. به نظر می رسد از fread ایجاد می شود گسل SEG من. من می دانم که از fread ناشی از گسل SEG من، زیرا که بود خط ما فقط اجرا. و تنها چیزی که بود اتفاق می افتد که در خط - دو چیز اتفاق می افتد شده است. از fread بود، و پس از آن ما بود انجام برخی از چک کردن WHILE. من حاضر به شرط بندی هستم که WHILE چک کردن باعث خطا SEG من نیست. به احتمال زیاد، از fread بود باعث خطا SEG من. من هم چیزی در اینجا، memcopy را ببینید. کپی حافظه. به نظر می رسد در حال حرکت حافظه از یک مکان به مکان دیگر. به نظر می رسد چیزی است که اتفاق می افتد در از fread، شاید برخی از حافظه حرکت از اینجا به اینجا. اجازه دهید از طریق این دوباره. چگونه می توانم آن را شروع کنم بیش از و آن را اجرا کنید دوباره؟ آره. STUDENT 56: آیا شما نیاز به قرار دادن یک علامت قبل از بافر؟ JASON HIRSCHHORN: پس از کاراکتر & قبل بافر به من آدرس بدهد بافر است، که یک کاراکتر *. اجازه دهید از طریق این یک بار اجرا شود. چگونه می توانم از طریق آن یک بار دیگر اجرا کنید؟ STUDENT 57: آیا می توانید فقط نوع اجرای دوباره؟ JASON HIRSCHHORN: فقط دراز دوباره تایپ کنید. بنابراین ما قصد داریم تا نه اجرای این خط. بنابراین بافر یک اشاره گر NULL است. درست است؟ این است که اشاره به - اجازه دهید را ببینید. اگر ما به ما - رسم یک تصویر سریع از این. همه می بینند اگر من ارسال بیش از اینجا؟ بنابراین در پشته، ما باید محلی متغیر و آن را به بافر نامیده می شود، و آن را به یک اشاره گر به کاراکتر است. چه آدرسی که در این کاراکتر؟ STUDENT 58: خانه 0X0. JASON HIRSCHHORN: راست. این چیزی است که این است. در اینجا، در داخل بافر است، خانه 0X0 ذخیره می شود. این چیزی است که ما - راه اندازی ما در حال حاضر. بنابراین این خط، از fread، چیزی قرار می دهد از منبع که در آن؟ به این جعبه و یا از این کادر؟ کدام جعبه؟ جعبه یا جعبه سمت راست را به سمت چپ؟ این جعبه سمت راست. این زیر اشاره گر، و آن را در اینجا. هنگامی که ما سعی و حافظه تماس در محل 0، چه چیزی ما را دریافت کنید؟ گسل تقسیم بندی. که خطای ما در حال حاضر است. آره. STUDENT 59: آیا شما ندارد برای قرار دادن بافر ستاره؟ یا نه؟ برای از fread؟ JASON HIRSCHHORN: پس از fread یک اشاره گر می گیرد. پس از آن در بافر عبور می کند. و سپس آن را د مرجع آن را در جایی در داخل از fread. اما باز هم، ما دیدیم، آن را به اشاره گر. ما نیازی به تصویب آن بافر ستاره. این امر می تواند به عبور آن را به هر آنچه را در اینجا. و این احتمالا به ما خطا را زیرا ما د اشاره به آن. درست است؟ هنگامی که ما د مرجع این اشاره گر، هنگامی که ما سعی می کنیم برای دسترسی به این محل، ما در حال گرفتن یک خطا - گسل تقسیم بندی ما. بنابراین - اوه. ما قصد داریم به ترک خارج از GDB. خط ما - مشکل ما - راست است در اینجا در این خط. و این یک مشکل است زیرا از این خط. چگونه می توان از ایجاد یک جعبه است که در از fread قابل دسترسی است. درست است؟ ما نیاز به ایجاد یک جعبه است که یکی بایت های بزرگ، به اندازه یک کاراکتر. اما ما نیاز داریم که جعبه به در دسترس زمانی که این تابع اجرا می کند. بنابراین که در آن - آره. هر گونه ایده ها؟ STUDENT 60: فقط آن را به عنوان مجموعه هر کاراکتر تصادفی. فقط می توانم برابر بافر کاراکتر شخصیت. و سپس، هنگامی که شما بافر وجود دارد - JASON HIRSCHHORN: صبر کنید. چهار بافر؟ بنابراین هیچ ستاره ای؟ STUDENT 60: آره. نگاهی از ستاره. برابر با یک کاراکتر تصادفی. JASON HIRSCHHORN: OK. بنابراین من یکی به من بدهید. STUDENT 60: مانند یا چیزی. و پس از آن زمانی که شما به بافر داشته باشد وجود دارد، شما با استفاده از - STUDENT 61: ستاره؟ اوه، نه، آن & را داشتند. STUDENT 60: استفاده از آن & را داشتند. JASON HIRSCHHORN: OK. و آنچه در مورد در fwrite؟ STUDENT 60: دوباره استفاده از آن & را داشتند. JASON HIRSCHHORN: بسیار خوب. پس نظر شما این است که ما ایجاد یک کاراکتر و چیزی را در آن، و پس از آن ارسال به کاراکتر. STUDENT 60: آره. JASON HIRSCHHORN: چه مردم فکر می کنم؟ STUDENT 62: این پیچیده. JASON HIRSCHHORN: OK. اجازه دهید آن را بیرون کشید. بنابراین این زمان، من قصد دارم به رسم این در قرمز بر روی پشته در اینجا، و پس از آن ما باید - اوه اوه! متأسفم. بنابراین این زمان ما چیزی به نام بافر، و آن را در پشته است. درست است؟ و ما در حال صرفه جویی در آن، در ابتدا. سپس ما تماس ما را از fread. چه از fread می کند است که طول می کشد یک بایت از فایل و ما آن را در جایی. این، آن را در هر چیزی که در اشاره به. خب، قبل از ما به این آدرس به حال - خانه 0X0. در حال حاضر چه آدرس داریم؟ STUDENT 63: هر چه بافر آدرس است. JASON HIRSCHHORN: هر چه بافر آدرس است. آن را احتمالا برای رفتن به چیزی شبیه به آن. احتمالا رفتن به با ب شروع و جمعه، و پس از آن شش دیگر رقم تولید کنید. مهم نیست. آدرس. و ما در حال عبور است که آدرس شوید و ما قصد داریم برای قرار دادن یک ما چیزی که بایت در آن آدرس. بنابراین ما قصد داریم برای قرار دادن یک ما چیزی که بایت در داخل در اینجا. و پس از آن ما قصد داریم از ارسال آنچه که تا کنون در داخل در اینجا. آیا هر کسی هر گونه سوال در مورد آن؟ چه کسی فکر می کند این کد کار خواهد کرد؟ بالا بردن دست خود را اگر شما فکر می کنم این کد کار خواهد کرد. شما را به یک موضع. و کسی که فکر می کند این کد کار نخواهد کرد؟ بالا بردن دست خود را. هر کسی دیگری باید باشد بالا بردن دست خود را. OK. مایکل، جایی که شما ایستاده است؟ MICHAEL: من نمی تواند تصمیم بگیرد. نوع در وسط. JASON HIRSCHHORN: تو در وسط. انتخاب یکی. MICHAEL: من ایمان دارند و می گویند که این کار می کنند. JASON HIRSCHHORN: OK. شما ایمان داشته و می گویند کار می کند؟ چه اتفاقی افتاد؟ [INTERPOSING صداهای] JASON HIRSCHHORN: بدون خطا SEG. چگونه می توانید بررسی کنید که ما برای دیدن اگر دو چیز با هم برابر هستند؟ دو فایل با هم برابر هستند. STUDENT 64: قدیمیتر. JASON HIRSCHHORN: قدیمیتر. چک تفاوت برای تفاوت بین دو فایل، و اگر آن را می گرداند هیچ چیز، آنها یکسان است. و اگر ما باز کردن، ما فایل های ما است. به طوری که راه حل درست بود. اجازه دهید نگاهی به آن یک بار. ما در واقع حتی نمی نیاز به مقداردهی اولیه آن. این احتمالا نگاه کمی پاک کننده اگر شما قرار داده نشده چیزی تصادفی در آن وجود دارد. نقطه است، شما نیاز به ایجاد برخی از فضا برای ذخیره چیزی از از fread و چیزی را از fwrite. و چیزی که تا به حال به هر دو محلی متغیر در پشته - شما می تواند برخی از فضای malloc'd ام. پس ما در واقع می تواند داشته باشد malloc نوشته شده است در اینجا، و که کار کرده اند. و سپس ما را ذخیره سازی شده است چیزهایی که ما در جایی در پشته. اما این است که در واقع، احتمالا، راه حل زیبا ترین. فقط برخی از فضای در پشته ایجاد برای این چیزها به رفتن. من دو نظر دیگر داشته باشد. اگر شما را به نوبه خود در این، و سپس بر روی این گل، نظر من خواهد بود به شرح زیر است. این 1 در اینجا، به من، نگاه مانند اعداد سحر و جادو. این 1، در شرایط از fread، را حس می کند. که تعدادی از چیزهایی است به خواندن و نوشتن. اما این حق در اینجا باید احتمالا چیز دیگری باشد. پس چه یک راه حل است؟ STUDENT 65: اندازه بایت. JASON HIRSCHHORN: که می خواهم؟ STUDENT 65: اندازه کاراکتر. JASON HIRSCHHORN: اندازه کاراکتر. آره، بایت است یک نوع نیست. بنابراین اندازه آثار کاراکتر. ما می توانیم در بالای داشته باشد، کد ما، # تعریف شده است. به نام چیزی BYTE و این واقعا یک کاراکتر. در واقع، یک روش حتی بهتر ممکن است این بوده است - UINT. کسی می داند چه چیزی است؟ متأسفم. من آن را به عقب. صبر کن، نه. که راه آن را به؟ کسی می داند چه چیزی است؟ آره. STUDENT 67: قرار است برای کمک به استانداردسازی در سراسر سیستم چیزهایی که دارند - مانند اعداد صحیح بدون علامت که 8 بایت؟ JASON HIRSCHHORN: که دقیقا درست است. در ماشین های مختلف، به اندازه یک کاراکتر - معمولا یک کاراکتر. کاراکتر معمولا یک بایت. اما به اندازه انواع داده های دیگر اندازه های مختلف بر روی یک ماشین 32 بیتی در مقابل یک ماشین 64 بیتی. uint8_t همیشه 8 بیت - همیشه یک بایت. و من باید شامل است که استاندارد هدر فایل بین المللی. بنابراین در حال حاضر، این احتمالا بوده است بهترین راه برای ارسال این کد. بنابراین من می توانید از اعداد سحر و جادو خلاص شوید. و من هم منطقی تر دارند نوع برای بافر شده است. این است که به سادگی یک کاراکتر نیست، آن یک بایت است، که همان چیزی است که ما انتظار داریم آن را به. و در اینجا، ما در واقع کمی قوی تر بوده است. ما در حال آن که خواستار یک کاراکتر، - شاید، که می داند - می تواند متفاوت اندازه در دستگاه های مختلف. ما در واقع گفت: این دقیقا همان یک بایت، همیشه، بدون توجه به آنچه. و اگر ما در اینجا نگاه، ما را CP. آه، آه. چه اتفاقی افتاد؟ STUDENT 68: این ممکن است روشن شود. JASON HIRSCHHORN: چه؟ STUDENT 69: آیا آن؟ STUDENT 70: شما نمی به عنوان یک نوع تعریف آن است. STUDENT 71: اما باید در استاندارد تعریف شده است. STUDENT 72: چه خبر است؟ STUDENT 73: باید تعریف شود همه کلاه؟ JASON HIRSCHHORN: بنابراین نه # تعریف کنیم. در واقع، در این مورد، من هستم رفتن به استفاده از typedef. از آنجا که ما در حال استفاده از آن به عنوان یک نوع در یک مکان. بنابراین در این مورد، ما در واقع می خواهم به typedef مانند ما در حال چاپ یک نوع جدید بایت، و آن است که، در اصل، این. این کمی متفاوت از # تعریف کنیم. و اکنون، کد ما کاملا کار می کند. پس، دوباره، # تعریف چیزی است که طول می کشد، آن را جایگزین همه جا با چیز دیگر. این فقط یک کلان است - تند نویسی می توانید از اعداد سحر و جادو خلاص شوید. اما در این مورد، از آنجا که ما هستیم با استفاده از آن به عنوان یک نوع - حق در اینجا - به منظور برای که به کار، ما نیاز به typedef هر بایت است. و ما آن را در تعریف حق در اینجا. این یک ساختار نیست، آن را در واقع فقط یک عدد صحیح بدون علامت. این یک بایت طول دارد. این کد به صورت آنلاین در دسترس خواهد بود، و همه شما باید آن را در حال حاضر داشته باشد. بنابراین ما باید - کامل - در دقیقه 13 ترک به مشکل بیش از مجموعه ای 5. من می خواهم از طریق copy.c راه رفتن با هم، و پس از آن ما به طور خلاصه صحبت در مورد بخش های دیگر از مشکل تنظیم شده است. بنابراین، اجازه دهید بالا بکشد copy.c. و نکته جالب است، ما در واقع در حال حاضر نوشته شده است بسیاری از این کد. کد ما به معنای واقعی کلمه نوشتم فقط از اینجا آمد وقتی که من بود نوشتن این در خود من. اما این copy.c است، پایه و اساس تشکیل برای دو بخش اول مشکل را برای whodunit.c، که شما نیاز به ارسال و resize.c. Recover.c، که سومین و آخرین بخشی از مشکل است، نه بر مبنای این فایل. شما نیاز به رفتن به ارسال آن فایل، ما به شما یک قالب برای آن را فایل، اما هیچ چیز برای انجام این کار با copy.c. اما از آنجا که copy.c پایه و اساس است دو قسمت اول، ما قصد داریم تا از طریق آن راه رفتن در حال حاضر، بنابراین شما حس خوبی از آنچه آن را ندارد. و نظر به برخی از آن دور. ما در حال حاضر نوشته شده است برخی از این. اول، ما مطمئن شوید ما سه بحث. بعد، ما به خاطر سپردن نام فایل. بنابراین ما این مرحله را از قلم وقتی که ما رمزی چیزی که ما - هنگامی که CP است. اما در اینجا، آنها در حال ساخت آن را کمی پاک کن. آنها در حال چک کردن مطمئن شوید هر دو فایل های خوبی هستند، در علاوه بر باز کردن آنها. ما نوشت: تمام این کد فقط در حال حاضر، پس من هستم نمی پردازد در این کد. بعدی برخی از چیزهایی که خاص است انواع فایل های ما استفاده می کنیم که فایل های بیت مپ می باشد. فایل های بیت مپ برخی از ابرداده مرتبط با آنها. بنابراین زن و شوهر اول از بایت در مورد فایل به شما بگویم. آنها رنگ نمی پیکسل در تصویر. آنها شما را در مورد فایل بگویید. و اگر شما را از طریق مجموعه ای مشکل به عنوان خوانده شده، شما اطلاعات بیشتری را باید در چه نوع از سازه های ابرداده با بیت مپ ها گنجانده شده است. اما به همین دلیل است که ما اولین بار از این مجموعه ای از - این کد را در اینجا ببینید. ما در حال خواندن ابرداده - دو قطعه از ابرداده - فایل هدر و هدر اطلاعات. و ما در حال بررسی برخی از بخش های آن را به مطمئن شوید که یک فایل بیت مپ درست است قبل از ادامه. و دوباره، این اطلاعات ما لازم نیست برای رفتن به در حال حاضر. اگر شما را از طریق مجموعه ای مشکل به عنوان خوانده شده، شما این را درک کنید. داستان کوتاه مدت، این ها فقط گفت، این یک فایل بیت مپ است، و تایید که. بعد، ما در حال نوشتن آن به فایل از. ما می بینیم که در اینجا. ما در حال نوشتن را به اشاره گر است. بعد، ما در حال تعیین لایه. بنابراین دوباره، به عنوان خاص با است یک فایل بیت مپ، برخی از خطوط شامل بالشتک در پایان. و اگر شما را از طریق مجموعه ای مشکل به عنوان خوانده شده، شما بیشتر در مورد لایه یاد بگیرند. این فرمول برای پیدا کردن لایه است. مهم است به یاد داشته باشید - زمانی که شما به اندازه یک بیت مپ را تغییر دهید فایل، تغییر لایه. وقتی که شما تغییر اندازه یک فایل، تغییر لایه. هیچ وقت برای رفتن به بیشتر از 3 - آن خواهید بود 0 تا 3، فراگیر. اما وقتی که شما تغییر اندازه چیزی، تغییرات لایه. اگر من فقط یک پیکسل در آن ردیف، من نیاز به سه بایت از بالشتک، به دلیل هر سطر را به تقسیم عددی بر مضرب چهار بایت در یک فایل بیت مپ. اما اگر آن را دو برابر I، از یک پیکسل به به دو پیکسل، که هر کدام، اجازه دهید بگویم، این است که یک بایت، پس من باید دو بایت از لایه را که به چهار برابر است. بنابراین، هنگامی که به اندازه چیزی را تغییر دهم، من نیاز به تغییر مقدار از پد من. آیا این حس برای همه؟ بعد، ما بیش از هر سطر تکرار، و یا از طریق تمام ردیف. و سپس ما را از طریق تکرار هر ستون در هر سطر. ما در حال درمان این بیت مپ مانند یک شبکه، مانند ما در درمان ام هیئت مدیره در 15. مثل ما تحت درمان آجر در زمانی که ما آنها را بر روی صفحه نمایش چاپ شده است. شبکه ای از سطر و ستون. پس از آن - ما این را دیدم. ما در واقع فقط این کد می شود. ما برخی از ذخیره سازی موقت ایجاد شده است. ما در آن وجود دارد به عنوان خوانده شده، و پس از آن ما آن را ارسال کنید. این دقیقا همان چیزی است که ما فقط. بعد، به خاطر من گفت: هر خط در برخی از بالشتک به پایان می رسد، ما جست و خیز بیش از آن بالشتک - بالشتک های قدیمی. و بعد ما آن را اضافه به عقب. در این مورد، ما در حال ایجاد فایل های مشابه. ما فقط آن را کپی. بنابراین این خط از نوع احمقانه است. ما می تواند به معنای واقعی کلمه فقط قرار دادن بالشتک شوید اما اگر شما تغییر اندازه فایل، آیا شما هنوز هم می خواهید این خط؟ بنابراین اگر ما به اندازه یک فایل را تغییر دهید، ما هنوز هم می خواهید به جست و خیز بر روی لایه های قدیمی؟ STUDENT 74: بله. JASON HIRSCHHORN: پس ما انجام دهد. از آنجا که این، دوباره، معاملات با فایل منبع. ما در مورد لایه مهم نیست از فایل منبع. ما می خواهیم برای رفتن به خط بعدی. اما ما به سادگی به عقب قرار داده نشده مقدار قدیمی از لایه. ما نیاز به قرار دادن پشت مقدار جدید از لایه. بنابراین، هنگامی که ما در حال تغییر به اندازه یک فایل، ما هنوز هم می خواهید به جست و خیز بیش از لایه گذاری را در فایل های قدیمی - چه ما در خواندن از. اما آنچه که ما در حال نوشتن به، ما قصد داریم به نیاز به قرار دادن برخی از مختلف تعداد لایه که ایم. آره. STUDENT 75: منظور از این دو خطوط مهم نیست، درست است؟ از آنجا که شما در حال دست زدن به فایل های مختلف. JASON HIRSCHHORN: دقیقا. منظور از این دو خط مهم نیست. ما در نوشتن این خط. این است که در اینجا برای فایل ما در حال نوشتن به. این مهم است، بنابراین ما دریافت کنید مقدار مناسب از پد. این است برای مقابله با فایل در. ما می خواهیم به جست و خیز راست بر روی پد. ما نمی خواهیم به عنوان خوانده شده - اگر ما در حال خواندن یک بایت را در یک زمان، ما در مورد آن کلمه در ادامه متن بالشتک اهمیتی نمی دهند. ما می خواهیم به حرکت می کند به خط بعدی. در نهایت درست مثل لوسی برای ما داد، ما فایل را ببندید و بازگشت 0. بنابراین این copy.c. است و ما در واقع نوشته است - ما را صرف بیشتر بخش نوشتن این، در اصل. شما این ساخته شده است. پس امیدوارم شما یک حس خوب از چه خبر است در اینجا. تفاوت بزرگ، صادقانه، فقط این بخش برای اولین بار است که با معاملات خصوصیات فایل های بیت مپ. بنابراین من به عنوان اسلاید بعدی من، ما چه باید انجام دهید؟ خوب، اجازه دهید در مورد رمان پلیسی فکر می کنم. و برای کسی که خواندن از طریق مشکل تعیین می کنند، چه کار می کنیم نیاز به انجام در رمان پلیسی؟ به سادگی. Aleja. ALEJA: آیا می توانم شما را از بخش از هر پیکسل است که نشان دهنده قرمز. و پس از آن - نوع؟ JASON HIRSCHHORN: OK. بنابراین از بخشی از هر پیکسل است که نشان دهنده قرمز. که نزدیک، اما نه همه آن. STUDENT 76: خوب، وجود دارد راه های مختلفی برای انجام این کار. JASON HIRSCHHORN: OK. من یک راه را به من بدهید. STUDENT 76: نگاهی از تمام قرمز، و پس از آن تاکید بر آبی و سبز می باشد. JASON HIRSCHHORN: OK. بنابراین با توجه به هر دو این روش - آن را برای تلفن های موبایل مانند ما آن را یک پیکسل، آن را تا به سطح قرمز، آبی و سبز می باشد. ما می خواهیم برای تغییر سطح نسبی قرمز، آبی، و سبز، بسته به در آن پیکسل. که در آن در این کد باید تغییر ما نسبت به رنگ قرمز، آبی و سبز سطح یک پیکسل داده شده است. بعد از ما آن را خوانده ام - قبل از ما آن را بنویسید؟ من شماره خط را. دانش آموزان چندگانه: 83. JASON HIRSCHHORN: 83. بنابراین در اینجا ببینید. برای رمان پلیسی، کد شما نیاز به نوشتن باید همه به سمت راست وجود دارد. و این تنها کد است شما نیاز به نوشتن. از آنجا که، مثل ما شنیده، همه شما نیاز به انجام است تغییر این آبی نسبی، سطح قرمز و سبز از هر پیکسل است. شما آن را در به عنوان خوانده شده ام، و در حال حاضر شما رفتن به آن ارسال شده است. چگونه می توانم - اگر من این چیزی که به نام سه، حق در اینجا، و آن را از نوع RGBTRIPLE - خوب، اگر ما در bmp.h نگاه کرد، چه RGBTRIPLE است؟ STUDENT 77: این یک ساختار است. JASON HIRSCHHORN: RGBTRIPLE یک ساختار است. ما می بینیم که حق را در اینجا. و به این ترتیب اگر من به دسترسی می خواستم، می گویند، سطح قرمز از ساختار، چگونه می توانم انجام سطح قرمز از این ساختار دسترسی پیدا کنم؟ [CLASS سوفل] STUDENT 78: RGBTRIPLE.rgbtred؟ JASON HIRSCHHORN: آیا این درست است؟ STUDENT 79: باید سه برابر شود نقطه، به جای RGBTRIPLE نقطه؟ JASON HIRSCHHORN: سه. سه متغیر محلی است، بنابراین در اینجا، هیچ اشاره گر در اینجا وجود دارد. بنابراین ما فقط استفاده از نماد نقطه. این به من سطح قرمز را. اگر من می خواهم به آن را تغییر دهید، من فقط تنظیم آن را به چیزی متفاوت برابر است. پس دوباره، این خط از کد دسترسی این متغیر در داخل این ساختار، و ما می توانیم آن را به چیز جدیدی را تنظیم کنید. بنابراین برای رمان پلیسی، دوباره، این است که، در واقع، آنچه که ما باید انجام دهیم. بسیار ساده است. فقط برخی از سطوح نسبی تغییر، و این جایی است که که کد می رود. تغییر اندازه، از سوی دیگر، است که کمی سختتر. در واقع، تغییر اندازه است، احتمالا ترین قسمت از این مشکل تنظیم شده است. ما سه دقیقه به بیش از آن. اما باز هم، ما در حال حاضر نوشته شده است بسیاری از این کد، به طوری که ما باید بسیار آشنا باشد. بعضی از چیزهایی که ما می خواهیم انجام دهیم در چیست تغییر اندازه، اگر شما بیش خوانده ام مشکل است؟ اگر شما آنها را به من بدهد، ما می تواند در مورد آنها صحبت کنید. بعضی از چیزهایی که ما می خواهیم انجام دهیم چیست؟ STUDENT 80: عمودی - بنابراین شما باید به صورت افقی آن را تغییر اندازه، اما به صورت عمودی آن را تغییر اندازه و همچنین؟ JASON HIRSCHHORN: بنابراین اگر ما داده شده است در حال پیکسل، و ما می خواهیم آن را تغییر اندازه توسط دو عامل، در حال حاضر نیاز به تغییر اندازه به صورت افقی و تغییر اندازه به صورت عمودی. آیا این را حس؟ آره. به طوری که احتمالا این بزرگترین چالش. و ما در مورد که در یک ثانیه صحبت کنید. آره. STUDENT 81: راه من از آن فکر شما لازم بود آن را چاپ کنید - JASON HIRSCHHORN: صبر کنید. آیا به ما بگویید که چه چیزی شما را انجام داد. ما قصد داریم به بحث در منطق. STUDENT 81: OK. چه سوال بود؟ JASON HIRSCHHORN: شما فقط دست خود را مطرح کرد. هیچ سوال وجود دارد. اجازه بدهید من آن را در حال حاضر. اجازه بدهید من این را به طور خلاصه مورد بحث. پس ما یک پیکسل، ما به خواهید تکرار آن، هر دو به صورت افقی و به صورت عمودی. بنابراین ایده آل چیزی است که ما در اینجا انجام دهید این است، ما خوانده شده در پیکسل ما، ما آن را ارسال با این حال بسیاری از بار. اما پس از آن ما باید فوت و فن ما در اینجا، به دلیل پس از آن ما می خواهیم به جست و خیز به خط بعدی و ارسال آن را در ابتدای خط بعدی. بنابراین اگر ما می خواهیم به تکرار هر دو افقی و عمودی، چه است یک راه خوب برای انجام این کار - خوب اگر به انجام این کار؟ بنابراین ما لازم نیست به طور مداوم به دنبال در سراسر فایل های ما به جای چیز. این سوال ممکن است ساخته شده حس، اما من فکر می کنم در پاسخ به آن کمک خواهد کرد. STUDENT 82: ایجاد یک آرایه؟ JASON HIRSCHHORN: بنابراین اجازه دهید فکر می کنم هر یک از فایل به عنوان یک ردیف. اجازه دهید از نظر ردیف فکر می کنم. اگر ما سطر اول ما را از کوچک ما عکس، ما می توانیم که ردیف را به یک ردیف بزرگ از یک تصویر بزرگ، و پس از آن تکرار همان ردیف با این حال چند بار به آن نیاز دارد به تکرار، به جای رفتن پیکسل به پیکسل که گیج کننده است زمانی که می شود برخورد با فایل. از آنجا که اگر ما تا به حال - I مقدار فضای خالی دارم. اگر این فایل ما است، و ما باید که یک پیکسل وجود دارد، و ما می خواهیم آن را سمت راست وجود دارد، ما هنوز هم برخی از چیزهایی که دارند که نیاز به بیش از وجود دارد که ما نوشتن و ایجاد فایل جدید ما - فایل ما که دو بار به عنوان بزرگ است. اما این واقعا سخت با توابع فایل به جست و خیز در اطراف به خط جدید مانند آن، و سپس به اینجا بروید و همه چیز را در وجود دارد. این تقریبا غیر ممکن است برای انجام کاری مانند آن، اگر آن را حس می کند. بنابراین اگر ما از نظر ردیف فکر، ما می توانیم را ردیف ما، و سپس قرار دادن آن - تکرار ردیف به صورت عمودی. و این که ما چگونه با تغییر اندازه برخورد به صورت عمودی به جای افقی. این نوع از سریع بود، و کمی گیج کننده است. متاسفانه در زمان ما است. من در خارج برای کسانی از شما خواهد ایستاد در اینجا سوال در مورد که مجموعه ای مشکل، از جمله بهبود می یابند. بنابراین اجازه دهید در حال حاضر موکول. و دوباره، اگر شما هر گونه سوال، ما در خارج می تواند به چت.