JASON هيرشهورن: أهلا، الجميع، لأسبوع 6. أنا سعيد لرؤيتك كل قيد الحياة وبصحة جيدة بعد مسابقة 0، لأنني أعرف أن وكان الخام قليلا. ولكن لحسن الحظ، لكم جميعا حسنا فعل لا يصدق. وهكذا ما هو رائع. إذا كنت في قسم بلدي، لقد أعطيت أكثر من إجراء النسخ الاختبارات الخاصة بك بالفعل. زوجان من أنت، وأنا الوفاء بعد انتهاء اليوم الدراسي. وإذا كنت طالبا الإرشاد و لم تكن قد تلقت مسابقة ظهرك حتى الآن، وفريق العمل الخاص بك هو على الارجح تعمل على ذلك والدرجات ذلك، وسوف تحصل عليه مرة أخرى إليكم قريبا. حتى طلابي الذين هم التمديد يراقب الآن - يعيش على أمل - وسوف تحصل مسابقتك قريبا كذلك. جدول أعمالنا لهذا اليوم على النحو التالي. الأولى، ونحن في طريقنا للذهاب على بعض الموارد التي توفر CS50 لك. ونحن في طريقنا للذهاب أكثر من مسابقة 0 المقبل، و أنا سأجيب أي أسئلة أي شخص لديه حول مشاكل معينة. ومن ثم، فإننا سوف يذهب أكثر ملف I / O ومشكلة تعيين 5. سوف هذين الموضوعين مشاركة اتخاذ الجزء الأكبر من القسم اليوم. أنا وضعت هذه القائمة في كل أسبوع باعتباره تذكير لكم جميعا، ولكن من صميم القسم، ليس لدينا سوى 90 دقيقة - نحن ليست قادرة على تغطية كل ما كنت أحب لتغطية يا رفاق. ولكن لدينا من نصف طن من الموارد ل لك أن تستفيد كما يمكنك الحصول على معرفة المواد والعمل من خلال يحدد مشكلتك. للتذكير فقط أن لدي على الانترنت نص مربع، التي أنشئت من أجل لك لملء إذا كنت لديك أي ملاحظات بالنسبة لي، سواء كانت إيجابية و بناءة، حول القسم. يقع هذا العنوان وصولا هنا. لذا يرجى، ان نتوقف لحظة إذا كان لديك أي ردود الفعل، سواء خلال القسم، أو بعد، أو بعد مشاهدة الفيديو على شبكة الإنترنت، أن تعطيني ملاحظاتك. أنا حقا نقدر أي وكل ذلك. حتى لقد كان لديها المحادثات صغيرة مع الكثير من بلادي الطلاب طوال الأسبوع - كما قلت تسليم مسابقات الظهر، يتحدث عن بالطبع، ورؤية كيف تفعلونه. ولقد حان موضوع واحد على مدى و أكثر في الحديث عن - في خاص - يحدد المشكلة. ولقد مغلفة هذا الموضوع على متن الطائرة في الوقت الحالي. أساسا، هناك فرق بين تحول في ما هو القيام به بشكل صحيح وشيء أن يتم ذلك بشكل جيد. معظم الناس قد تفعل رائعة من حيث صحة - في 5 أو 4 على جميع psets. معظم الناس يحصلون على تلك كل الوقت. ومع ذلك، فقط لأنك قد فعلت الحق شيئا لا يعني أنك قمت كما فعلت شيئا بأناقة، أو بكفاءة، أو كما نظيفة كما كنت يمكن أن فعلت ذلك. وهذا ما تصميم - وإلى أقل درجة، وأسلوب - محاور هي لل. حتى وأنا دفع لكم جميعا، وTFS أخرى يضغطون يا رفاق، ليس فقط بدوره في الأشياء التي هي صحيحة، ولكن إيقاف في الأشياء التي يتم ترميز بشكل جيد. لا تفعل لا لزوم لها للحلقات، لا إعادة حساب المتغيرات إذا لم يكن لديك ل. على سبيل المثال، إذا نظرنا إلى الوراء لمشكلة تعيين 4، عند وضع الطوب على الشاشة، كل صف - كل لبنة في صف معين لديه نفس الإحداثي ص - نفس الارتفاع تنسيق. بحيث الإحداثي ص لم تكن في حاجة ل تحسب داخل الداخلية متداخلة للحلقة التي من المحتمل استخدامها لوضع تلك الطوب على الشاشة. فإنه يحتاج فقط إلى أن تحسب كل الوقت الذي تحولت صف واحد، أو انتقل لأسفل على التوالي. لذلك أقول إذا كان هناك 10 الطوب في صف واحد، يمكن لكل لبنة لديهم نفس الإحداثي ص، والتي الإحداثي ص يمكن فقط أن تحسب مرة واحدة لجميع أولئك. فإنه لا يحتاج إلى أن تحسب 10 مرات، ولا يفعل ذلك حساب الحاجة أن يحدث في الفعلية وظيفة الدعوة - استدعاء دالة gracked جديدة. حتى إذا كان ذلك مربكا قليلا ل كنت، وأكثر بشكل عام، والأشياء التي لا تحتاج إلى أن يحدث كل مرة واحدة تذهب من خلال حلقة للا ينبغي أن يكون وضعت داخل حلقة FOR، ويجب أن لا يحدث في كل مرة تذهب من خلال حلقة FOR. آخر مثال التصميم الجيد رأينا في الأسبوع لمدة 15 3، هل يمكن أن تبقي المسار من الصفر. وذلك عند تهيئة متن الطائرة، كنت انقاذ - في متغير عمومي، وربما - وx و y-تنسيق من الصفر. ثم كلما كنت - في وظيفة التحرك الخاص بك، كلما قمت بإجراء خطوة ناجحة، يمكنك تحديث موقع الصفر. التي من شأنها أن يخلصك من الحاجة إلى القيام متداخلة للحلقات لننظر من خلال متن كل مرة في وظيفة عملكم والعثور على الصفر، أو العثور على البلاط، و ثم تحقق ما هي الخطوة التالية لذلك. بدلا من ذلك، كان لديك موقع الصفر، يمكنك مجرد إلقاء نظرة أعلاه، أدناه، وإلى اليسار واليمين منه، لإيجاد البلاط الذي كنت تبحث عنه. وذلك من حيث البرامج نحن الكتابة، وانهم لا تكفي أن بعض هذه القرارات التصميم تسير حقا لعرقلة الخاص البرنامج، أو جعلها تعمل ببطء أكثر، أو ربما حتى نفاد الذاكرة. لكننا لا تزال تدفع يا رفاق كما لكتابة أنيقة و كود فعالة قدر الإمكان. لذلك إذا كنت تفعل في نهاية المطاف كتابة الأشياء التي لديها أكبر بكثير نطاق، وسوف تكون مكتوبة مع حسن تصميم بالإضافة إلى كونه الصحيح. لذلك عددا من لديك جلبت إلى ذلك. هذا شيء نحن نبحث عن - شيء ونحن في طريقنا إلى مواصلة يا رفاق على دفع. إذا كان لديك أي أسئلة حول أي وقت مضى تصميم البرنامج الخاص بك، لا تتردد للوصول إلى لي، وأنا سعيد ل المشي من خلال البرنامج معك، ونشير إلى بعض من تصميم القرارات التي قمت بها، وتعطيك بعض اقتراحات حول كيفية جعل حتى قرارات التصميم على نحو أفضل. لذلك نحن ذاهبون للمضي قدما لنتحدث عن مسابقة 0. قبل ان نفعل ذلك، لا أحد لديك أي أسئلة حول ما لقد غطت حتى الآن؟ [سرقة الضوضاء] JASON هيرشهورن: سبع ثواني. موافق. دعونا نتحدث عن مسابقة 0 قليلا. معظم لديك مسابقة التسوق 0 في الظهر. إذا لم تقم بذلك، ونأمل تتذكر ذلك قليلا. ولكن إذا كنت قد اتخذت مسابقة 0، فإنك لديك أيضا إمكانية الوصول إلى الإنترنت في PDF الحلول العينة. هل لدى أي شخص أي أسئلة قبل نحن القفز الى المواد الأسبوع حول مشكلة خاصة على مسابقة 0 - لماذا الجواب هو ما هو عليه؟ هو أي شخص الخلط حول أي شيء؟ حتى إذا كنت حصلت على هذه المشكلة حق، ولكن فقط أود لي أن أشرح ذلك قليلا أكثر من ذلك، أنا سعيد للقيام بذلك الآن. حتى لقد طلبت يا رفاق ل يأتي مستعدا مع بعض الأفكار حول مسابقة 0. حتى الذين يرغبون في الحصول على لنا بدأت مع سؤال أو التعليق على مسابقة 0؟ [ورقة سرقة] JASON هيرشهورن: ليس الجميع فعلت تماما. إذا كنت لا تعرف [ضحك] يجب أن تكون هناك بعض الأسئلة حول مسابقة 0. موافق. نعم. Ompica. OMPICA: عدد 10. JASON هيرشهورن: عدد 10. أي واحد كان الرقم 10؟ OMPICA: و- JASON هيرشهورن: I haven't - OMPICA: وتشمل - JASON هيرشهورن: عدد 10 وكان ثمانية ط - الكتابة ثمانية إلى i؟ OMPICA: نعم. JASON هيرشهورن: OK. ذلك سؤال آخر هل يمكن أن يكون طلب كان أنا عالم الغيب؟ الجواب هو نعم. في القسم قبل هذه المسابقة، سألت يا رفاق لرمز كل من الجنيه الاسترليني و ثمانية لط. كل منهما حدث ل تظهر على هذه المسابقة. لذلك نأمل، الذي دفعته الانتباه إلى ذلك. وإذا كان لديك، ثم عملتم ربما أحسنت على هذين. ولكن ثمانية إلى i، لم نكن في الواقع رمز أنه في الصف، ولكنه كان، مرة أخرى، طلب على هذه المسابقة. حتى بضعة أشياء لاتخاذ ملاحظة عندما الترميز ثمانية إلى i. أول شيء، في هذه المسألة، وكان أن كنت في حاجة للتحقق مما إذا السلسلة كان مساويا لاغية. حاول زوجان الناس للتحقق في وقت لاحق في برنامج كان إذا ط ق قوس - حتى شخصية محددة في هذا سلسلة - كان يساوي فارغة. ولكن تذكر، وهذا باطل هو في الأساس - انها جيدة للتفكير في فارغة كمؤشر صفر - مؤشر إلى الصفر - في مكان ما في الذاكرة حيث أنت لا يمكن أبدا الوصول إليها. حتى إذا كان هناك شيء يساوي فارغة، وكنت نعرف أنه لم يتم تهيئة ذلك، أو لا يوجد شيء هناك. حتى و هو نجم شار، ق قوس ط هو شار. لذلك فمن المنطقي أن يقارن ق إلى فارغة، ولكن ليس قوس ق ط إلى قيمة خالية. ولكن مرة أخرى - بحيث كانت أول شيء التي كان من المفترض القيام به - تحقق للتأكد من أن كنت في الواقع حصلت سلسلة حقيقية. المقبل، أردت أن تذهب من خلال كل حرف في السلسلة. وذلك من شأنه أن يكون مثل ليالي قوس أنا، على سبيل المثال، إذا كنت غير مكرر الخاصة بك. ويأخذ هذا الطابع، و الحصول على قيمتها الفعلية. لقد كان بمثابة مخزن شار، ولكن قيمة ASCII للصفر - صفر كحرف - ليس صحيحا في الواقع صفر. انها بعض رقم الأخرى التي يمكنك البحث عنها في جدول ASCII. حتى طريقة واحدة لتصحيح ذلك - الارجح أفضل وسيلة لتصحيح ل ذلك - وطرح منه قيمة حرف - صفر كحرف. اقتباس واحد حتى ناقص، الصفر، اقتباس مفردة أخرى. سوف تأخذ أيا كان عدد لديك كما شار، وسهولة الحصول عليها مساوية ل عدد كعدد الفعلية. والتي هي مشابهة جدا لنهج الكثير من الناس خرجوا في مشكلة تعيين 2، مع قيصر وViginere - تلك الأصفار، عند واستدارتها. وذلك بعد أن يكون ذلك عن عدد من صفر إلى تسعة، ثم - اعتمادا على أين تذهب في العدد النهائي - تحتاج إلى اضربها من قبل قوة من 10. انتقلت بعض الناس من العودة إلى الجبهة، وتضاعفت الفرد عدد من قبل قوة من 10. انتقلت بعض الناس من في الأمام إلى الخلف - وهكذا استغرق أعلى طلب أرقام الأولى - وسيوفر تلك في المتغير العداد العالمي. ثم في كل مرة من خلال ل حلقة، ضرب هذا العملاق العالمي مواجهة المتغير بنسبة 10، لجعل مساحة للشار المقبل. بحيث كان مربكة قليلا دون لي كتابته على السبورة. ولكن الحل عينة هو متاح لك. ولكن تلك كانت أشياء كبيرة كنا نبحث عن. أيضا تحقق للتأكد من أن كل كان الطابع الفردي الواقع حرف بين صفر وتسعة، وليس بعض الحرف الأخرى، مثل A، على سبيل المثال. كانت تلك الأشياء كنا نبحث لفي هذا السؤال. لا أن أجيب على سؤالك؟ OMPICA: نعم. JASON هيرشهورن: OK. هل هناك أي أسئلة أخرى حول مسابقة 0؟ ماذا عن تجميع؟ الجميع تجميع أليس كذلك؟ لا. كان هناك - [ضحك] أي أسئلة حول عملية تجميع؟ نجاح باهر. [ورقة سرقة] JASON هيرشهورن: نعم. مايكل. مايكل: هل عدد 7 - عشوائية؟ JASON هيرشهورن: عدد 7. وكان عدد 7 الحصول على عدد صحيح عشوائي. ممتازة. لذلك كنت نظرا لعدد صحيح و صحيح ب، وتريد عشوائي عدد صحيح بين أ و ب. يمكن أن نكتب في الواقع هذا واحد على المجلس، لأن هذا واحد كان سطر واحد من التعليمات البرمجية - طريقة واحدة للقيام بذلك. لذلك نحن تعطى drand بوصفه وظيفة يمكن أن نستخدمها. وماذا drand - على افتراض انه تم المصنفة ذلك - ماذا drand العودة؟ مايكل: A تعويم بين 0.0 و 1.0. JASON هيرشهورن: عدد - نعم. عدد بين 0 و 1. وبذلك نكون قد وب. ومن ثم لدينا رقم عشوائي لدينا بين 0 و 1 التي قدمها لنا drand. بعض الناس حاول أن يضع ب، أو ب ناقص لذلك، أو شيء داخل تلك الأقواس. فإن ذلك يعني انهم الحجج لهذه الوظيفة. drand لا يأخذ أي الحجج - مثل getString لا لا تأخذ أي حجج. حتى انها مجرد PAREN مفتوحة، على مقربة PAREN - وهذا، في حد ذاته، هو استدعاء دالة. والتي تمنحك عددا بين 0 و 1. بالطبع، لدينا مجموعة كاملة أن الأرقام يمكن أن تكون فيه. أقول، إذا هو ب 10 وعلى بعد 5، ونحن حقا تريد رقم مع مجموعة من 5. وبالتالي فإن الشيء التالي الذي عليك القيام به هو اضرب هذا من قبل مجموعة ب ناقص. حتى على افتراض أن هو ضرب. والتي سوف تعطينا رقم ضمن نطاق معين. وهذا النطاق كونها محددة الفرق بين ب ناقص. وأخيرا، والتي سوف تعطي إلا أنه من - ويقول تتراوح ما بين ب ناقص و5، والتي سوف تعطينا عدد 0-5. ولكن إذا كان هو في الواقع 5، ونحن بحاجة إلى تعزيز هذا النطاق تصل إلى حيث انها من المفترض أن يكون في الواقع، عن طريق إضافة. بحيث يحصل على حق المنطق. وبعد ذلك، سيكون لديك سؤال آخر؟ مايكل: رقم أشعر غبية حقا الآن. [ضحك] JASON هيرشهورن: رقم لا أشعر غبية حقا. كافح هناك عدد من الناس مع هذا السؤال. ومن ثم، فإن السؤال الآخر هو، drand، قال لك، يعطيك تعويم - إرجاع عشري. ولكن هذه الوظيفة طلب الواقع لعدد صحيح يمكن إرجاعها. لا تحتاج ليلقي هذا صراحة إلى عدد صحيح، لأن هذه وعمليات التعامل معها على أنها جميعا تعويم - وعدد النقطة العائمة. مثل هذه الإرادة - حتى لو كان هذا هو عدد صحيح، هذه الإرادة أن تتضاعف بشكل صحيح. وسوف تعمل جميع الضرب. لا تحتاج للادلاء هنا. في الواقع، يجب أن لا يلقي عليه. التي من شأنها - إذا كنت يلقي عددا هذا هو بين 0 و 1 - رقم عشوائي، وهذه نقطة عائمة - بعد ذلك سوف يكون إما 0 أو 1 فقط، لذلك فسوف تفقد كل ذلك بدقة. ولكن في نهاية المطاف، عند العودة، فإنه يحصل تلقائيا إعادته كعدد. لذلك أنت لا تحتاج إلى القيام به أن صب نفسك. لذلك كان هذا الجواب ل هذا السؤال، رقم 7. أي أسئلة أخرى حول مسابقة 0؟ نعم، آني. ANNIE: متى نستخدم عودي - متى نستخدم الحلقات التكرارية؟ JASON هيرشهورن: عندما تستخدمون عودي - أكثر من ذلك عموما، و إيجابيات وسلبيات العودية مقابل نهج تكرارية. أي شخص يمكن أن نقدم الموالية أو يخدع؟ من فضلك؟ لا يمكن أحدا. الذين يمكن أن تقدم الموالية أو يخدع؟ [ورقة سرقة] الطالب 1: متكرر أقل الترميز - الكتابة أقل؟ JASON هيرشهورن: وهكذا عموما، العودية خاصة، وهي وظيفة - أو خوارزمية مثل دمج النوع - الذي يفسح المجال إلى نهج العودية - قد يكون أكثر وضوحا إلى رمز متكرر. وفقط أكثر منطقية للقيام بذلك بشكل متكرر. بحيث سيكون الموالية لالعودية. الآخرين؟ نعم؟ الطالب 2: ليخدع العودية - ويستخدم أكثر من الذاكرة. JASON هيرشهورن: إذن صحيح تماما. وهناك وظيفة العودية الحفاظ على إضافة كومة إطارات إلى المكدس. لذلك إذا كنت تعمل على الكثير من الأرقام، ويجب أن نسمي هذا تعمل الكثير، فإنك سوف بالتأكيد تناول المزيد من الذاكرة، في حين سوف نهج تكرارية وضع واحد فقط كومة الإطار على المكدس، ل كل ذلك يحدث داخل وظيفة واحدة. أي إيجابيات وسلبيات أخرى؟ نعم. الطالب 3: إيجابيات لالعودية. لم يكن لديك لتحديد في تقدم عدد المرات التي كان رمز لتكرارها. هل يمكن أن يكون عدد محدد سلفا من الأوقات التي لديك لتكرار، ثم العودية هو أفضل، ل فإنه يأخذ تلك النتيجة. JASON هيرشهورن: أعتقد أن هذا صحيح. ولكن اعتقد انه في كلتا الحالتين لو كنت أبدا - ربما كنت تحصل على بعض مدخلات من المستخدم. أو هذه الوظيفة سيكون لها بعض المدخلات التي من شأنها أن تحدد عدد المرات التي يجب تشغيل. لذلك عموما، فإنك لن رمز القرص الثابت - حتى في نهج تكرارية - كيف يجب تشغيل مرات عديدة أن حلقة. هل لديك آخر كنتم التفكير، آني؟ موافق. حتى تلك هي على الأرجح اثنين - أكبر المؤيدين وأكبر يخدع لالعودية مقابل نهج تكرارية. موافق. أي شيء آخر على مسابقة 0؟ دعنا ننتقل. ملف I / O. هناك رائعة قصيرة هذا الاسبوع على ملف I / O أن نأمل كنت قد شاهدت متعددة مرات، ومعجبا به. وهناك الكثير من العمل ذهب إلى ذلك، ولقد سمعت أنها مفيدة بجنون. أنا وشملت أيضا وصلة على هذه الشريحة، في حال كنت لم تكن لديهم فرصة لمشاهدته 10 مرات. لذلك، ونحن في سبيلنا للذهاب لفترة وجيزة على الخطوات الرئيسية لفتح والعمل مع الملفات، ومن ثم نحن نذهب ل الغوص في مشكلة الترميز قبل دراسة مجموعة مشكلة. ذلك مرة أخرى، وأنا ذاهب لوضع هذا الأمر على الشاشة، ولكن انا ذاهب الى الحديث عن دقيقة واحدة فقط حول ما نحن تفعل هنا مع ملف I/O-- ماذا يعني ذلك؟ وهذا يعني أننا يمكن أن تخلق لدينا برامج، ومن ثم يكون لدينا برامج الخروج، وليس جعلت أي تأثير على العالم الخارجي من برنامجنا. ولكن عندما نبدأ العمل مع الملفات - كلا قراءتها في خلق و منهم - فإننا يمكن أن يكون له بعض التأثير على العالم الخارجي من برنامجنا. تماما مثل إذا كان برنامج Microsoft Word غير قادرة لتقديم أي مستندات Word، ثم مرة واحدة إنهاء Microsoft Word، كل الكلمات أن يكون قد انتهى العمل، وأنه سيكون يكون حقا عديمة الفائدة. نحن لا نريد في نهاية المطاف لتكون قادرة على كتابة البرامج التي يمكن أن تؤثر على العالم من حولهم، سواء من خلال اتخاذ في المدخلات المعقدة - من حيث الملفات و عبر الملفات، وخلق اهتمام أيضا والنواتج قاهرة - من حيث أنواع مختلفة من الملفات. لذلك هذا هو السبب في أننا بدأنا تعلم كيفية العمل مع ملفات. وبشكل أكثر تحديدا، ما ما نفعله هو على النحو التالي. الأمر في غاية البساطة. لا يوجد سوى بضع خطوات، و تم سردها هنا على هذا الرمز. لذلك نحن في طريقنا للذهاب من خلال هذا سطر التعليمات البرمجية سطرا. الأولى، ترى الضوء - عندما كنت تعمل مع ملف، بغض النظر عن نوع الملف هو عليه، تحتاج إلى فتحه. وهذا هو مع دعوة FOPEN - الحق هنا. عليك تضمين اسم الملف. إذا لم يكن الملف في الدليل الخاص بك، أو المجلد حيث هذا البرنامج حياة، فأنت بحاجة أيضا لتشمل الطريق إلى حيث هذا الملف هو. ونحن في طريقنا لنفترض أن هذا ملف يسمى "text.txt" - مستند نصي بسيط - هو في نفس المجلد مثل هذا البرنامج. بحيث شيء آخر أن نأخذ في العقل - أنه إذا كنت ترغب في فتح ملف في مكان آخر، تحتاج فعلا لتشمل موقعه. الثانية، يمكنك تمرير وسيطة ل الدالة fopen، وهذا ما تريد القيام به مع الملف. هناك ثلاث حجج الرئيسية التي وأنت تسير لتمريرها إلى FOPEN. الذين يمكن أن تعطيني هؤلاء الثلاثة؟ الذين يمكن أن تعطيني واحد منهم؟ نعم. الطالب 4: اسم الملف؟ JASON هيرشهورن: آسف. ثلاث حجج الرئيسية التي يمكن أن تمر كوسيطة الثاني لFOPEN. كنت على حق - اسم الملف هي الحجة الأولى. ولكن الحجة الثانية هي أن FOPEN عموما ثلاث سلاسل، و- نعم. Aleja. ALEJA: ألف لإلحاق. JASON هيرشهورن: A، إذا كنت ترغب في إلحاق إلى ملف موجود مسبقا. الطالب 5: R للقراءة. JASON هيرشهورن: R، إذا كنت تريد أن تقرأ من ملف. الطالب 6: W للكتابة. JASON هيرشهورن: وث، إذا كنت تريد أن تكتب إلى ملف. حتى في هذه الحالة، نحن الكتابة إلى الملف، لذلك لدينا ث. تفتحه، لديك أيضا لإنقاذ ملف في مكان ما، وهذا مع رمز إلى الجانب الأيسر من عامل التعيين - أنا خلق مؤشر إلى ملف ودعا، في هذه الحالة، الملف. نحن لن تقلق ما هذا كل شيء القبعات FILE هو. ويكفي ان نقول، بل هو طويل تيار من الآحاد والأصفار و. وهذه هي الطريقة التي نحن بصدد تشغيله وفهمه. الشيء التالي الذي عليك القيام به - و هذا أمر مهم للغاية - كلما قمت بفتح ملف - في الواقع، كلما قمت استدعاء malloc، ل سبيل المثال، والحصول على بعض الذاكرة ومحاولة وحفظه في المؤشر، كنت دائما تريد أن تحقق للتأكد من أن هذا لم لا وظيفة العودة فارغة. حتى في هذه الحالة، ونحن نتحرى لجعل تأكد من أن فتحنا فعلا الملف بشكل صحيح، وكان هناك أي خطأ في برنامجنا. المقبل، بعد أن نكون قد فحص للتأكد من أن لدينا ملف العمل، يمكننا إرسال إلى، أو قراءة من، أو إلحاق الملف. في هذه الحالة، وأنا ببساطة طباعة سطر واحد إلى هذا الملف. كيف لي أن أعرف ذلك؟ حسنا، أنا باستخدام هذه الوظيفة دعا fprintf. جميع الوظائف التي سوف تستخدم عند الكتابة إلى، أو القراءة من أو ومعالجة الملفات تكون مشابهة ل وظائف كنت قد رأيت من قبل، ولكن تبدأ بالحرف F، يقف لملف. وfprintf، خلافا لدينا الطباعة العادية التطبيق، ويأخذ حجة إضافية واحدة، وهذا هو الملف حيث كنت تريد طباعة هذا الخط ل. ليس لدي أي شيء ل حق ohai. ليس لدي الثالث حجة لprintf - أو الوسيطة الثانية إلى printf، و الوسيطة الثالثة إلى fprintf، لأنني ليس لدينا أي النائبة هنا. أنا لا بما في ذلك أي متغيرات. ولكن مرة أخرى، fprintf وجميع هذه الملفات الوظائف التي تعمل مع الملفات تسير عموما في حاجة إلى ملف على التي نعمل. أخيرا، والشيء المهم الماضي ل القيام به هو إغلاق الملف، تماما مثل مع - كلما كنا malloc شيء، نحن نريد لتحرير شيء، خشية أن لديها تسرب الذاكرة - نريد لإغلاق الملف لدينا. إذا خرجت هذا البرنامج دون إغلاق الملف الاحتمالات هي أن لا شيء يذهب خطأ، لا سيما إذا كان وكان ملف صغير. لكنها بالتأكيد أسلوب الترميز جيدة وممارسة لإغلاق الملف الخاص بك دائما عند الانتهاء استخدامه. بحيث هي من أساسيات ملف I / O. ربما كنت قد رأيت ذلك من قبل، أو شاهدت ذلك في هذا قصيرة رائعة. هل لدى أي شخص أي أسئلة، قبل نذهب إلى بعض الممارسات ترميز مشاكل، حول ملف I / O أو الخطوات ذهبت للتو قد انتهت؟ [TYPING وصل مرحلة] JASON هيرشهورن: هل لديك سؤال، آفي؟ AVI: رقم JASON هيرشهورن: OK. انا ذاهب الى الانتظار أخرى سبع ثوان. [ضحك] وهذا هو نصيحة جيدة حقا. يا رفاق لا أحب طرح الأسئلة. هذا شيء طيب. موافق. لذلك لدينا مشكلة الممارسة الأول هو، ونحن الذهاب لتكرار وظيفة أداة سطر الأوامر التي ربما تستخدم من قبل - نسخة - الأداة نسخة. إذا قمت بكتابة حزب المحافظين وتمررها بعد ذلك اثنين الحجج في محطة الخاص بك، يمكنك نسخ ملف. وهذا ما نحن ذاهبون لكتابة الآن. ذلك مرة أخرى، والقراءة الخروج من هذه الشريحة، فما استقاموا لكم فاستقيموا لك لكتابة برنامج يأخذ اثنين واثنين فقط من سطر الأوامر الحجج - ملف المصدر والملف الوجهة - ونسخ محتويات المصدر ملف إلى ملف الوجهة بايت واحد في وقت واحد. ذلك أن الكثير مما تسأل عنه. مرة أخرى، نهجا جيدا لهذا هو ل لا تذهب مباشرة إلى رمز C، ولكن كسرها نزولا إلى بضع خطوات. أولا، والتفكير في المنطق - بالضبط ما أنا أطلب منك أن تفعل - وفهم كل من خطوات لهذه المشكلة. ليس في C، فقط في بعض شبة الكود، أو حتى نموذج العقلية لل ما يحدث. المقبل، وبمجرد الانتهاء من شبة الكود أسفل، معرفة كيفية شبة الكود خرائط على الأدوات والأشياء التي قمت تعلمت استخدام في C. وأخيرا، مرة واحدة لديك كل ما معا، يمكنك رمز المشكلة. يستغرق 5 إلى 10 دقائق ل العمل على هذه المشكلة. أنا وضعت الإرشادات احتياطية في الثانية. ثم ونحن في طريقنا للذهاب أكثر في شبة الكود، ورمز أنه يعيش كمجموعة. إذا كان لديك أي أسئلة في الوقت الذي كنت العمل على هذا، لا تتردد في رفع يدك، وأنا سوف يأتي حول والإجابة عليها. الطالب 7: هل يمكنني انتقاد قطعة من الورق؟ JASON هيرشهورن: ما الأمر؟ [TYPING وصل مرحلة] JASON هيرشهورن: OK. دعونا نذهب أكثر في شبة الكود الأول، و ثم سأعطيك أكثر زوجين دقائق لإنهاء الترميز. أن الذين يحبون لبدء قبالة لي مع السطر الأول من شبة الكود لهذه المهمة؟ الطالب 8: تحقق للتأكد من أن أعطيت لك ملفين. JASON هيرشهورن: OK. وإذا كنا لا؟ الطالب 8: سوف أعود 0. JASON هيرشهورن: هل نعود 0؟ الطالب 8: إرجاع - تقطيع. آسف. JASON هيرشهورن: نعم. ربما لا 0. لأن 0 يعني كل شيء كان جيدا. موافق. لذلك هذا هو السطر الأول من شبة الكود. الذي لديه السطر الثاني من شبة الكود؟ الطالب 9: فتح كل الملفات؟ JASON هيرشهورن: افتح كلا الملفين. موافق؟ طالب 10: تحقق لمعرفة إذا كان الملف هو NULL؟ JASON هيرشهورن: تحقق للتأكد متأكد ولا هي NULL. بوصفها جانبا - خفض 0 - هو أن NULL؟ طالب 11: رقم JASON هيرشهورن: هذا ليس NULL. الذي يسمى فاصل NULL. لقد وردت فعلا مع واحد فقط ل. حتى التحقق شيء ضد ذلك - وهذا في الواقع شخصية - حتى التحقق شيء ضد ذلك و ليس نفس التحقق لمعرفة ما اذا كان يساوي NULL. وبعض الناس - على مسابقات ومشكلتهم مجموعات - قد حصلت على اثنان من تلك الخلط. ولكن اثنين من هؤلاء هم في الواقع مختلفة. واحدة تنتهي سلسلة - واحد هو مؤشر إلى 0. طالب 12: لماذا لا تقوم بالتدقيق ل تأكد من أن الملفات ليست NULL قبل فتحها؟ JASON هيرشهورن: حتى يحفظ مفتوحة شيئا في هذا الملف. وإذا كنت أعود هنا - حتى هذا الخط - FOPEN - سوف أعطيكم عنوان وتخزين هذا العنوان في ملف ما اذا كان يعمل. إذا كان لا يعمل، فإنه سيتم تخزين فارغة - طالب 12: أوه. موافق. حصلت لك. JASON هيرشهورن: في الملف. لذلك لا يمكن أن تحقق لNULL قبل كنت قد فتحت لهم. NULL يعني شيئا لم تعمل بشكل صحيح. موافق. حتى تحقق للتأكد من لا غير؟ أو هي؟ ماذا نفكر؟ سنذهب مع ذلك. طالب 13: هل. JASON هيرشهورن: هل؟ لا هو؟ طالب 13: هل. JASON هيرشهورن: OK. يبدو أننا لدينا بعض توافق في الآراء بشأن ذلك. لا هو NULL. موافق، السطر التالي من شبة الكود. الذي لم يقدم لي خط حتى الآن؟ ونحن سوف ننتظر منك. نعم. طالب 14: لديك لقراءة من الملف الأول؟ JASON هيرشهورن: OK. طالب 14: أو نستخدم أو fscanf شيء من هذا القبيل الملف الأول؟ JASON هيرشهورن: لذلك نحن نريد ل قراءة من الملف الأول و- دعونا نضع هذا الحق هنا. القراءة من الملف المصدر. وبعد ذلك، ماذا نفعل بعد أن قراءة الملف من المصدر؟ شخص آخر؟ طالب 15: اكتب في الملف الوجهة؟ JASON هيرشهورن: نحن نكتب ل الملف الوجهة، و- موافق. ماذا نحن في عداد المفقودين؟ شخص آخر الذي لم يقدم لي سطر من التعليمات البرمجية حتى الآن - من شبة الكود. نعم. طالب 16: ربما يمكنك دائما التحقق ما إذا كان هناك شيء لقراءة ل، مثل السطر التالي؟ التي هي مثل السطر التالي، معرفة ما إذا كان موجودا. [ELECTRONIC BEEP] JASON هيرشهورن: عفوا. هذا البرنامج اليومية بلدي. نعم؟ طالب 16: نعم. JASON هيرشهورن: حتى تعطي لي واحد مزيد من الوقت. طالب 16: تحقق ما إذا كان هناك لا يزال السطر التالي من الملف المصدر للقراءة. JASON هيرشهورن: OK. لذلك نحن لا قراءة خطوط - تم قراءة بايت هنا - ولكن كنت الصحيح. نحن نريد أن القراءة والكتابة حتى لم تكن هناك بايت. موافق. وحتى هذه يجب أن تكون حقا بادئة قليلا، لأنهم تحت هناك. أليس كذلك؟ حتى نحن في الخارج من وحدات البايت، ونحن في طريقنا لل قراءة الملف من المصدر والكتابة إلى الملف الوجهة. ثم، ما هو آخر خط شبة الكود؟ شخص ما الذي لم يعط لي شيئا حتى الآن. طالب 17: إغلاق الملفات؟ JASON هيرشهورن: بالضبط. إغلاق الملفات. ولذلك لا يوجد لدينا شبة الكود. انا ذاهب الى وضع شبة الكود في gedit، وفي بضع دقائق ونحن ورمز هذا معا. موافق. دعونا نبدأ كمجموعة. نيشانت، لدي ملف جديد بلدي. لقد فتحت للتو هذا الأمر. وثيقة بدون عنوان 1. ما هو أول شيء يجب أن أقوم به؟ NISHANT: تضمين المكتبات؟ JASON هيرشهورن: OK. ما المكتبات؟ NISHANT: Stdio.h، stdlib.h، وأعتقد؟ JASON هيرشهورن: OK. ما هو stdlib ل؟ NISHANT: لقد نسيت. JASON هيرشهورن: OK. بحيث تشمل stdio و. ماذا علي أن أفعل حتى قبل أبدأ الترميز؟ NISHANT: كتابة رأس؟ JASON هيرشهورن: كيف يمكنني الحصول عليه الملونة؟ [VOICES فاصلة] NISHANT: كيف تحصل عليه الملونة؟ JASON هيرشهورن: كيف يمكنني تلوين الترميز؟ NISHANT: أنا لا أعرف. اه. حفظ. JASON هيرشهورن: حفظ. نعم. أود أن حفظه كملف. ج. حتى حفظه على سطح المكتب كما cp.c. الحلو. وإذا كنت ترغب في الحصول على نمط كامل نقطة، ما ينبغي لي وتشمل في أعلى؟ NISHANT: هل يمكن كتابة اسمك واسم من البرنامج، والغرض البرنامج كذلك؟ JASON هيرشهورن: تبدو جيدة. ممتازة. لذلك كنت قد بدأت قبالة لنا تماما. وتشمل # - سنقوم أيضا الكتابة - موافق. لذلك أعتقد أنا كل مجموعة للذهاب. الذي لديه السطر الأول من رمز بالنسبة لي - أو الأسطر الأولى من التعليمات البرمجية التي سوف يستغرق لتلبية لدينا أولا التعليق في شبة الكود؟ لك. طالب 18: لا ينبغي أن يكون الباحث ARGC، ثم شار * ARGV؟ JASON هيرشهورن: أعتقد أنت على حق. دعونا تغييره إلى int الرئيسي، PAREN مفتوحة، ARGC كثافة العمليات، فاصلة، تشار * ARGV؟ مثل ذلك؟ طالب 18: بين قوسين. JASON هيرشهورن: بين قوسين. فتح قوس، قوس وثيق، الأم وثيق. الكمال. الآن أستطيع أن تأخذ وسيطات سطر الأوامر. موافق. ضمان نحن تعطى ملفين. هل يمكن ان تعطيني ذلك أيضا. طالب 18: إذا ARGC - هذا واحد لا يساوي 3. JASON هيرشهورن: إذا PAREN مفتوحة ARGC لا يساوي 3؟ طالب 18: نعم، أنت العودة 1 أو أي شيء. JASON هيرشهورن: آسف. طالب 18: 1 العودة أو أي شيء. JASON هيرشهورن: الرجوع 1. موافق؟ عظيم. فتح كل الملفات. الذين يمكن أن تساعد لي فتح كل الملفات؟ الذي لم يقدم لي رمز حتى الآن؟ كورت؟ KURT: لذلك كل مباراة دولية مصدر F-I-L-E نجوم. JASON هيرشهورن: أنا ذاهب لإخراج حروف العلة. تلك هي باردة. انها مثل نعرفكم. طالب 18: يساوي الدالة fopen - JASON هيرشهورن: يساوي الدالة fopen؟ طالب 18: PAREN فتح، ARGV، قوس مفتوح. JASON هيرشهورن: انتظر. آسف. PAREN مفتوحة. موافق. طالب 18: نعم. ARGV الفرعية 1. JASON هيرشهورن: 1 الفرعية؟ طالب 18: نعم. ARGV قوس مفتوح 1 - نعم. ثم فاصلة، ثم فتح مزدوج الاقتباس، ص، اقتباس مزدوجة، PAREN وثيق، منقوطة. JASON هيرشهورن: الحلو. وماذا عن الآخر؟ طالب 18: مشابهة جدا، ولكن بدلا من ذلك من S-R-C، وكنت اسميها D-S-T. JASON هيرشهورن: أوو! أنا أحب ذلك. طالب 18: فقط D-S-T. نعم. ثم ARGV، وقوس فتح، 2. نعم. ثم ث بدلا من ص. نعم. JASON هيرشهورن: العظمى. خطوط القليلة القادمة. أيضا، إذا كان أي شخص لديه أشياء لإضافة ل الخطوط التي قمنا به، لا تتردد في إضافة تلك أيضا. تحقق للتأكد من ليس هو NULL. الذين يمكن أن تعطي لي رمز ولست بحاجة ل تلبية هذا الخط من شبة الكود؟ القوس والنشاب. ARCHER: إذا سرك يساوي يساوي NULL أو يساوي يساوي DST NULL، ثم تعود - JASON هيرشهورن: ماذا؟ ARCHER: العودة 2؟ JASON هيرشهورن: العودة 2. حتى إذا تساوي PAREN مفتوحة سرك يساوي NULL، أو - أيا كان ذلك thing's - الأنابيب؟ الأنابيب؟ سنقوم نسميها الأنابيب. الأنابيب، الأنابيب، DST يساوي يساوي NULL، والعودة 2. موافق؟ حتى نحن في الخارج من وحدات البايت - نحن نوع من تخطي هذه الخطوة أكثر من الجزء شبة الكود للذهاب إلى هنا. ولكن حتى نحن في الخارج من وحدات البايت - ما هذا الصوت مثل؟ ما هو نوع من بنية C - ولكن أنا لا استخدام بنية الكلمة، لأننا في طريقنا للبدء في استخدام أنه في حالات أخرى - ولكن C أداة يفعل ذلك الصوت مثل؟ طالب 19: حلقة. JASON هيرشهورن: حلقة. يبدو وكأنه حلقة. حتى الذين يمكن أن تعطيني السطر الأول من قانون حلقة الحق هنا؟ يمكنك أيضا اختيار أي نوع من حلقة تريد، إذا كنت تعطيني هذا الخط من التعليمات البرمجية. هناك ثلاثة أنواع. تحصل على انتقاء. أود أن أقترح واحد من هؤلاء. افي. أي واحد تريد؟ AVI: FOR. JASON هيرشهورن: FOR. AVI: كثافة العمليات ط يساوي الصفر. JASON هيرشهورن: OK. AVI: هذا الجزء لست متأكدة. ولكن أنا أقل من حجم مصدر نجم؟ لست متأكدا من ذلك. JASON هيرشهورن: OK. AVI: لأنك تريد حجم ملف، أليس كذلك؟ JASON هيرشهورن: ولذلك فإن هذا ربما لن تعطينا حجم الفعلي ملف بالبايت. لذلك ماذا يمكن أن نفعل؟ ما هو نوع آخر من حلقة؟ أو ينبغي أن العصا مع حلقة FOR؟ طالب 20: هل يمكن أن تفعل حلقة في حين؟ ثم، ماذا كنت تفعل هو you'd - لأن لدينا شار * للملف. حتى إذا كنا تبقي فقط أن تزايد حتى كنا نجد الطابع NULL في نهاية لها؟ أو لا، هو أن ليس كيفية عمل الملفات؟ JASON هيرشهورن: حتى نتمكن من الحفاظ على تزايد شار * حتى نجد NULL - طالب 20: أساسا الاستمرار حرف بحرف حتى ضربنا نهاية الملف. JASON هيرشهورن: نعم. وهذا ما نريد أن نفعله. نحن نريد للحفاظ على القراءة، والطابع بواسطة حرف، حتى نصل إلى نهاية الملف. طالب 20: نعم. العثور على - ما هو نهاية أو التوقيع على وقف في نهاية ملف نصي. JASON هيرشهورن: OK. لذلك عندما نصل إلى نهاية الملف - كيف نعرف اننا وصلنا نهاية الملف؟ إذا ادعو - لذلك دعونا خطوة الى الوراء. ما هي وظيفة؟ دعونا نذهب إلى هذا الخط هنا. القراءة من الملف المصدر. الذين يمكن أن تعطيني سطر من التعليمات البرمجية؟ طالب 21: Fscanf؟ JASON هيرشهورن: Fscanf. موافق. ماذا لو أريد أن أقرأ، جدا على وجه التحديد، بايت واحد؟ طالب 21: لا أعرف. JASON هيرشهورن: OK. حتى أبسط من fscanf - ما هو - أريد أن أقرأ من ملف المصدر؟ قراءة من ملف المصدر. ما هي وظيفة - نعم. طالب 22: انها fread؟ JASON هيرشهورن: Fread. أعتقد دعونا العصا مع أن واحدا في الوقت الراهن. أي نوع من الحجج لا تأخذ fread؟ طالب 22: ربما نوع الملف، ثم الموقع في الملف؟ JASON هيرشهورن: ماذا يمكنني أن اكتب هنا لمعرفة ما هو نوع من الحجج fread يأخذ؟ طلاب متعددة: رجل fread. JASON هيرشهورن: رجل fread fwrite و. يبدو أنهم شنق معا. حتى fread يأخذ وكم الحجج؟ طالب 23: أربعة. JASON هيرشهورن: يستغرق أربع حجج. فإنه يأخذ المؤشر، حجم، والتي الشيء الذي هو غريب، وبعض الملفات. موافق؟ دعونا نقرأ عن ذلك الحق هنا. "وظيفة fread يقرأ ن MEMB عناصر البيانات، كل بايت حجم طويلة، من تيار المشار إليه بواسطة تيار، تخزينها في الموقع التي قدمها مؤشر ". لذلك أربع حجج. لماذا لا استطيع مجرد نسخ هذا، والصقه هنا. موافق. حتى الذين يمكن أن تبدأ ملء هذه الحجج بالنسبة لي؟ افي. AVI: إخراج الفراغ. وضعت للتو سرك. إخراج مؤشر والنجم. وضع سرك. ثم - JASON هيرشهورن: لذلك أنا ذاهب لوقف كنت هناك، لأن هذا غير صحيح. أنت على حق مع سرك، ولكن حيث يجب ان تذهب سرك؟ [VOICES فاصلة] JASON هيرشهورن: إنه ينبغي يذهب أكثر من هنا. هذا هو سرك - سرك لدينا هو نوع. دعونا ننظر هنا. هذا يسأل عن نوع FILE *، ونحن في الواقع نرى عادة لهم مثل ذلك. لذلك هذا يسأل عن حجة لل اكتب FILE * دعا تيار وهذا هو سرك. موافق؟ ما هو حجم الأشياء تفعل نحن نريد أن تقرأ؟ أعطيتك هذا في وصف المشكلة. طالب 24: بايت واحد في وقت واحد. JASON هيرشهورن: بايت واحد. كيف كبيرة هو البايت؟ حجمه في بايت، وذلك ما يمكن أن أضع هناك حق؟ طالب 25: واحد. JASON هيرشهورن: واحد. الحق. حجمه في بايت وحدة، حتى 1 هو 1 بايت. وكم لا أريد أن أقرأ في كل مرة. طالب 26: واحد؟ JASON هيرشهورن: شيء واحد. أريد أن أقرأ شيئا واحدا من حجم 1، لدغة واحدة في وقت واحد. وأين يمكنني وضعه، مرة واحدة وأنا أقرأ ذلك؟ طالب 27: الوجهة؟ JASON هيرشهورن: حتى أنا لا يمكن وضع فإنه مباشرة إلى الوجهة. طالب 28: أنت كنت gonna وضع قبل أن تتحول إلى مؤشر ثالث؟ طالب 27: إلى الوجهة. JASON هيرشهورن: OK. نعم. طالب 29: يمكنك أن تعلن شيئا ل بمثابة التخزين المؤقت في وقت سابق. JASON هيرشهورن: OK. أعطني ذلك. طالب 29: ملف آخر المؤشر، ربما؟ JASON هيرشهورن: OK. لذلك هذا هو نجمة الفراغ - انها نوع الفراغ نجمة، لذلك لا يجب أن يكون مؤشر الملف. وإذا أنا قراءة بايت واحد، حيث سيكون مكان جيد لتخزين بايت واحد؟ طالب 29: مجموعة؟ JASON هيرشهورن: صفيف. موافق. وما هو آخر شيء أن يكون فقط حجم بايت واحد؟ الطالب (30): أ شار *؟ طالب 29: نعم. JASON هيرشهورن: A شار * ليس بايت واحد. الطالب (29): أ شار. JASON هيرشهورن: A شار هو بايت واحد. أليس كذلك؟ لذلك دعونا نطلق على هذا المخزن هو عام الاسم المستخدم لهذه الأشياء لتخزين شيئا مؤقتا. لذلك أنا خلق منطقة عازلة. أليس كذلك؟ ولكنها لا تأخذ فراغا *. لذلك ربما كنت على حق، وأنه يجب أن تكون منطقة عازلة حجم 0. ذلك أنه يخزن واحد - الحق. لأن هذا الحق هنا - شار المخزن المؤقت حرف، ولكن هذا يستغرق فراغا * - مؤشر. حتى أتمكن من القيام بذلك، والآن العازلة هو مؤشر. ماذا يمكن أن أفعل؟ طالب 31: وضع نجمة بجانب شار. JASON هيرشهورن: أستطع وقد إنشاؤه شار *. موافق. ما هو آخر شيء يمكن أن أفعله؟ أو دعونا نذهب مع هذا واحد. تشار * العازلة، وذلك ما أضع هنا؟ طالب 31: المخزن المؤقت. JASON هيرشهورن: المخزن المؤقت. العازلة هو مؤشر إلى شار. وفي هذا الموقع، نحن نضع بايت واحد لشيء ونحن قد قرأت. نعم. افي. AVI: مجرد سؤال سريع. هل تريد أن malloc العازلة؟ JASON هيرشهورن: من يستطيع الإجابة على هذا السؤال؟ طالب 32: حسنا، لا حقا أشر إلى أي شيء الآن، لذلك - JASON هيرشهورن: ولكن هل نحن نريد أن malloc ذلك؟ طالب 32: لو كنت لتفعل ذلك أن الطريقة، أعتقد، نعم، لأنك كنت بحاجة بعض مكان لذلك للإشارة إلى. JASON هيرشهورن: هل نحن يجب أن malloc ذلك؟ الطالب (33): إذا كنت تريد الذهاب ل استخدامه خارج الحلقة. JASON هيرشهورن: هل نحن ذاهبون ل استخدامها خارج من الحلقة؟ طالب 34: نعم. الطالب (35): انتظر. لا نريد أن نعلن ذلك في حلقة لبعده؟ JASON هيرشهورن: لذا أعتقد لدينا بعض الزائفة بينما حلقة هنا أننا في محاولة لمعرفة، أن نحن لم نصل الى حتى الان. نحن لسنا بحاجة إلى malloc ذلك. نحن نعمل في الرئيسي، انه سيكون فقط ليتم استخدامها داخل هذه الحلقة. فإنه لا يحتاج إلى وجود خارج هذا. لذلك يمكن أن يكون متغير محلي. لديك مؤشر ل متغير محلي. طالب 36: ولكنها ليست مشيرا إلى أي شيء. JASON هيرشهورن: لا، انها ليست تهيئة إلى أي شيء. لكننا لن استخدامه أيضا. ونحن في طريقنا إلى وضع شيء في هذه هي المرة الأولى نستخدمها. بحيث يبدو موافق. لذلك نحن لسنا بحاجة malloc هنا. واعتقد انه موافق كما هو. موافق. لدينا خط fread. دعونا نفعل السطر التالي. إذا كنا نريد أن الكتابة إلى ملف، ما هو وظيفة جيدة لاستخدامها للقيام بذلك؟ طالب 37: Fwrite؟ طالب 38: Fprintf؟ JASON هيرشهورن: Fprintf واحد. ما هو واحد آخر؟ طالب 39: Fwrite. JASON هيرشهورن: Fwrite. وأغراضنا، fwrite، الذي رأيناه هنا، هو ربما كان الخيار الأفضل. يستغرق أربع حجج كذلك. نيشانت، يمكنك ان تعطي لي الحجج؟ NISHANT: الجارية أول واحد لتكون عازلة فقط. JASON هيرشهورن: OK. NISHANT: واحد ثاني فقط ستكون 1. ثلث ستكون 1. وربع ستكون DST. JASON هيرشهورن: هل لدى أي شخص أي أسئلة حول هذا الخط؟ التي تبدو جيدة. موافق. وحتى الآن يبدو أن شيئا واحدا نحن في عداد المفقودين - في الواقع، دعونا إرسال هذا السطر الأخير. إغلاق الملفات. الذين يمكن الانتهاء من الكتابة لنا هذه الخطوط الماضيين؟ نعم. آسف، ما هو اسمك؟ لوسي: لوسي. JASON هيرشهورن: لوسي. لوسي: سرك Fclose ثم الوجهة fclose. JASON هيرشهورن: Fclose، PAREN مفتوحة، سرك، PAREN وثيق، منقوطة. وfclose - نعم؟ لوسي: فتح قوسين، DST ثم منقوطة. JASON هيرشهورن: العظمى. وماذا ينبغي أن تشمل في نهاية المطاف؟ لوسي: 0 العودة. JASON هيرشهورن: العودة 0. لا بد لي من؟ مجرد سؤال. هل لدينا لتشمل عودة 0؟ طلاب متعددة: رقم JASON هيرشهورن: رقم الرئيسية يفعل تلقائيا إذا كنت تحصل على النهاية. ولكن أعتقد أنه من الجيد أن وتشمل بشكل صريح. وخصوصا عندما نقوم عودته أخرى الأشياء في جميع أنحاء البرنامج. موافق. وهذا هو ما نفتقده - بينما ما؟ الذين يمكن أن نفكر في بعض - لديه بعض الشعور ما هي الأشياء يمكن أن تذهب إلى هناك؟ حتى لو كان فقط في بعض شبة الكود مثل اللغة؟ ما نحن حقا - ما لا نريد أن نذهب حتى؟ نعم، لوسي. لوسي: نهاية الملف. JASON هيرشهورن: نهاية الملف. فماذا تقصد نهاية الملف؟ لوسي: مرة واحدة تصل إلى نهاية الملف، ووقف. JASON هيرشهورن: OK. ذلك مرة واحدة نصل إلى نهاية الملف. كيف لنا أن نعرف أننا عندما وصلنا نهاية الملف؟ طالب 40: أعتقد العازلة سيتم تعيين إلى NULL. الطالب (41): يعلن العازلة داخل الحلقة. JASON هيرشهورن: لذا كنت تعتقد سيتم تعيين عازلة لNULL. لماذا العازلة يتم تعيين إلى NULL؟ طالب 40: لأن عند fread، كنت في محاولة لوضع لا شيء في المخزن المؤقت. JASON هيرشهورن: OK. لذلك كنت أفكر fread - عندما كنا قد وصلنا إلى نهاية ملف، ما fread تنوي القيام به؟ أعتقد أن هذا السؤال لدينا لمعرفة. ماذا fread تفعل؟ هل وضع NULL في المخزن، أو يفعل شيئا آخر؟ كيف يمكننا معرفة ماذا ذلك؟ طالب 42: رجل. JASON هيرشهورن: رجل. لذلك دعونا ننظر هنا. العودة القيمة. على النجاح، وfread fwrite العودة عدد من العناصر للقراءة أو الكتابة. هذا العدد يساوي عدد البايتات نقل فقط عندما حجم هو 1. في حالة حدوث خطأ، أو نهاية يتم التوصل الملف، قيمة الإرجاع هو العد البند قصيرة أو 0. لذلك لأغراضنا، إذا الروافد fread في نهاية الملف، ويقرأ من نهاية الملف، لا يوجد شيء ترك لقراءة ما تسير الأمور في العودة؟ طالب 43: صفر؟ JASON هيرشهورن: ماذا؟ طالب 43: صفر؟ JASON هيرشهورن: صفر. انها تسير لإرجاع صفر. لذلك نحن نعرف أن fread، عندما قمنا وصلت إلى نهاية الملف، يجري لإرجاع صفر. كيف يمكننا استخدام ذلك لصالحنا؟ AVI: يمكنك تعريف متغير خارج من حلقة تسمى الاختيار. إذا الاختيار يساوي - في الوقت الراهن - واحد. JASON هيرشهورن: OK. AVI: وبعد ذلك يمكنك وضع IF بيان الحق بعد fread قائلا إذا fread يساوي صفر - لا. JASON هيرشهورن: من يمكن أن تساعد آفي بها؟ AVI: ما هي القيمة عاد قبل fread؟ JASON هيرشهورن: نحن فقط ذهبت أكثر من ذلك. AVI: كيف تمثل ذلك؟ JASON هيرشهورن: لذا فإنه يعود - دعنا تبدو هنا - تقوم بإرجاع size_t، والتي هي في جوهرها عدد صحيح. لذلك بإرجاع عدد صحيح. وفي حالتنا، وسوف العودة 1 أو 0 - 1 إذا كان يقرأ شيئا واحدا - بايت واحد، و0 إذا أننا وصلنا إلى نهاية. حتى إذا fread - نعم؟ طالب 45: لا يمكن أن مجرد وضع كامل fread (العازلة، 1، 1، SRC) في في حين حلقة؟ JASON هيرشهورن: إذن أنت تقترح القيام بذلك في هناك؟ [VOICES فاصلة] JASON هيرشهورن: انتظر. لذلك نحن تخليص من ذلك. لذلك كنت تقترح وضع fread إلى هناك؟ ما ينبغي أن نتحرك إذا كنت تريد أن تفعل ذلك؟ طالب 45: المخزن المؤقت خارج. JASON هيرشهورن: نحن ينبغي كما نقل هذا هنا. طالب 45: ولكن يفعل ذلك باستمرار التحرك إلى الأمام؟ [VOICES فاصلة] JASON هيرشهورن: OK. لذلك هذا هو ما اقترحه Okshar. نخلق عازلة لدينا. علينا أثناء وجوده fread، فإننا fwrite. أفكار حول هذا؟ طالب 46: سؤالي الوحيد هو، من شأنه فعلا تنفيذ fread الأمر؟ JASON هيرشهورن: السؤال الكبير. عندما كنت وضع مكالمة ظيفة من داخل الشرط، يفعل ذلك استدعاء دالة تنفيذ؟ شاهدنا أمثلة على هذا من قبل. أليس كذلك؟ طالب 46: OK. نعم. لذلك لا تنفيذ. JASON هيرشهورن: لقد رأيت أشياء مثل ذلك من قبل، حيث لدينا استدعاء دالة داخل شرط. لا تنفيذ تلك الدعوة وظيفة؟ نعم. وبالتالي فإن الجواب هو نعم. وهذه الدعوة وظيفة تنفيذ. ولكن مرة أخرى، هو ما نريد؟ ما هي طريقة واحدة يمكننا أن الرقم ما إذا كان هذا ما نريد؟ طلاب متعددة: تشغيل ذلك؟ JASON هيرشهورن: نحن يمكن تشغيله. ولكن قبل ان نفعل ذلك، ونحن يمكن أن أيضا من خلال هذا العقل. إذا - نقول لدينا بايت واحد في منطقتنا ملف، ونحن سنصل إلى هنا، أننا سنصل إلى هذا الرمز. وهذا تشغيل. fread سيعود بايت واحد و تخزينها في المخزن المؤقت. وهذا سوف تقيم ل1، الحق، بعد عودته 1. وذلك في حين 1. يعني ذلك التعليمات البرمجية داخل سوف حلقة في حين تنفيذ؟ طالب 47: نعم. هذا صحيح. JASON هيرشهورن: نعم. 1 صحيح. انها ليست 0. وبالتالي فإن التعليمات البرمجية داخل هنا سيتم تنفيذ. ولذا فإننا سوف أكتب ذلك. سوف نمضي إلى هذا الخط مرة أخرى. الآن لدينا - نحن في نهاية الملف لدينا. نقرأ من نهاية الملف لدينا، لأننا فقط كان بايت واحد في ذلك. Fread بإرجاع 0، ومخازن شيء في المخزن. أنا بصراحة لا أعرف ما فإنه يخزن في المخزن. أننا ربما يمكن البحث عن لنرى ماذا يفعل. أنني بصراحة لا أعرف. نحن لا نعرف، ما الذي يهتم فإنه يخزن في المخزن؟ لكنه يعود 0. وسوف حين 0 تنفيذ؟ بينما سوف يتم تنفيذ 0. حتى ذلك الحين سوف ننتقل إلى هنا. لذلك دعونا الحصول على الأيدي إذا كان هذا هو رمز يجب علينا أن تشغيل، أو إذا كنا ينبغي أن تفعل التغيرات الأول. لذلك إذا كنت تعتقد - أن يكون لديك في التصويت. إذا كنت تعتقد أننا يجب أن تشغيل هذه التعليمات البرمجية كما هو، الرجاء رفع يدك. موافق. هناك واحد - هل لديك سؤال، القلق؟ نعم. طالب 48: بعد أن ننتقل العازلة خارج الحلقة، هل نحن يجب أن malloc ذلك؟ JASON هيرشهورن: السؤال الكبير. بعد ننتقل العازلة خارج حلقة، يجب علينا أن malloc ذلك؟ هذا هو السؤال النطاق. إذا كنا تهيئة العازلة خارج من هذه الحلقة، وانها موجودة داخل حلقة؟ طلاب متعددة: نعم. JASON هيرشهورن: نعم. ويغطي نطاقها داخل الحلقة، و، حقا، أي شيء أقل من ذلك داخل من هذا القانون، بما في ذلك الأمور داخل هنا. لذلك نحن لسنا بحاجة إلى malloc ذلك. انها متغير محلي، ونطاقه لا تزال تتضمن الحلقة. طالب 49: هل نحن بحاجة إلى تحريرها؟ JASON هيرشهورن: هل نحن تحتاج إلى عازلة خالية؟ طالب 49: نعم، إذا لم نفعل ذلك malloc. JASON هيرشهورن: هل نحن تحتاج إلى عازلة خالية؟ لم نفعل ذلك. مرة أخرى، بل هو متغير محلي، لذلك نحن لسنا بحاجة لتحريره. موافق. دعونا نرى ما سيحدث. ولذلك فمن غير مهيأ. كان ذلك ما شيء اقترح ماركوس في وقت سابق. لذلك لدينا هذا الخطأ، عازلة متغير غير مهيأ عند استخدامها هنا. كيف يمكننا إصلاح هذا؟ طالب 50: Malloc ذلك؟ طالب 51: يساوي NULL؟ طالب 52: قل العازلة يساوي NULL. JASON هيرشهورن: OK. تبدو جيدة. لدينا الآن. دعونا خلق شيء لمحاولة النسخ. لذلك لدينا ملف نصي لدينا. كيف يمكننا تشغيل هذا البرنامج؟ نعم. طالب 53: يمكنك أن تفعل نقطة خفض حزب المحافظين، TEST.TXT. ثم يمكنك تسمية ملف آخر الذي سيخزن فيه. JASON هيرشهورن: OK. سنقوم نسميها out.txt. بارد؟ خطأ ثوانى. أفكار على خطأ ثوانى؟ هذا شيء عظيم. كيف يمكننا معرفة أين خطأ ثوانى هو؟ ماذا؟ طالب 54: سندات التنمية الحكومية. JASON هيرشهورن: سندات التنمية الحكومية. نحن تشغيل جدب جدب نقطة من خلال كتابة مائلة، اسم برنامجنا. بدون وسائط سطر الأوامر هناك. ونحن في طريقنا لتعيين نقطة توقف في الرئيسية. إذا كنت تريد أن تبدأ جدب، ماذا أفعل؟ طالب 55: R. JASON هيرشهورن: R. وماذا بعد ذلك؟ طالب 55: الحجج؟ JASON هيرشهورن: ثم وسائط سطر الأوامر. دعونا من خلال المشي. N هو مجرد أخذ مني سطرا سطرا. انا ذاهب للذهاب حتى أحصل على خطأي ثوانى. ليس هناك خطأي ثوانى. يبدو fread تسبب خطأي ثوانى. وأنا أعلم سبب fread خطأي ثوانى، لأن ذلك كان الخط الذي أعدم للتو. والشيء الوحيد الذي كان يحدث في هذا الخط - تم أمرين يحدث. Fread كان يحدث، ومن ثم كنا القيام ببعض التدقيق الوقت. أنا على استعداد للمراهنة على أن في حين أن التحقق وعدم التسبب خطأي ثوانى. على الأرجح، كان fread تسبب خطأي ثوانى. وأود أيضا أن نرى شيئا هنا، memcopy. ذاكرة نسخة. يبدو وكأنه يتحرك من الذاكرة موقع واحد إلى آخر. يبدو وكأنه شيء من شأنه أن يحدث في fread، وربما بعض الذاكرة الانتقال من هنا إلى هنا. دعنا نذهب من خلال هذا مرة أخرى. كيف يمكنني تشغيله على وتشغيله مرة أخرى؟ نعم. طالب 56: هل تحتاج إلى وضع العطف قبل العازلة؟ JASON هيرشهورن: حتى قبل الضم سوف عازلة تعطيني عنوان العازلة، وهو شار *. دعونا من خلال تشغيل هذا مرة واحدة أكثر من ذلك. كيف أقوم بتشغيل واحد من خلال ذلك مزيدا من الوقت؟ طالب 57: يمكنك فقط اكتب تشغيل مرة أخرى؟ JASON هيرشهورن: اكتب فقط تشغيل مرة أخرى. لذلك نحن لن تنفيذ هذا الخط. لذلك عازلة هو مؤشر NULL. تصحيح؟ فإنه يشير إلى - دعونا نرى. اذا كان لدينا لدينا - رسم صورة سريعة عن هذا. يمكن معرفة ما إذا كان الجميع أنا أكتب هنا؟ حتى في المكدس، لدينا المحلية متغير وانه دعا العازلة، و انها مؤشر إلى شار. ما هو عنوان هذا شار في؟ طالب 58: 0X0. JASON هيرشهورن: الحق. هذا ما هو هذا. هنا، داخل المخزن، يتم تخزين 0X0. هذا ما لدينا - و الإعداد لدينا في الوقت الحالي. لذلك هذا الخط، fread، ويضع شيئا من مصدر أين؟ في هذا الإطار أو هذا المربع؟ مربع التي؟ مربع أو مربع اليمين واليسار؟ هذا المربع الصحيح. ويترتب على المؤشر، ويضعه في هنا. عندما نحاول والذاكرة التي تعمل باللمس في 0 موقع، ماذا حصلنا عليه؟ وهناك خطأ تجزئة. هذا هو الخطأ لدينا الآن. نعم. طالب 59: لا يكون لديك لوضع العازلة نجمة؟ أو لا؟ لfread؟ JASON هيرشهورن: fread ذلك يأخذ المؤشر. لذلك يمر في المنطقة العازلة. وبعد ذلك سوف اجتثاث المرجعية في مكان ما داخل fread. ولكن مرة أخرى، رأينا، فإنه يأخذ المؤشر. نحن لا نحتاج الى نقله عازلة نجوم. التي ستمر ذلك كل ما هو هنا. والتي ربما تعطينا خطأ لأننا اجتثاث الرجوع إليها. أليس كذلك؟ عندما كنا إلغاء مرجعية هذا المؤشر، عندما ونحن نحاول الوصول إلى هذا الموقع، نحن نحصل على خطأ - خطأ تجزئة لدينا. لذلك - عفوا. ونحن في طريقنا لإنهاء من جدب. لدينا خط - مشكلتنا - هو الحق هنا على هذا الخط. وانها مشكلة ل من هذا الخط. كيف يمكننا أن إنشاء مربع يمكن الوصول إليها في fread. أليس كذلك؟ نحن بحاجة إلى إنشاء مربع واحد بايت كبيرة، حجم شار. لكننا نحتاج أن مربع لتكون في متناول عند تنفيذ هذه المهمة. فأين - نعم. أي أفكار؟ طالب 60: مجرد تعيينه أي حرف عشوائي. مجرد القيام متساوين عازلة شار الحرف. وبعد ذلك، عندما يكون لديك العازلة هناك - JASON هيرشهورن: انتظر. شار العازلة؟ لذلك لا نجمة؟ طالب 60: نعم. إخراج نجوم. يساوي حرف عشوائي. JASON هيرشهورن: OK. حتى تعطي لي واحد. طالب 60: مثل أو شيء من هذا. ومن ثم عندما يكون لديك العازلة هناك، كنت تستخدم - طالب 61: النجم؟ أوه لا، والعطف. طالب 60: استخدام العطف. JASON هيرشهورن: OK. وماذا عن في fwrite؟ طالب 60: استخدام العطف مرة أخرى. JASON هيرشهورن: حسنا. حتى فكرتك، ونحن إنشاء شار و وضع شيء في ذلك، ثم الكتابة على هذا شار. طالب 60: نعم. JASON هيرشهورن: ما يفكر الناس؟ طالب 62: هو الملتوية و. JASON هيرشهورن: OK. دعونا استدراجه للخروج. وحتى هذا الوقت، وأنا ذاهب إلى رسم هذا في أحمر على كومة هنا، ومن ثم نحن سيكون لديك - أوه! آسف. وحتى هذا الوقت لدينا شيء يسمى العازلة، وانها على المكدس. تصحيح؟ ونحن الادخار في ذلك لذلك، في البداية. ثم لدينا دعوتنا إلى fread. ما fread لا يتم يستغرق بايت من ملف ويضعه في مكان ما لدينا. فإنه يضعه في أيا كانت انها لافتا إلى شيء. كذلك، كان لدينا قبل هذا العنوان - 0X0. الآن ما عنوان لدينا؟ طالب 63: مهما عنوان المخزن المؤقت. JASON هيرشهورن: أيا كان عنوان المخزن المؤقت. انه سيكون على الارجح أن تكون شيء من هذا القبيل. ربما سوف تبدأ ب و وو، وبعد ذلك ستة أخرى أرقام ست عشرية. لا يهم. بعض العناوين. ونحن تمرير هذا العنوان فيها ونحن في طريقنا إلى وضع واحد لدينا الشيء بايت في هذا العنوان. لذلك نحن ذاهبون لوضع واحد لدينا الشيء بايت داخل هنا. ثم نحن ذاهبون الى الكتابة من ما من أي وقت مضى داخل هنا. هل لدى أي شخص أي أسئلة عن ذلك؟ الذي يعتقد أن هذا الرمز يعمل؟ ارفع يدك إذا كنت تعتقد وسوف يعمل هذا الرمز. عليك أن تأخذ موقفا. والذي يعتقد أن هذا الرمز لا يعمل؟ ارفع يدك. الجميع يجب أن يكون رفع أيديهم. موافق. مايكل، أين أنت واقفا؟ مايكل: لا أستطيع أن تقرر. نوع من في الوسط. JASON هيرشهورن: أنت في الوسط. اختيار واحد. مايكل: سآخذ الإيمان ويقول أنه سوف يعمل. JASON هيرشهورن: OK. سيكون لديك الإيمان ويقولون انه يعمل؟ ماذا حدث؟ [VOICES فاصلة] JASON هيرشهورن: لا خطأ ثوانى. كيف يمكننا أن تحقق لمعرفة ما إذا كان شيئين متساوون؟ ملفين متساوون. طالب 64: الفرق. JASON هيرشهورن: الفرق. الشيكات فرق للفروق بين ملفين، واذا عاد لا شيء، وانهم متطابقة. وإذا كان لنا أن تفتح، وحصلنا على الملف لدينا. لذلك كان على أن الحل الصحيح. دعونا ننظر إلى الوراء في واحدة لمزيد من الوقت. فعلنا في الواقع ليست حتى تحتاج إلى تهيئة ذلك. ربما تبدو قليلا أنظف إذا كنت لم يضع شيء عشوائي في هناك. والفكرة في ذلك، كنت في حاجة إلى خلق بعض المساحة لتخزين شيء من fread وتأخذ شيئا من fwrite. وهذا الشيء يجب أن تكون إما محلية المتغير على المكدس - كنت يمكن لقد malloc'd بعض المساحة. لذلك نحن في الواقع يمكن أن يكون malloc مكتوب هنا، و التي من شأنها أن عملوا. وبعد ذلك يكون قد تم تخزين لدينا أشياء في مكان ما على الكومة. ولكن هذا هو الواقع، على الأرجح، الحل الأكثر أناقة. مجرد خلق بعض المساحة على المكدس لهذه الأشياء أن يذهب. كنت أود أن يكون اثنين من التعليقات الأخرى. لو كنت لتأخذ بدورها في هذا، و ثم الحصول على سجل على هذا، تعليقاتي سيكون على النحو التالي. 1 هذه هنا، بالنسبة لي، تبدو مثل أرقام السحر. هذا 1، من حيث fread، من المنطقي. هذا هو عدد من الأمور لقراءة أو الكتابة. ولكن هذا الحق واحد هنا ينبغي ربما يكون شيئا آخر. فما هو حل واحد؟ طالب 65: حجم بايت. JASON هيرشهورن: أحب ذلك؟ طالب 65: حجم شار. JASON هيرشهورن: حجم شار. نعم، البايت ليس النوع. حتى حجم أعمال شار. أننا يمكن أن يكون، في أعلى رمز لنا، # تعريف ذلك. ودعا شيء BYTE و انها حقا شار. في الواقع، وهو نهج أفضل ربما كان هذا - UINT. أحد يعرف ما هو هذا؟ آسف. لدي الوراء. الانتظار، لا. ما هو الطريق الذي لا يذهب؟ أحد يعرف ما هو هذا؟ نعم. طالب 67: من المفترض أن تساعد في توحيد عبر أشياء الأنظمة التي ديك - مثل الأعداد الصحيحة غير الموقعة التي لديها 8 بايت؟ JASON هيرشهورن: هذا صحيح تماما. على آلات مختلفة، حجم شار - لا عادة شار. حرف وعادة ما تكون بايت واحد. ولكن حجم أنواع البيانات الأخرى أحجام مختلفة على جهاز 32 بت مقابل جهاز 64 بت. A uint8_t دائما 8 بت - دائما بايت واحد. ولست بحاجة إلى أن تشمل معيار ملف الرأس الباحث. وحتى الآن، وهذا من شأنه أن ربما كان أفضل طريقة لكتابة هذا الرمز. حتى أتخلص من الأرقام السحرية. وأود أيضا أن يكون أكثر منطقية اكتب لعازلة. انها ليست مجرد حرف، فمن بايت، وهو ما نتوقع أن يكون. وهنا، لدينا في الواقع كان قليلا أكثر قوة. نحن لا نتحدث عن شار، والتي - ربما، من يدري - قد تكون مختلفة حجم على أجهزة مختلفة. نقوله في الواقع هذا هو بالضبط بايت واحد، ودائما، مهما كانت. وإذا نظرنا هنا، ونحن جعل حزب المحافظين. اه اه. ماذا حدث؟ طالب 68: قد يتم تشغيله. JASON هيرشهورن: ماذا؟ طالب 69: هل هو؟ طالب 70: أنت لم تعريفه كنوع. طالب 71: ولكن ينبغي يتم تعريفها في المعيار. طالب 72: ما الذي يحدث؟ طالب 73: يجب أن يكون تعريف كل مباراة دولية؟ JASON هيرشهورن: حتى انها ليست تعريف #. في الواقع، في هذه الحالة، وأنا تنوي استخدام الرموز المميزة ل typedef. لأننا باستخدام بأنها نوع في مكان واحد. حتى في هذه الحالة، ونحن نريد فعلا ل typedef وكأننا الطباعة نوع جديد بايت، وأنه هو، أساسا، هذا. انها مختلفة قليلا من تعريف #. والآن، لدينا رمز يعمل تماما. لذلك، مرة أخرى، تعريف # يأخذ شيئا، يستبدلها في كل مكان مع شيء آخر. انها مجرد ماكرو - الاختزال للتخلص من الأرقام السحرية. ولكن في هذه الحالة، لأننا استخدامه كنوع - الحق هنا - من أجل أن للعمل، ونحن بحاجة لtypedef ومهما بايت. ونحن تحديده هنا. انها ليست البنية، انها فعلا مجرد عدد صحيح غير الموقعة. انها بايت واحد طويل. وسوف يكون هذا الرمز على شبكة الإنترنت، و لكم جميعا ينبغي أن يكون عليه الآن. لذلك لدينا - الكمال - غادر 13 دقيقة للذهاب المشكلة عبر تعيين 5. أريد أن المشي من خلال copy.c معا، ثم سنتحدث بإيجاز حول أجزاء أخرى المشكلة تعيين. لذلك اسمحوا لي سحب ما يصل copy.c. والشيء هو بارد، لدينا في الواقع كتبت بالفعل الكثير من هذه التعليمات البرمجية. رمز كتبنا حرفيا فقط خرجت من هنا عندما كان عمري أكتب هذا لوحدي. ولكن هذا هو copy.c، تشكل الأساس لأول جزأين من المشكلة المحددة لwhodunit.c، التي تحتاج إلى كتابة، وresize.c. Recover.c، وهو الثالث والأخير جزء من مجموعة المشكلة، ليس يستند الخروج من هذا الملف. كنت بحاجة الى الذهاب الى إرسال هذا الملف، نقدم لكم قالب لذلك ملف، لكنه لا يملك شيئا علاقة copy.c. ولكن بسبب copy.c هو الأساس ل أول جزأين، ونحن في طريقنا من خلال المشي عليه الآن، لذلك لديك شعور جيد من ما تقوم به. وتعليقات إعطاء بعض منه بعيدا. لقد كتبت بالفعل بعض من هذا. أولا، نحن والتأكد من نحصل على ثلاث حجج. المقبل، ونحن نتذكر اسم الملف. لذلك نحن تخطي هذه الخطوة عندما نحن لدينا شيء مشفرة - عند حزب المحافظين لدينا. ولكن هنا، انهم يرتكبون أنه أنظف قليلا. انهم فحص للتأكد من كلا الملفين جيدة، في بالإضافة إلى فتحها. كتبنا عن هذا الرمز فقط الآن، لذلك أنا لن أسهب في الحديث عن هذا الرمز. التالية هي بعض الاشياء التي لمحددة ل أنواع الملفات نستخدمه، والتي هي ملفات الصور النقطية. ملفات الصور النقطية لدينا بعض البيانات الوصفية المرتبطة بها. وبالتالي فإن أول زوجين من البايت اقول لكم عن الملف. فهي ليست ألوان بكسل في تلك الصورة. يقولون لك حول الملف. وإذا كنت تقرأ من خلال مجموعة مشكلة، سيكون لديك المزيد من المعلومات على ما هي أنواع الهياكل الفوقية ترفق مع الصور النقطية. ولكن هذا هو السبب لدينا هذا أولا مجموعة من - هذا الرمز هنا. نحن قراءة البيانات الوصفية - قطعتين من البيانات الوصفية - الملف رأس ورأس من المعلومات. ونحن فحص بعض أجزاء منه ل تأكد من أنه هو ملف النقطية الحقيقية قبل المتابعة. ومرة أخرى، وهذه هي التفاصيل نحن لا تحتاج للذهاب الى الآن. إذا كنت تقرأ من خلال مجموعة مشكلة، سوف تفهم هذه. قصة قصيرة طويلة، وهذه هي مجرد القول، هذا هو ملف النقطية، و يؤكد ذلك. المقبل، ونحن نكتب تلك إلى ملف خارج. ونحن نرى ذلك هنا. نكتب إلى مؤشر للخروج. المقبل، ونحن تحديد الحشو. ذلك مرة أخرى، كما هو خصوصية مع ملف النقطية، وتشمل بعض الخطوط الحشو في نهاية المطاف. وإذا كنت تقرأ من خلال مجموعة مشكلة، عليك معرفة المزيد عن الحشو. هذه هي الصيغة لإيجاد الحشو. المهم أن نتذكر - عند تغيير حجم صورة نقطية ملف، التغييرات الحشو. عند تغيير حجم ملف، التغييرات الحشو. انها لن تكون أكبر من 3 - أنه سوف يكون من 0 إلى 3، ضمنا. ولكن عند تغيير حجم شيء، يتغير الحشو. إذا ليس لدي سوى بكسل واحد في هذا الصف، وأنا نحتاج إلى ثلاثة بايت من الحشو، وذلك لأن كل صف يجب أن يكون مضاعفات الأربعة بايت في ملف الصورة النقطية. ولكن إذا أنا عليه مرتين، للانتقال من بكسل واحد لاثنين بكسل، كل واحدة منها، دعنا نقول، هو بايت، ثم أحتاج وحدتي بايت من الحشو لجعل أن يساوي أربعة. لذلك عندما أقوم بتغيير حجم شيء، ولست بحاجة إلى تغيير مقدار من الحشو لدي. فهل هذا يعقل أن الجميع؟ المقبل، ونحن تكرار عبر كل صف، أو من خلال كافة الصفوف. وبعد ذلك من خلال تكرار كل عمود في كل صف. ونحن نتعامل مع هذه الصورة النقطية مثل شبكة، وكأننا قد تعامل المجلس في 15. كنا نعامل مثل الطوب عندما نحن المطبوعة لهم على الشاشة. شبكة من الصفوف والأعمدة. ثم - رأينا هذا. ونحن في الواقع مشفرة هذا فقط. أنشأنا بعض التخزين المؤقت. نقرأ في هناك، ثم نكتب بها. هذا هو بالضبط ما فعلناه للتو. المقبل، لأني قلت كل سطر ينتهي في بعض الحشو، ونحن تخطي أن الحشو - الحشو القديم. ثم نضيف عليه مرة أخرى. في هذه الحالة، ونحن بصدد إنشاء نفس الملف بالضبط. نحن فقط نسخها. ولذلك فإن هذا الخط هو نوع من سخيفة. نستطيع حرفيا فقط وضع الحشو فيها. ولكن إذا قمت بتغيير حجم الملف، هل لا تزال تريد هذا الخط؟ لذلك إذا كنا نريد تغيير حجم الملف، أننا لا تزال ترغب في تخطي على الحشو القديم؟ طالب 74: نعم. JASON هيرشهورن: هكذا نفعل. لأن هذا، مرة أخرى، ويتناول مع الملف المصدر. نحن لا نهتم الحشو من الملف المصدر. نريد أن نذهب إلى السطر التالي. لكننا لا ببساطة العودة كمية من الحشو القديم. نحن بحاجة إلى اعادة وضع كمية جديدة من الحشو. لذلك عندما نقوم بتغيير حجم ملف، ونحن لا تزال ترغب في تخطي الحشو في الملف القديم - ما نحن من القراءة في. ولكن ما نقوم الكتابة إلى، ونحن في طريقنا في حاجة لاعادة وضع بعض مختلفة عدد من الحشو التي لقد تحديدها. نعم. طالب 75: ترتيب هذين خطوط لا يهم، أليس كذلك؟ لأنك التعامل مع مختلف الملفات. JASON هيرشهورن: بالضبط. ترتيب هذين الخطين لا يهم. نكتب هذا الخط. هذا هو هنا لملف نحن لكتابة. هذا أمر مهم، لذلك نحصل على كمية مناسبة من الحشو. هذا لا بد أن تتعامل مع الملف في. نحن نريد لتخطي الحق على الحشو. نحن لا نريد لقراءة - إذا نحن قراءة بايت في كل مرة، ونحن لا يهتمون تلك بايت الحشو. نحن نريد للانتقال إلى السطر التالي. أخيرا مثلما أعطى لوسي بالنسبة لنا، نغلق الملفات والعودة 0. لذلك هذا هو copy.c. ونحن في الواقع كتب - قضينا معظم القسم كتابة هذا، أساسا. قمت بهذا. لذلك نأمل أن يكون لديك شعور جيد ما الذي يحدث هنا. الفرق كبير، بصراحة، هو مجرد هذا الجزء الأول الذي يتعامل مع خصوصيات ملفات الصور النقطية. وذلك لدي كما بلدي الشريحة التالية، ماذا علينا أن نفعل؟ حسنا، دعونا نفكر في المجرم. وللشخص من خلال قراءة مشكلة تعيين، فماذا نحن تحتاج إلى القيام به في المجرم؟ ببساطة. Aleja. ALEJA: هل لك أن تأخذ بها الجزء كل بكسل التي تدل الحمراء. وبعد ذلك - نوع من؟ JASON هيرشهورن: OK. حتى إخراج جزء من كل بكسل التي تدل الحمراء. وهذا قريب، ولكن ليس كل من هو. طالب 76: حسنا، هناك طرق مختلفة للقيام بذلك. JASON هيرشهورن: OK. تعطيني طريقة واحدة. طالب 76: إخراج جميع الأحمر، و ثم التأكيد على الأزرق والأخضر. JASON هيرشهورن: OK. بحيث يعطى كل من هذه الطرق - هذا يبدو وكأنه اعطيناها بكسل، و لديها مستوى الأحمر والأزرق، والأخضر. نحن نريد لتغيير المستويات النسبية لل الأحمر والأزرق، والأخضر، تبعا على أن بكسل. حيث يجب أن نغير في هذا الرمز المتعلقة الأحمر والأزرق والأخضر مستويات بكسل معين. بعد أن قرأت ذلك - قبل أن أكتبه؟ أعطني رقم السطر. طلاب متعددة: 83. JASON هيرشهورن: 83. حتى هنا. لالمجرم، رمز تحتاج إلى يجب كتابة كل الحق في الذهاب هناك. وهذا هو رمز فقط تحتاج إلى كتابة. لأنه، مثل سمعنا، كل ما تحتاجه ل القيام به هو تغيير هذه الزرقاء النسبية، مستويات الأحمر، والأخضر من كل بكسل. كنت قد قرأت في ذلك، والآن أنت أريد أن أكتب بها. كيف يمكنني الحصول على - إذا كان لدي هذا الشيء دعا الثلاثي، والحق هنا، وانها ل اكتب RGBTRIPLE - حسنا، إذا نظرنا في bmp.h، ما هو RGBTRIPLE؟ طالب 77: انها البنية. JASON هيرشهورن: RGBTRIPLE هو البنية. ونحن نرى أن الحق هنا إلى أسفل. وحتى إذا أردت الوصول إليها، كما يقول، و المستوى الأحمر من البنية، كيف يمكنني وصول إلى المستوى الأحمر من هذه البنية؟ [فئة لغط] طالب 78: RGBTRIPLE.rgbtred؟ JASON هيرشهورن: هل هذا صحيح؟ طالب 79: ينبغي أن يكون الثلاثي نقطة، بدلا من RGBTRIPLE نقطة؟ JASON هيرشهورن: الثلاثي. الثلاثي هو متغير محلي، لذلك هنا، وليس هناك مؤشرات هنا. لذلك نحن فقط استخدام نقطة تدوين. سوف تعطيني هذا المستوى من اللون الأحمر. إذا كنت تريد تغييره، أنا وضعت فقط فإنه يساوي شيئا مختلفا. ذلك مرة أخرى، وهذا سطر من التعليمات البرمجية بالوصول هذا المتغير داخل هذه البنية، و يمكننا تعيينها إلى شيء جديد. وذلك لالمجرم، ومرة ​​أخرى، وهذا هو، في الجوهر، ما يتعين علينا القيام به. بسيط جدا. مجرد تغيير بعض المستويات النسبية، و هذا هو المكان الذي يذهب هذا الرمز. تغيير الحجم، من ناحية أخرى، هو اصعب قليلا. في الواقع، وربما كان تغيير الحجم أصعب جزء من هذه المشكلة تعيين. لدينا ثلاث دقائق للذهاب أكثر من ذلك. ولكن مرة أخرى، لقد كتبت بالفعل أكثر من هذا الرمز، لذلك نحن يجب أن تكون على دراية جدا. ما هي بعض الأشياء نريد أن نفعله في تغيير الحجم، إذا كنت قد قرأت على تعيين المشكلة؟ إذا أعطيت لهم بالنسبة لي، ونحن يمكن الحديث عنها. ما هي بعض الأشياء التي تريد أن تفعل؟ طالب 80: عموديا - بحيث يكون لديك لتغيير حجمه أفقيا، ولكن تغيير حجم عموديا أنها كذلك؟ JASON هيرشهورن: حتى إذا نحن أعطيت بكسل، ونحن نريد أن حجمه من قبل عامل من اثنين، فإنه يحتاج الآن إلى أن تكون حجمها أفقيا وحجمها عموديا. فهل هذا يعقل؟ نعم. ولهذا ربما كان التحدي الأكبر. وسوف نتحدث عن ذلك في ثوانى. نعم. طالب 81: الطريقة فكرت في ذلك وكنت في حاجة الطباعة بها - JASON هيرشهورن: انتظر. لا يقول لنا ما فعلتم. نحن ذاهبون الى الحديث في المنطق. طالب 81: OK. ما هو السؤال؟ JASON هيرشهورن: أنت فقط رفعت يدك. لم يكن هناك أي سؤال. اسمحوا لي تقديمه. اسمحوا لي أن مجرد مناقشة هذا لفترة وجيزة. ولذا فإننا قد بكسل واحد، ونحن نريد ل تكرار ذلك، أفقيا و عموديا. حتى من الناحية المثالية ما نقوم به هنا هو، ونحن قراءة في بكسل لدينا، ونحن اكتبها ولكن العديد من المرات. ولكن بعد ذلك لدينا حيلة لنا هنا، ل ثم نريد أن انتقل إلى السطر التالي وكتابة ذلك في بداية السطر التالي. لذلك إذا كنا نريد لتكرار كلا أفقيا وعموديا، ما هو طريقة واحدة جيدة للقيام بذلك - واحدة جيدة على الرغم من أن تفعل ذلك؟ لذلك نحن لسنا في حاجة لطلب باستمرار حول الملف لدينا لوضع الأشياء. قد لا يكون هذا السؤال من المنطقي، ولكن أعتقد أن ل الإجابة لأنها سوف تساعد. طالب 82: إنشاء مجموعة؟ JASON هيرشهورن: لذلك دعونا نفكر كل ملف كصف. دعونا نفكر في الصفوف. اذا كان لدينا أول صف لدينا من بلدنا الصغير الصورة، يمكننا أن نجعل هذا الصف في صف واسع من صورة كبيرة، ثم تكرار هذا الصف ولكن مرات عديدة لا بد من تكرارها، بدلا من الذهاب بكسل بكسل، الذي يحصل مربكة عندما التعامل مع الملفات. لأنه إذا كان لدينا - أنا ينفد من الفضاء. إذا كان هذا هو الملف لدينا، وعلينا أن بكسل واحد هناك، ونحن نريد لوضعها هناك حق، لا يزال لدينا بعض الأشياء أن الحاجة للذهاب إلى هناك عندما نكون الكتابة وإنشاء ملف جديد لدينا - ملفنا هذا بمرتين. ولكن من الصعب حقا مع وظائف ملف لتخطي جميع أنحاء لخطوط جديدة من هذا القبيل، ثم أعود هنا ووضع الأمور في هناك. انه من المستحيل تقريبا أن تفعل شيئا من هذا القبيل، إذا كان هذا الأمر يبدو معقولا تماما. حتى إذا كنا نعتقد من حيث الصفوف، يمكننا تأخذ صف دينا، ومن ثم وضعه - تكرار الصفوف عموديا. وهذه هي الطريقة التي نتعامل بها مع تغيير حجم عموديا بدلا من أفقيا. وكان هذا النوع من سريعة، و مربكة قليلا. للأسف عصرنا متروك. وسوف نقف خارج لأولئك منكم هنا الذين لديهم أسئلة حول مجموعة المشكلة، بما في ذلك استرداد. لذلك دعونا تأجيل في الوقت الراهن. ومرة أخرى، إذا كان لديك أي أسئلة، يمكننا التحدث خارج.