>> เจสัน Hirschhorn: ยินดีต้อนรับคุณ, ทุกคนที่จะสัปดาห์ที่ 6
ฉันมีความสุขที่จะเห็นคุณทั้งหมดมีชีวิตอยู่และดี หลังจากทดสอบ 0, เพราะฉันรู้ว่า
เป็นบิตหยาบ
แต่โชคดีที่ทุกท่าน ไม่ได้ดีอย่างเหลือเชื่อ
และเพื่อให้เป็นที่ยอดเยี่ยม
ถ้าคุณอยู่ในส่วนของฉันฉันได้รับมากที่สุด ของคุณสำรองแบบทดสอบของคุณแล้ว
>> คู่ของคุณผมประชุม หลังเลิกเรียน
และถ้าคุณเป็นนักเรียนขยายและ คุณไม่ได้รับการตอบคำถามของคุณกลับมา
ยัง TF ของคุณอาจทำงานกับมัน และการจัดลำดับและจะได้รับมันกลับ
กับคุณในไม่ช้า
ดังนั้นนักเรียนส่วนขยายของฉันที่มี ดูตอนนี้ - หวังว่าจะมีชีวิตอยู่ -
ฉันจะได้รับแบบทดสอบของคุณ ไม่นานมานี้ได้เป็นอย่างดี
>> วาระการประชุมของเราในวันนี้เป็นดังนี้
ครั้งแรกที่เรากำลังจะไปกว่าบาง ทรัพยากรที่ CS50 ให้กับคุณ
เรากำลังจะไปกว่าการทดสอบ 0 ถัดไปและ ผมจะตอบคำถามใด ๆ ของใคร
มีเกี่ยวกับปัญหาโดยเฉพาะอย่างยิ่ง
แล้วเราจะไปกว่า ยื่น I / O และปัญหาตั้ง 5
ที่สองหัวข้อที่จะใช้เวลา ขึ้นเป็นกลุ่มของส่วนวันนี้
>> ฉันใส่รายการนี​​้ขึ้นทุกสัปดาห์เป็น เตือนให้คุณทั้งหมด แต่ของแกน
ส่วนเรามีเพียง 90 นาที - เรา จะไม่สามารถครอบคลุมทุกอย่างที่ฉัน
ชอบที่จะครอบคลุมสำหรับคุณผู้ชาย
แต่เราจะมีตันของทรัพยากรสำหรับ คุณสามารถวาดตามที่คุณได้รับรู้
วัสดุและการทำงานที่ผ่าน ชุดปัญหาของคุณ
>> เตือนความทรงจำที่ฉันมีข้อความออนไลน์ กล่องตั้งค่าสำหรับคุณในการกรอกถ้าคุณ
มีข้อเสนอแนะสำหรับผมใด ๆ ทั้งบวกและ
สร้างสรรค์เกี่ยวกับส่วน
URL ที่ตั้งอยู่ทางด้านขวาลงที่นี่
ดังนั้นโปรดใช้เวลาสักครู่หากคุณมี ข้อเสนอแนะว่าในระหว่างส่วน
หรือหลังหรือหลังจากที่คุณดูวิดีโอ ออนไลน์เพื่อให้ข้อเสนอแนะของคุณฉัน
ผมขอขอบคุณที่ใด ๆ และทั้งหมดของมัน
>> ดังนั้นผมจึงได้มีการสนทนาเล็ก ๆ ที่มีจำนวนมากของฉัน
นักเรียนตลอดสัปดาห์ - เป็นฉันมือ กลับแบบทดสอบการพูดคุยเกี่ยวกับ
แน่นอนเห็นว่าคุณกำลังทำ
และรูปแบบหนึ่งได้เกิดขึ้นซ้ำแล้ว กว่าในการพูดคุยเกี่ยวกับ - ใน
โดยเฉพาะอย่างยิ่ง -
ชุดปัญหา
และฉันได้โพสต์รูปแบบที่ บนกระดานได้ในขณะนี้
>> โดยพื้นฐานแล้วมีความแตกต่าง ระหว่างการเปลี่ยนในสิ่งที่เป็น
ทำอย่างถูกต้องและสิ่งที่ ที่จะทำดี
คนส่วนใหญ่ได้รับการทำที่ยอดเยี่ยม ในแง่ของความถูกต้อง -
5 หรือ 4 ใน psets ทั้งหมด
คนส่วนใหญ่จะได้รับ ที่ตลอดเวลา
>> แต่เพียงเพราะคุณได้ทำ สิ่งที่ถูกต้องไม่ได้หมายความว่าคุณได้
ทำสิ่งที่เป็นอย่างหรูหราหรือ ได้อย่างมีประสิทธิภาพหรือเป็นเรียบร้อยตามที่คุณ
จะได้ทำมัน
และนั่นคือสิ่งที่การออกแบบ -
และเลสเบี้ยนองศาสไตล์ -
แกนสำหรับ
ดังนั้นฉันผลักดันให้คุณทั้งหมดและ TFs อื่น ๆ จะผลักดันพวกคุณที่จะเปิดไม่เพียง แต่
ในสิ่งที่ถูกต้อง แต่เปิด ในสิ่งที่เขียนดี
>> ไม่ได้ทำที่ไม่จำเป็นสำหรับลูป ไม่ได้คำนวณตัวแปรถ้า
คุณจะได้ไม่ต้อง
ตัวอย่างเช่นมองกลับไปที่ปัญหาการตั้งค่า 4 เมื่อวางอิฐบน
หน้าจอทุกแถว - อิฐในทุก แถวที่กำหนดมี y เหมือนกัน -
ความสูงเดียวกันประสานงาน
>> เพื่อให้ y-ประสานงานไม่จำเป็นต้อง มีการคำนวณในการตกแต่งภายใน
ซ้อนกันสำหรับวงที่คุณอาจใช้ จะนำก้อนอิฐเหล่านั้นบนหน้าจอ
มันจะต้องมีการคำนวณทุก ทุกครั้งที่คุณเปลี่ยนแถวหรือ
ย้ายไปลงแถว
ดังนั้นบอกว่าถ้ามี 10 ก้อนอิฐที่อยู่ใน แถวแต่ละอิฐสามารถมีเดียวกัน
y-ประสานงานและที่พิกัด ก็สามารถนำมาคำนวณ
ครั้งเดียวสำหรับทุกคน
>> มันไม่จำเป็นที่จะต้องมีการคำนวณ 10 ครั้งหรือไม่ว่าการคำนวณความต้องการ
จะเกิดขึ้นในที่เกิดขึ้นจริง ฟังก์ชั่นการโทร -
การเรียกใช้ฟังก์ชันใหม่ gracked
ดังนั้นหากที่เป็นเพียงเล็กน้อยสับสนสำหรับ คุณมากขึ้นโดยทั่วไปสิ่งที่
ไม่จำเป็นต้องเกิดขึ้นทุกครั้งเดียว คุณไปผ่านห่วงสำหรับไม่ควรจะ
ใส่ในห่วงสำหรับและไม่ควร เกิดขึ้นทุกครั้งที่คุณไปทุก
ผ่านห่วงสำหรับ
>> ตัวอย่างเช่นการออกแบบที่ดีอีกอย่างหนึ่งที่เราเห็น ในสัปดาห์ที่ 3 เป็นเวลา 15 คุณสามารถเก็บ
ติดตามของศูนย์
ดังนั้นเมื่อคุณเริ่มต้นที่คณะกรรมการคุณ บันทึก - ในตัวแปรทั่วโลกอาจจะ -
x และ y-ประสานงานของศูนย์
และจากนั้นเมื่อใดก็ตามที่คุณ -
ในฟังก์ชั่นย้ายของคุณเมื่อใดก็ตามที่คุณทำ ย้ายที่ประสบความสำเร็จที่คุณปรับปรุง
ตำแหน่งของศูนย์
>> ที่จะช่วยให้คุณประหยัดจากที่มีการทำ สำหรับลูปซ้อนกันมองผ่าน
คณะกรรมการทุกครั้งในการทำงานของย้ายของคุณ และหาศูนย์หรือหากระเบื้อง
แล้วตรวจสอบสิ่งที่ถัดไป
แต่คุณต้องเป็นที่ตั้งของ ศูนย์คุณก็สามารถมองไปด้านล่าง
และไปทางซ้ายและขวาของมันเพื่อหา กระเบื้องที่คุณกำลังมองหา
>> ดังนั้นในแง่ของโปรแกรมที่เรากำลัง การเขียนก็จะไม่เคยมีขนาดใหญ่พอ
ว่าบางส่วนของการตัดสินใจการออกแบบเหล่านี้ จะจริงจะขัดขวางคุณ
โปรแกรมหรือทำให้มันทำงานช้ากว่า หรือบางทีก็วิ่งออกมาจากหน่วยความจำ
แต่เราก็ยังคงผลักดันให้คุณผู้ชาย ที่จะเขียนเป็นสง่างามและ
รหัสที่มีประสิทธิภาพที่สุด
>> ดังนั้นถ้าคุณทำท้ายการเขียนสิ่งที่ ที่มีขนาดใหญ่อย่างมีนัยสำคัญ
ขอบเขตที่พวกเขาจะได้รับการเขียนด้วยดี การออกแบบที่นอกจากจะเป็นที่ถูกต้อง
ดังนั้นจำนวนของคุณมี ที่นำออกมา
นั่นคือสิ่งที่เรากำลังมองหา - สิ่งที่เรากำลังจะดำเนินการต่อไป
ผลักดันให้พวกคุณใน
>> หากคุณเคยมีคำถามใด ๆ เกี่ยวกับ การออกแบบของโปรแกรมของคุณรู้สึกฟรี
ถึงออกมาให้ฉันและฉันมีความสุขที่จะ เดินผ่านโปรแกรมของคุณกับคุณ
และชี้ให้เห็นบางส่วนของการออกแบบ การตัดสินใจที่คุณทำและให้บางส่วน
คำแนะนำเกี่ยวกับวิธีการที่จะทำให้ได้ การตัดสินใจการออกแบบที่ดีขึ้น
>> ดังนั้นเรากำลังจะย้ายไป ที่จะพูดคุยเกี่ยวกับการทดสอบ 0
ก่อนที่เราจะทำอย่างไรที่ไม่ใคร มีคำถามใด ๆ เกี่ยวกับสิ่งที่
ฉันได้รับการคุ้มครองเพื่อให้ห่างไกล
>> [พึมพำเสียง]
>> เจสัน Hirschhorn: เจ็ดวินาที
ตกลง
ขอพูดคุยเกี่ยวกับการทดสอบ 0 สำหรับบิต
ส่วนใหญ่ของคุณมีแบบทดสอบของคุณ 0 กลับ
หากคุณไม่ได้หวังว่า คุณจำได้เล็กน้อย
แต่ถ้าคุณได้รับการทดสอบ 0 แล้วคุณ นอกจากนี้ยังมีการเข้าถึงแบบออนไลน์
ตัวอย่างการแก้ปัญหา
>> ไม่มีใครมีคำถามใด ๆ ก่อนที่จะ เรากระโดดลงไปในวัสดุสัปดาห์เกี่ยวกับ
ปัญหาโดยเฉพาะอย่างยิ่งในการทดสอบ 0 -
ทำไมคำตอบคือว่ามันคืออะไร
เป็นใครสับสนเกี่ยวกับอะไร
แม้ว่าคุณจะมีปัญหาที่ถูกต้อง แต่ เพียงแค่ต้องการให้ฉันอธิบายมันเล็กน้อย
มากขึ้นผมมีความสุขที่จะทำในขณะนี้
>> ดังนั้นผมจึงได้ถามพวกคุณไป มาพร้อมกับบาง
ความคิดเกี่ยวกับการทดสอบ 0
ดังนั้นผู้ที่ต้องการจะได้รับเรา เริ่มต้นด้วยคำถามหรือ
แสดงความคิดเห็นเกี่ยวกับการทดสอบ 0?
>> [กระดาษ RUSTLING]
>> เจสัน Hirschhorn: ยังไม่ได้ทุกคน ได้อย่างสมบูรณ์แบบ
ดังนั้นฉันรู้ว่า [หัวเราะ]
จะต้องมีคำถามบางอย่าง เกี่ยวกับแบบทดสอบ 0
ตกลง
ใช่
Ompica
>> OMPICA: หมายเลข 10
>> เจสัน Hirschhorn: หมายเลข 10
ซึ่งเป็นหนึ่งในจำนวน 10?
>> OMPICA: -
>> เจสัน Hirschhorn: ฉัน haven't -
>> OMPICA: รวม -
>> เจสัน Hirschhorn: จำนวน 10 แปด กับฉัน - เขียนแปดถึงฉัน?
>> OMPICA: ใช่
>> เจสัน Hirschhorn: OK
ดังนั้นคำถามอื่นคุณอาจมี ขอเป็นฉันทิพยเนตร?
คำตอบคือใช่
ในส่วนก่อนที่จะตอบคำถามที่ฉันถาม พวกคุณทั้งรหัสและสเตอร์ลิง
แปดถึงฉัน
ทั้งสองของพวกเขาที่เกิดขึ้นกับ ปรากฏในการตอบคำถาม
ดังนั้นหวังว่าที่คุณจ่าย ความสนใจไปที่
>> และถ้าคุณได้แล้วคุณจะต้อง อาจจะทำได้ดีกับทั้งสอง
แต่แปดถึง i, เราไม่ได้รหัสจริง ในชั้นเรียน แต่มันก็เป็นอีกครั้ง
ถามเกี่ยวกับการตอบคำถาม
ดังนั้นสองสิ่งที่จะใช้ ทราบเมื่อการเข้ารหัสแปดถึงฉัน
สิ่งแรกที่ต่อคำถามที่เป็น ที่คุณจำเป็นต้องตรวจสอบว่าสตริง
เท่ากับโมฆะ
>> สองสามคนพยายามที่จะตรวจสอบในภายหลัง ในโปรแกรมนี้ถ้าวงเล็บผม -
เพื่อให้ตัวละครที่เฉพาะเจาะจงในการที่ สตริง - เท่ากับโมฆะ
แต่จำไว้ null ที่เป็นหลัก - มันเป็นเรื่องดีที่จะคิด
null เป็นตัวชี้ศูนย์ - ตัวชี้ไปยังศูนย์ -
บางแห่งในหน่วยความจำที่ คุณจะไม่สามารถเข้าถึง
>> ดังนั้นหากสิ่งที่มีค่าเท่ากับโมฆะคุณ รู้ว่ามันยังไม่ได้รับการเริ่มต้น
หรือมีอะไรที่มี
ดังนั้นคือดาวถ่าน, s ฉันวงเล็บเป็นถ่าน
ดังนั้นมันทำให้รู้สึกที่จะเปรียบเทียบเพื่อโมฆะ, แต่ไม่ s วงเล็บฉันเป็นโมฆะ
แต่อีกครั้ง - เพื่อให้เป็นสิ่งแรกที่ ที่คุณควรจะทำ -
ตรวจสอบให้แน่ใจว่าคุณจริง มีสตริงจริง
>> ถัดไปคุณต้องการที่จะไปผ่าน ตัวละครในแต่ละสาย
และเพื่อที่จะเป็นเช่น s วงเล็บ ผมยกตัวอย่างเช่นถ้าฉันเป็นซ้ำของคุณ
และใช้ตัวอักษรที่และ ได้รับค่าที่แท้จริงของมัน
ที่คุณได้เก็บไว้เป็นถ่าน แต่ ค่า ASCII ศูนย์ -
ศูนย์เป็นตัวละคร -
ไม่จริงเลขศูนย์
มันเป็นบางอย่างที่หมายเลขอื่น ๆ ที่คุณสามารถ มองขึ้นไปในตาราง ASCII
>> ดังนั้นวิธีหนึ่งที่จะแก้ไขให้ถูกต้องสำหรับการที่ - น่าจะเป็นวิธีที่ดีที่สุดที่จะถูกต้องสำหรับ
ว่า - จะถูกลบออกจากมัน ค่าตัวละคร -
ศูนย์เป็นตัวอักษร
คำพูดเดียวเพื่อลบเป็นศูนย์ อีกคำพูดเดียว
ที่จะนำสิ่งที่หมายเลขที่คุณมี เป็นถ่าน, และได้รับมันเท่ากับ
จำนวนเป็นจำนวนเต็มที่เกิดขึ้นจริง
>> และที่คล้ายกันมากกับวิธีการ ผู้คนจำนวนมากเข้ามาใน
ปัญหาชุดที่ 2 กับซีซาร์ และ Viginere -
ยันต์เหล่านั้นเมื่อคุณ ถูกหมุนได้
ดังนั้นหลังจากที่คุณมีเป็นจำนวนจาก ศูนย์ถึงเก้าแล้ว - ขึ้นอยู่กับ
ที่จะไปในจำนวนที่สูงสุด - คุณจำเป็นต้องคูณ
โดยอำนาจของ 10
>> บางคนเดินออกมาจากด้านหลังเพื่อ ด้านหน้าและคูณแต่ละบุคคล
จำนวนโดยอำนาจของ 10
บางคนย้ายจาก ด้านหน้าไปด้านหลัง -
และเพื่อให้เกิดสูงสุด สั่งซื้อหมายเลขแรก -
และจะช่วยผู้ที่อยู่ใน ตัวแปรเคาน์เตอร์ทั่วโลก
แล้วแต่ละครั้งที่ผ่านการ วงคูณยักษ์ที่ทั่วโลก
ตอบโต้ด้วย 10 ตัวแปรที่จะทำให้ พื้นที่สำหรับถ่านต่อไป
>> เพื่อให้เป็นสับสนเล็กน้อยโดยไม่ต้อง ฉันเขียนมันขึ้นมาบนเรือ
แต่สารละลายตัวอย่าง มีให้คุณ
แต่สิ่งที่มีขนาดใหญ่ เรากำลังมองหา
นอกจากนี้ยังมีการตรวจสอบเพื่อให้แน่ใจว่าแต่ละ ตัวบุคคลได้แน่นอน
ตัวละครระหว่างศูนย์และเก้าและไม่ บางตัวละครอื่น ๆ เช่น,
เช่น
>> สิ่งเหล่านี้เป็นสิ่งที่เรากำลังมองหา ในคำถามที่
ไม่ว่าจะตอบคำถามของคุณหรือไม่
>> OMPICA: ใช่
>> เจสัน Hirschhorn: OK
มีคำถามอื่น ๆ เกี่ยวกับแบบทดสอบ 0?
สิ่งที่เกี่ยวกับการรวบรวม?
ทุกคนรวบรวมใช่ไหม
เลขที่
มี -
[หัวเราะ]
คำถามใด ๆ เกี่ยวกับ การรวบรวม?
ว้าว
>> [กระดาษ RUSTLING]
>> เจสัน Hirschhorn: ใช่
ไมเคิล
>> MICHAEL สินค้าจำนวน 7 - สุ่ม
>> เจสัน Hirschhorn: หมายเลข 7
จำนวน 7 เป็นจำนวนเต็มได้รับการสุ่ม
ยอดเยี่ยม
ดังนั้นคุณจะได้รับจำนวนเต็มและ จำนวนเต็ม b และคุณต้องการสุ่ม
จำนวนเต็มระหว่าง a และ b
จริงเราสามารถเขียนหนึ่งนี้ กระดานเพราะคนนี้
เป็นหนึ่งบรรทัดของรหัส -
วิธีหนึ่งที่จะทำมัน
>> ดังนั้นเราจึงกำลังได้รับ Drand เป็น ทำงานเราสามารถใช้
และสิ่งที่ไม่ Drand -
สมมติว่ามันถูกเมล็ด -
สิ่งที่ไม่ Drand กลับ?
>> MICHAEL: ลอยระหว่าง 0.0 และ 1.0
>> เจสัน Hirschhorn: จำนวน - ใช่
จำนวนระหว่าง 0 และ 1
และเพื่อให้เรามี b และ
และแล้วเราก็มีจำนวนสุ่มของเรา ระหว่าง 0 และ 1 ให้กับเราโดย Drand
บางคนพยายามที่จะนำ b หรือ b ลบ หรือสิ่งที่อยู่ข้างในนั้น
วงเล็บ
นั่นก็หมายความว่าพวกเขากำลัง ข้อโต้แย้งที่ฟังก์ชั่นนี้
>> Drand ไม่ใช้ข้อโต้แย้งใด ๆ - เช่น getString ไม่
ไม่ใช้ข้อโต้แย้งใด ๆ
จึงเป็นเพียงวงเล็บเปิดปิด paren - และที่ตัวเองเป็น
การเรียกใช้ฟังก์ชัน
และที่จะช่วยให้คุณเป็นจำนวนมาก ระหว่าง 0 และ 1
แน่นอนเรามีทั้งช่วง ว่าตัวเลขอาจจะค่ะ
>> พูดว่าถ้า b คือ 10 และ 5 เป็นเราจริงๆ ต้องการตัวเลขที่มีช่วงของ 5
ดังนั้นสิ่งต่อไปที่เราต้องทำคือ คูณนี้โดยช่วง b ลบ
ดังนั้นสมมติว่ามีการคูณ
และที่จะให้เราเป็นจำนวนมาก ภายในช่วงที่กำหนด
และช่วงที่ระบุว่าเป็น ความแตกต่างระหว่าง b ลบ
>> และสุดท้ายเท่านั้นที่จะให้มันจาก - กล่าวว่าช่วงระหว่าง b ลบ
ที่ 5 ที่จะให้เรา จำนวน 0-5
แต่ถ้าในความเป็นจริง 5 เราต้องเพิ่ม ช่วงนี้ขึ้นเพื่อที่จะเป็น
ควรจะเป็นจริงโดยการเพิ่ม
เพื่อให้ได้รับสิทธิในตรรกะ
แล้วคุณจะมี คำถามอื่นได้หรือไม่
>> ไมเคิล: เลขที่
ฉันเพียงแค่รู้สึกโง่จริงๆตอนนี้
[หัวเราะ]
>> เจสัน Hirschhorn: เลขที่
ไม่รู้สึกโง่จริงๆ
จำนวนของคนที่ต่อสู้ ด้วยคำถามนี้
แล้วคำถามอื่น ๆ คือ Drand, ที่คุณกล่าวว่าจะช่วยให้คุณลอย -
กลับลอย
แต่ฟังก์ชั่นนี้ถามจริง เพื่อจำนวนเต็มจะถูกส่งกลับ
>> คุณไม่จำเป็นต้องที่จะโยนนี้อย่างชัดเจน เป็นจำนวนเต็มเพราะสิ่งเหล่านี้
การดำเนินงานที่จะรักษามันเป็นทั้งหมด ลอย - เป็นจำนวนจุดลอย
เช่นนี้จะ - แม้ว่านี้ เป็นจำนวนเต็มนี้จะ
จะคูณได้อย่างถูกต้อง
ทั้งหมดคูณจะทำงาน
คุณไม่จำเป็นต้องที่จะโยนมันที่นี่
ในความเป็นจริงคุณไม่ควรโยน
>> ที่จะ -
ถ้าคุณจะโยนจำนวน ที่ระหว่าง 0 และ 1 -
จำนวนสุ่มลอยจุด -
แล้วมันอาจจะเป็นเพียง 0 หรือ 1 ดังนั้น คุณจะสูญเสียทั้งหมดของความแม่นยำที่
แต่ในท้ายที่สุดเมื่อคุณกลับมา จะได้รับโดยอัตโนมัติ
ส่งกลับเป็นจำนวนเต็ม
ดังนั้นคุณจึงไม่จำเป็นต้องทำ ว่าตัวเองหล่อ
>> ดังนั้นนี่คือคำตอบ คำถามที่ 7 จำนวน
คำถามใด ๆ ที่อื่น ๆ ในแบบทดสอบ 0?
ใช่แอนนี่
>> ANNIE: เมื่อไหร่ที่เราใช้ซ้ำ -
เมื่อใดที่เราใช้ลูปซ้ำ?
>> เจสัน Hirschhorn: คุณจะใช้เมื่อ ซ้ำ - เพื่อให้มากกว่าปกติ
ข้อดีและข้อเสียของการเรียกซ้ำเมื่อเทียบกับ วิธีการทบทวน
ใครสามารถนำเสนอโปรหรือแย้งหรือไม่
กรุณา?
ไม่สามารถทุกคน
ที่สามารถนำเสนอโปรหรือแย้งหรือไม่
>> [กระดาษ RUSTLING]
>> นักเรียน 1: ซ้ำน้อย การเข้ารหัส - การพิมพ์น้อยลงหรือไม่
>> เจสัน Hirschhorn: ดังนั้นโดยทั่วไป เรียกซ้ำโดยเฉพาะอย่างยิ่งการทำงาน -
หรือขั้นตอนวิธีการเช่นผสาน จัดเรียง - ที่ยืมตัวเอง
ที่จะใช้วิธีการซ้ำ -
อาจจะตรงไปตรงมามากขึ้น รหัสซ้ำ
และเพียงแค่ทำให้รู้สึกมากขึ้น ที่จะทำซ้ำ
เพื่อที่จะเป็นมืออาชีพในการเรียกซ้ำ
คนอื่นอย่างไร
ใช่?
>> นักเรียนที่ 2: การเรียกซ้ำ Con -
จะใช้หน่วยความจำเพิ่มเติม
>> เจสัน Hirschhorn: ดังนั้นตรงขวา
ฟังก์ชั่นซ้ำจะเก็บเพิ่ม กองเฟรมไปยังกอง
ดังนั้นถ้าคุณกำลังปฏิบัติการในหลาย ตัวเลขและมีการเรียกนี้
ทำงานมากแล้วคุณจะได้อย่างแน่นอน ใช้หน่วยความจำมากขึ้นในขณะที่
วิธีการทบทวนที่จะทำให้หนึ่ง กองกรอบในกองเพราะ
มันทั้งหมดที่เกิดขึ้นภายในหนึ่งฟังก์ชัน
>> ๆ ข้อดีและข้อเสียอื่น ๆ
ใช่
>> นักเรียน 3: ข้อดีในการเรียกซ้ำ
คุณไม่ได้มีการตรวจสอบใน ล่วงหน้ากี่ครั้ง
มีรหัสที่จะทำซ้ำ
คุณสามารถมีจำนวนที่กำหนดไว้ของ เวลาที่คุณต้องย้ำแล้ว
เรียกซ้ำตัวเองจะดีกว่าเพราะ มันต้องใช้ผลที่
>> เจสัน Hirschhorn: ผมคิดว่าเป็นความจริง
แต่ผมคิดว่าในทั้งสองกรณี ที่คุณจะไม่เคย -
คุณอาจจะได้รับบาง ข้อมูลจากผู้ใช้
หรือฟังก์ชั่นนี้จะมีข้อมูลบางส่วน ที่จะตรวจสอบกี่ครั้งก็
ควรใช้
ดังนั้นโดยทั่วไปคุณจะไม่ยากรหัส - แม้จะอยู่ในวิธีการซ้ำ - วิธี
หลายต่อหลายครั้งวงที่ควรจะทำงาน
>> คุณมีอีกคุณ คิดเกี่ยวกับแอนนี่?
ตกลง
ดังนั้นผู้ที่อาจจะสอง -
โปรที่ใหญ่ที่สุดและใหญ่ที่สุด con ที่จะซ้ำเมื่อเทียบกับ
วิธีการทบทวน
ตกลง
สิ่งอื่นในแบบทดสอบ 0?
>> ขอย้ายไปอยู่กับ
ไฟล์ I / O นอกจากนี้ที่ยอดเยี่ยมในระยะสั้น ในสัปดาห์นี้ในไฟล์ I / O ที่หวัง
คุณได้ดูหลาย ครั้งและชื่นชม
ทำงานมากเดินเข้าไปในนั้นและฉัน ได้ยินจะเป็นประโยชน์อย่างบ้าคลั่ง
ฉันยังรวมถึงการเชื่อมโยงบนภาพนิ่งนี้ ในกรณีที่คุณไม่ได้มี
โอกาสที่จะดูมัน 10 ครั้ง
>> ดังนั้นเราจะสั้นไปกว่า ขั้นตอนที่สำคัญในการเปิดและการทำงาน
กับไฟล์และจากนั้นเราจะไป ดำน้ำในปัญหาการเข้ารหัสก่อน
การตรวจสอบปัญหาที่กำหนด
ดังนั้นอีกครั้งฉันจะใส่นี้ขึ้นอยู่กับ หน้าจอ แต่ฉันจะพูดคุย
เพียงแค่นาทีเกี่ยวกับสิ่งที่เรากำลัง ทำที่นี่กับแฟ้ม I/O--
สิ่งที่หมายความว่าอย่างไร
>> นั่นหมายความว่าเราสามารถสร้างของเรา โปรแกรมแล้วมีโปรแกรมของเรา
ออกและไม่ได้ทำให้ผลกระทบใด ๆ โลกภายนอกของโปรแกรมของเรา
แต่เมื่อเราเริ่มต้นการทำงานกับไฟล์ - ทั้งพวกเขาในการอ่านและการสร้าง
พวกเขา - เราสามารถมีผลกระทบต่อบางส่วน โลกภายนอกของโปรแกรมของเรา
>> เช่นเดียวกับถ้า Microsoft Word ไม่สามารถ เพื่อให้เอกสารใด ๆ Word, แล้ว
เมื่อ Microsoft Word ออกทั้งหมดของคุณ การทำงานจะได้รับหายไปและมันจะ
จริงๆจะไร้ประโยชน์
ในที่สุดเราไม่ต้องการที่จะสามารถที่จะ เขียนโปรแกรมที่สามารถส่งผลกระทบต่อ
โลกรอบตัวพวกเขาทั้งสองโดยการใน ปัจจัยการผลิตที่ซับซ้อน - ในแง่ของไฟล์และ
ผ่านไฟล์และยังมีการสร้างที่น่าสนใจ และผลที่น่าสนใจ -
ในแง่ของชนิดของไฟล์
>> ดังนั้นนั่นคือเหตุผลที่เราจะเริ่มต้นที่จะ เรียนรู้วิธีการทำงานกับไฟล์
โดยเฉพาะอย่างยิ่งสิ่งที่ เราจะเป็นดังนี้
มันง่ายมาก
มีเพียงไม่กี่ขั้นตอนและ พวกเขาจะอยู่ที่นี่ในรหัสนี้
ดังนั้นเรากำลังจะผ่านไป สายรหัสนี้โดยสาย
>> ครั้งแรกที่คุณจะเห็นไฮไลต์ -
เมื่อคุณกำลังทำงานกับไฟล์ โดยไม่คำนึงถึงชนิดของไฟล์เป็น
คุณต้องการที่จะเปิดมัน
และที่มีการเรียกร้องไปยัง fopen -
ขวาที่นี่
คุณรวมถึงชื่อของไฟล์
ถ้าแฟ้มไม่ได้อยู่ในไดเรกทอรีของคุณ หรือโฟลเดอร์ที่โปรแกรมนี้
ชีวิตแล้วคุณยังต้องรวมถึง เส้นทางไปที่ไฟล์ที่เป็น
>> เรากำลังจะไปคิดว่านี้ ไฟล์ที่เรียกว่า "text.txt" -
เอกสารข้อความง่าย - อยู่ใน โฟลเดอร์เดียวกันกับโปรแกรมนี้
เพื่อให้เป็นสิ่งที่จะต้องเก็บไว้ในที่อื่น ใจ - ว่าถ้าคุณต้องการที่จะเปิดไฟล์
ที่อื่นที่คุณต้องการจริง รวมถึงทำเลที่ตั้ง
>> ประการที่สองคุณสามารถส่งผ่านอาร์กิวเมนต์ไป fopen และนั่นคือสิ่งที่คุณต้องการจะทำ
พร้อมกับแฟ้ม
มีสามข้อโต้แย้งหลักที่มี คุณกำลังจะส่งผ่านไปยัง fopen
ที่สามารถให้ฉันที่สาม
ที่สามารถให้ฉันหนึ่งของพวกเขา
ใช่
>> นักเรียน 4: ชื่อไฟล์?
>> เจสัน Hirschhorn: ขออภัย
สามข้อโต้แย้งหลักที่คุณสามารถส่งผ่าน เป็นอาร์กิวเมนต์ที่สองจะ fopen
คุณขวา - ชื่อไฟล์ เป็นอาร์กิวเมนต์แรก
แต่อาร์กิวเมนต์ที่สอง fopen เป็น ทั่วไปสามสายและ - ใช่
aleja
>> aleja: การผนวก
>> เจสัน Hirschhorn: ถ้าคุณต้องการที่จะ ผนวกกับไฟล์ที่มีอยู่แล้ว
>> นักเรียน 5: อาร์สำหรับการอ่าน
>> เจสัน Hirschhorn: A ถ้าคุณ ต้องการที่จะอ่านจากแฟ้ม
>> นักเรียนที่ 6: W การเขียน
>> เจสัน Hirschhorn: และ W, ถ้าคุณ ต้องการที่จะเขียนไปยังแฟ้ม
ดังนั้นในกรณีนี้เรากำลังเขียน ไปยังแฟ้มเพื่อให้เรามีน้ำหนัก
คุณเปิดคุณยังมีการบันทึก ไฟล์ที่และที่ที่มี
รหัสไปทางด้านซ้ายมือของ ผู้ประกอบการที่ได้รับมอบหมาย -
ฉันสร้างตัวชี้ไปยังแฟ้ม เรียกว่าในกรณีนี้ไฟล์
>> เราจะไม่ต้องกังวลอะไร สิ่งนี้ไฟล์เป็นตัวพิมพ์ใหญ่ทั้งหมด
พอเพียงที่จะบอกว่ามันเป็นเวลานาน กระแสของศูนย์และคน
และนั่นคือวิธีการที่เราจะไป ทำงานได้และเข้าใจมัน
>> สิ่งต่อไปที่เราต้องทำ - และ นี้เป็นสิ่งสำคัญอย่างเหลือเชื่อ -
เมื่อใดก็ตามที่คุณเปิดแฟ้ม -
ในความเป็นจริงเมื่อใดก็ตามที่คุณโทร malloc สำหรับ ตัวอย่างและได้รับหน่วยความจำบางและพยายาม
และบันทึกไว้ในตัวชี้คุณเสมอ ต้องการที่จะตรวจสอบให้แน่ใจว่า
ฟังก์ชั่นไม่ได้กลับมาเป็นโมฆะ
>> ดังนั้นในกรณีนี้เราจะตรวจสอบเพื่อให้ ให้แน่ใจว่าเราได้เปิดจริง
ยื่นได้อย่างถูกต้องและมี ข้อผิดพลาดในโปรแกรมของเราไม่มี
ถัดไปเมื่อเราได้ตรวจสอบเพื่อให้แน่ใจว่า ว่าเรามีไฟล์ทำงานที่เราสามารถทำได้
เขียนหรืออ่านจาก หรือผนวกไปยังแฟ้ม
ในกรณีนี้ผมเพียงแค่พิมพ์ บรรทัดเดียวกับไฟล์นี้
>> ฉันจะรู้ได้อย่างไรว่า?
ดีฉันใช้ฟังก์ชันนี้ เรียกว่า fprintf
ทุกฟังก์ชั่นที่คุณจะใช้ เมื่อเขียนหรืออ่านจากหรือ
การจัดการกับไฟล์ที่จะคล้ายกับ ฟังก์ชั่นที่คุณเคยเห็นมาก่อน แต่
เริ่มต้นด้วยตัวอักษร F, ยืนไฟล์
และ fprintf ซึ่งแตกต่างจากการพิมพ์ตามปกติของเรา app ที่ใช้อาร์กิวเมนต์เพิ่มเติมอย่างใดอย่างหนึ่ง
และที่เป็นไฟล์ที่คุณ ต้องการพิมพ์บรรทัดนี้ไป
>> ผมไม่ได้มีอะไรที่จะ ด้านขวาของ ohai
ผมไม่ได้มีที่สาม อาร์กิวเมนต์ printf -
หรืออาร์กิวเมนต์ที่สอง printf, อาร์กิวเมนต์ที่สามจะ fprintf เพราะฉัน
ไม่ได้มีตัวยึดใด ๆ ที่นี่
ฉันไม่ได้รวมถึงตัวแปรใด ๆ
แต่อีกครั้ง fprintf และทุกไฟล์เหล่านี้ ฟังก์ชั่นที่ทำงานกับไฟล์
โดยทั่วไปจะต้องมีแฟ้ม ที่พวกเขากำลังปฏิบัติการ
>> สุดท้ายสิ่งที่สำคัญสุดท้ายที่จะ ทำคือการปิดแฟ้มเช่นเดียวกับ
ด้วย - เมื่อใดก็ตามที่เรา malloc บางสิ่งบางอย่าง เราต้องการที่จะเป็นอิสระบางสิ่งบางอย่างที่เราเกรงว่า
มีหน่วยความจำรั่ว - เราต้องการ ปิดแฟ้มของเรา
หากโปรแกรมนี้ออกได้โดยไม่ต้องปิด ไฟล์ราคาที่ไม่มีอะไรที่จะไป
ที่ไม่ถูกต้องโดยเฉพาะอย่างยิ่งถ้ามัน เป็นไฟล์ขนาดเล็ก
>> แต่มันเป็นอย่างแน่นอนรูปแบบการเข้ารหัสที่ดี และการปฏิบัติเสมอปิดแฟ้มของคุณ
เมื่อคุณเสร็จสิ้นการใช้มัน
เพื่อให้เป็นพื้นฐานของไฟล์ I / O คุณอาจได้เห็นว่าก่อนหรือ
ดูมันในการที่ยอดเยี่ยมในระยะสั้น
ไม่มีใครมีคำถามใด ๆ ก่อนที่จะ เราไปลงในบางเข้ารหัสการปฏิบัติ
ปัญหาเกี่ยวกับไฟล์ I / O หรือ ขั้นตอนที่ฉันเพิ่งไปมากกว่า
>> [พิมพ์ดีดเสียง]
>> เจสัน Hirschhorn: คุณ มีคำถาม Avi?
>> AVI: เลขที่
>> เจสัน Hirschhorn: OK
ฉันจะรออีก เจ็ดวินาที
[หัวเราะ]
นั่นคือเคล็ดลับที่ดีจริงๆ
พวกคุณไม่ชอบ การถามคำถาม
ที่ปรับได้
ตกลง
ดังนั้นปัญหาการปฏิบัติของเราเป็นครั้งแรกที่เรามี จะซ้ำกันฟังก์ชั่นของ
เครื่องมือบรรทัดคำสั่งที่คุณอาจ ใช้ก่อน - สำเนา -
เครื่องมือคัดลอก
ถ้าคุณพิมพ์ cp แล้วผ่านมันสอง ข้อโต้แย้งที่เข้ากับขั้วของคุณที่คุณสามารถ
คัดลอกไฟล์
และเป็นสิ่งที่เราจะไป ที่จะเขียนในตอนนี้
>> ดังนั้นอีกครั้งอ่านออกของภาพนิ่งนี้ผมต้องการ คุณสามารถเขียนโปรแกรมที่จะใช้เวลา
สองและมีเพียงสองบรรทัดคำสั่ง ขัดแย้ง -
แฟ้มแหล่งที่มาและแฟ้มปลายทาง -
และสำเนาเนื้อหาของแหล่งที่มา แฟ้มแฟ้มปลายทาง
หนึ่งไบต์ในเวลา
เพื่อให้เป็นจำนวนมากที่จะขอ
>> อีกครั้งเป็นวิธีการที่ดีในการนี​​้คือการ ไม่ได้ไปตรงกับรหัส C แต่
ทำลายมันลงไม่กี่ขั้นตอน
ขั้นแรกให้คิดเกี่ยวกับตรรกะ - ว่า สิ่งที่ฉันขอให้คุณทำ -
และทำความเข้าใจทั้งหมดของ ขั้นตอนในการแก้ไขปัญหานี้
ไม่ได้อยู่ใน C เพียงใน pseudocode บาง หรือแม้กระทั่งรูปแบบของจิต
สิ่งที่เกิดขึ้น
>> ถัดไปเมื่อคุณมี pseudocode ลง คิดออกว่า pseudocode
แผนที่ลงบนเครื่องมือและสิ่งที่เราได้ เรียนรู้ที่จะใช้ในการ C.
>> และในที่สุดเมื่อคุณมีทุกอย่างที่ ร่วมกันคุณสามารถรหัสปัญหา
ใช้เวลา 5 ถึง 10 นาทีในการ ทำงานเกี่ยวกับปัญหานี้
ฉันจะใส่คำแนะนำ กลับขึ้นไปในครั้งที่สอง
แล้วเราจะไปกว่า pseudocode และรหัส
มันอยู่เป็นกลุ่ม
>> หากคุณมีคำถามใด ๆ ในขณะที่คุณกำลัง ที่ทำงานเกี่ยวกับเรื่องนี้ให้ความรู้สึกอิสระที่จะยกระดับ
มือของคุณและฉันจะมา ไปรอบ ๆ และตอบพวกเขา
>> นักเรียน 7: ฉันสามารถรูด ชิ้นส่วนของกระดาษ
>> เจสัน Hirschhorn: เกิดอะไรขึ้น
>> [พิมพ์ดีดเสียง]
>> เจสัน Hirschhorn: OK
ขอไปกว่า pseudocode แรกและ แล้วฉันจะให้คุณทั้งคู่มากขึ้น
นาทีเพื่อเสร็จสิ้นการเข้ารหัส
>> ใครอยากจะเริ่มต้นฉันลง กับบรรทัดแรกของ
pseudocode สำหรับการทำงานนี้
>> นักเรียน 8: ตรวจสอบให้แน่ใจว่า คุณได้รับสองไฟล์
>> เจสัน Hirschhorn: OK
และถ้าเราไม่ได้?
>> นักเรียน 8: ฉันจะกลับ 0
>> เจสัน Hirschhorn: เราควรจะกลับ 0?
>> นักเรียน 8: กลับ -
blanking
ขอโทษ
>> เจสัน Hirschhorn: ใช่
อาจจะไม่ได้ 0
เพราะ 0 หมายถึงทุกอย่างที่เป็นสิ่งที่ดี
ตกลง
เพื่อให้เป็นบรรทัดแรก ของ pseudocode
ที่มีบรรทัดที่สองของ pseudocode?
>> นักเรียน 9: เปิดไฟล์ทั้งสองได้หรือไม่
>> เจสัน Hirschhorn: เปิดไฟล์ทั้งสอง
OK?
>> นักเรียน 10: ตรวจสอบดู ถ้าไฟล์เป็นโมฆะ?
>> เจสัน Hirschhorn: ตรวจสอบให้ แน่ใจว่าไม่เป็นโมฆะ
เช่นกัน -
เฉือน 0 -
คือโมฆะ?
>> นักเรียน 11: เลขที่
>> เจสัน Hirschhorn: นั่นไม่โมฆะ
ที่เรียกว่าเทอร์มินัล
มันสะกดจริงมีเพียงหนึ่งลิตร
ดังนั้นการตรวจสอบสิ่งที่ต่อว่า - ที่จริงตัวละคร -
ดังนั้นการตรวจสอบบางสิ่งบางอย่างกับที่ ไม่เหมือนกับการตรวจสอบเพื่อดูว่ามัน
เท่ากับโมฆะ
>> และบางคน -
ในแบบทดสอบและปัญหาของพวกเขา ชุด - ได้มี
สองผู้ที่สับสน
แต่ทั้งสองของผู้ที่เป็น ในความเป็นจริงที่แตกต่างกัน
หนึ่งสิ้นสุดสตริง -
หนึ่งเป็นตัวชี้ไป 0
>> นักเรียน 12: ทำไมคุณจะไม่ตรวจสอบ ตรวจสอบให้แน่ใจว่าไฟล์ที่ไม่โมฆะ
ก่อนที่จะเปิดได้อย่างไร
>> เจสัน Hirschhorn: ดังนั้นเปิดบันทึก บางสิ่งบางอย่างในแฟ้มที่
และหากคุณไปกลับมาที่นี่ -
ดังนั้นสายนี้ - fopen -
จะให้ที่อยู่และจัดเก็บ ที่อยู่ในแฟ้มที่ว่าการทำงาน
ถ้าไม่ได้ทำงานก็ จะเก็บโมฆะ -
>> นักเรียน 12: โอ้
ตกลง
มีคุณ
>> เจสัน Hirschhorn: ในแฟ้ม
ดังนั้นคุณจึงไม่สามารถตรวจสอบโมฆะ ก่อนที่คุณจะเปิดพวกเขา
NULL หมายถึงสิ่งที่ไม่ได้ ทำงานอย่างถูกต้อง
ตกลง
เพื่อตรวจสอบเพื่อให้แน่ใจว่าไม่เป็น?
หรือมีอะไรบ้าง
เราคิดอย่างไร
เราจะไปกับที่
>> นักเรียน 13 สินค้า
>> เจสัน Hirschhorn: หรือไม่
ไม่เป็น?
>> นักเรียน 13 สินค้า
>> เจสัน Hirschhorn: OK
เราดูเหมือนจะมีบางส่วน สอดคล้องกับที่
ไม่เป็นโมฆะ
ตกลงบรรทัดถัดไปของ pseudocode
ที่ไม่ได้ให้ฉันบรรทัดหรือยัง
เราจะรอให้คุณ
ใช่
>> นักเรียน 14: คุณต้องอ่าน จากไฟล์แรก
>> เจสัน Hirschhorn: OK
>> นักเรียน 14: หรือที่เราใช้ fscanf หรือ สิ่งที่ต้องการที่ไฟล์แรกได้หรือไม่
>> เจสัน Hirschhorn: ดังนั้นเราต้องการที่จะ อ่านจากไฟล์แรกและ -
ให้ใส่ที่อยู่ที่นี่
อ่านจากแฟ้มแหล่งที่มา
และแล้วสิ่งที่เราทำหลังจากที่เรา อ่านจากแฟ้มแหล่งที่มา?
คนอื่น?
>> นักเรียน 15: เขียนลงใน แฟ้มปลายทางหรือไม่
>> เจสัน Hirschhorn: เราเขียนเพื่อ แฟ้มปลายทางและ -
ตกลง
อะไรที่เราขาดหายไป
คนอื่น ๆ ที่ยังไม่ได้ให้ฉัน บรรทัดของรหัสยัง - ของ pseudocode
ใช่
>> นักเรียน 16: บางทีคุณอาจจะสามารถตรวจสอบ ไม่ว่าจะมีบางสิ่งบางอย่างในการอ่านสำหรับ
เช่นสายต่อไปหรือไม่
ที่เป็นเช่นบรรทัดถัดไป ดูว่ามันมีอยู่
>> [อิเล็กทรอนิกส์เสียงบี๊บ]
>> เจสัน Hirschhorn: โอ๊ะ
นั่นเป็นซอฟต์แวร์ journaling ของฉัน
ใช่?
>> นักเรียน 16: ใช่
>> เจสัน Hirschhorn: เพื่อให้ ให้ฉันอีกครั้งหนึ่ง
>> นักเรียน 16: ตรวจสอบว่ามี ยังคงเป็นบรรทัดถัดไปจาก
แฟ้มแหล่งที่มาในการอ่าน
>> เจสัน Hirschhorn: OK
ดังนั้นเราไม่ได้อ่านบรรทัด - กำลังอ่านไบต์ที่นี่ -
แต่คุณที่ถูกต้อง
เราต้องการที่จะอ่านและเขียนจน ไม่มีไบต์
ตกลง
และอื่น ๆ เหล่านี้จริงๆควรจะเยื้อง นิด ๆ หน่อย ๆ เพราะพวกเขากำลังอยู่ภายใต้การมี
ใช่มั้ย?
จนกว่าเราจะออกจากไบต์ที่เรากำลังจะ อ่านจากแฟ้มแหล่งที่มาและเขียน
ในแฟ้มปลายทาง
>> และแล้วสิ่งที่เป็นครั้งสุดท้าย สายของ pseudocode?
คนที่ไม่ได้รับ สิ่งที่ฉันยัง
>> นักเรียน 17: ปิดไฟล์หรือไม่
>> เจสัน Hirschhorn: แน่นอน
ปิดไฟล์
ดังนั้นจึงมี pseudocode ของเรา
ฉันจะใส่ลงไปใน pseudocode Gedit และในไม่กี่นาทีเรา
จะรหัสนี้ร่วมกัน
>> ตกลง
ขอให้เราเริ่มต้นเป็นกลุ่ม
Nishant ผมมีไฟล์ใหม่ของฉัน
ผมได้เปิดเพียงแค่นี้ขึ้น
เอกสาร Untitled 1
อะไรเป็นสิ่งแรกที่ฉันควรทำอย่างไร
>> Nishant: รวมทั้งห้องสมุด?
>> เจสัน Hirschhorn: OK
สิ่งที่ห้องสมุด?
>> Nishant: stdio.h, stdlib.h ผมเชื่อว่า?
>> เจสัน Hirschhorn: OK
stdlib หาคืออะไร
>> Nishant: ฉันลืม
>> เจสัน Hirschhorn: OK
ดังนั้นรวม stdio
ฉันควรทำอย่างไรก่อน ผมเริ่มเขียนโปรแกรม?
>> Nishant เขียนส่วนหัวหรือไม่
>> เจสัน Hirschhorn: วิธี ฉันจะได้รับมันสี?
>> [VOICES interposing]
>> Nishant: คุณจะได้รับมันได้อย่างไรสี?
>> เจสัน Hirschhorn: วิธี ผมสีเข้ารหัส?
>> Nishant: ผมไม่ทราบว่า
โอ้
ประหยัด
>> เจสัน Hirschhorn: บันทึก
ใช่
ฉันควรจะบันทึกเป็น c.
เพื่อบัน​​ทึกไว้บนเดสก์ทอปเป็น cp.c.
หวาน
และถ้าผมต้องการที่จะได้รับเต็มรูปแบบ จุด, สิ่งที่ฉันควร
รวมถึงที่อยู่ด้านบนหรือไม่
>> Nishant: คุณสามารถเขียนชื่อชื่อของคุณ ของโปรแกรมและวัตถุประสงค์
ของโปรแกรมด้วยหรือไม่
>> เจสัน Hirschhorn: ดูดี
ยอดเยี่ยม
เพื่อให้คุณได้เริ่มต้นเราออกอย่างสมบูรณ์
# include -
เรายังจะเขียน -
ตกลง
ดังนั้นฉันคิดว่าฉันตั้งค่าทั้งหมดที่จะไป
ที่มีบรรทัดแรกของรหัสสำหรับฉัน - หรือบรรทัดแรกของรหัสที่
มันจะใช้เวลาในการตอบสนองครั้งแรกของเรา แสดงความคิดเห็นใน pseudocode?
คุณ
>> นักเรียน 18: ไม่ควรที่จะเป็น int argc และ char * argv?
>> เจสัน Hirschhorn: ผมคิดว่า คุณขวา
ลองเปลี่ยนเป็น int หลักวงเล็บเปิด int argc จุลภาค char * argv?
เช่นเดียวกับที่
>> นักเรียน 18: วงเล็บ
>> เจสัน Hirschhorn: วงเล็บ
เปิดวงเล็บวงเล็บปิด ผู้ปกครองอย่างใกล้ชิด
สมบูรณ์
ตอนนี้ผมสามารถใช้อาร์กิวเมนต์บรรทัดคำสั่ง
ตกลง
ให้แน่ใจว่าเรากำลังได้รับสองไฟล์
คุณสามารถให้ฉันเช่นกัน
>> นักเรียน 18: ถ้า argc -
อันนี้ไม่เท่ากับ 3
>> เจสัน Hirschhorn: ถ้าวงเล็บเปิด argc ไม่เท่ากับ 3?
>> นักเรียน 18: ใช่คุณกลับ 1 หรืออะไร
>> เจสัน Hirschhorn: ขออภัย
>> นักเรียน 18: ย้อนกลับ 1 หรืออะไร
>> เจสัน Hirschhorn: ย้อนกลับ 1
OK?
ยิ่งใหญ่
เปิดไฟล์ทั้งสอง
ที่สามารถช่วยให้ฉันเปิดไฟล์ทั้งสอง
ใครยังไม่ได้รับรหัสฉันหรือยัง
เคิร์ต?
>> KURT: ดังนั้นตัวพิมพ์ใหญ่ทั้งหมด F-I-L-E แหล่งดาว
>> เจสัน Hirschhorn: ฉันจะ ที่จะออกจากสระ
เหล่านี้จะเย็น
มันก็เหมือนกับ Tumblr
>> นักเรียน 18: เท่ากับ fopen -
>> เจสัน Hirschhorn: เท่ากับ fopen?
>> นักเรียน 18: เปิด paren, argv วงเล็บเปิด
>> เจสัน Hirschhorn: รอ
ขอโทษ
วงเล็บเปิด
ตกลง
>> นักเรียน 18: ใช่
argv 1 ย่อย
>> เจสัน Hirschhorn: ตำบล 1?
>> นักเรียน 18: ใช่
argv เปิดวงเล็บ 1 -
ใช่
แล้วจุลภาคแล้วเปิดคู่ อ้าง r พูดคู่
วงเล็บปิดอัฒภาค
>> เจสัน Hirschhorn: หวาน
และสิ่งที่เกี่ยวกับคนอื่น ๆ
>> นักเรียน 18: คล้าย แต่แทนที่จะ ของ S-R-C คุณจะเรียกมันว่า D-S-T
>> เจสัน Hirschhorn: Oo!
ฉันชอบที่
>> นักเรียน 18: เพียงแค่ D-S-T ใช่
แล้ว argv วงเล็บเปิด 2
ใช่
แล้วน้ำหนักแทน r
ใช่
>> เจสัน Hirschhorn: Great
คู่ถัดไปของสาย
นอกจากนี้ถ้าใครมีสิ่งที่จะเพิ่ม เส้นที่เราได้ทำอย่าลังเลที่จะ
เพิ่มเหล่านั้นเช่นกัน
ตรวจสอบให้แน่ใจว่าไม่เป็นโมฆะ
ที่สามารถให้ฉันรหัสฉันต้อง ตอบสนองแนว pseudocode ที่
ธนู
>> ธนู: ถ้า src เท่ากับเท่ากับ โมฆะหรือ dst เท่ากับเท่ากับ
โมฆะแล้วคุณกลับ -
>> เจสัน Hirschhorn: อะไรนะ?
>> ธนู: กลับ 2?
>> เจสัน Hirschhorn: กลับ 2
ดังนั้นหาก paren เปิด src เท่ากับ เท่ากับโมฆะหรือ -
สิ่งที่ thing's - ท่อ?
ท่อ?
เราจะเรียกว่าท่อ
ท่อท่อ dst เท่ากับเท่ากับ โมฆะกลับ 2
OK?
จนกว่าเราจะออกจากไบต์ -
เราเรียงลำดับของการข้ามขั้นตอนนี้จาก ส่วน pseudocode เพื่อจะไปที่นี่
>> แต่จนกว่าเราจะออกจากไบต์ - สิ่งที่ไม่ว่าเสียงเป็นอย่างไร
สิ่งที่ประเภทของโครงสร้างซี -
แต่ฉันไม่ได้ใช้โครงสร้างคำ เพราะเรากำลังจะเริ่มต้นใช้
ว่าในกรณีอื่น ๆ -
แต่เครื่องมือ C เสียงที่ได้อย่างไร
>> นักเรียน 19: ห่วง
>> เจสัน Hirschhorn: ห่วง
เสียงเหมือนห่วง
ดังนั้นผู้ที่สามารถให้ฉันบรรทัดแรก วงของรหัสที่นี่?
นอกจากนี้คุณยังสามารถเลือกชนิดของ วงที่คุณต้องการถ้าคุณให้ฉัน
บรรทัดของรหัสนี้
มีสามชนิด
คุณได้รับเลือก
ฉันขอแนะนำหนึ่งในบรรดา
avi
ซึ่งหนึ่งคุณต้องการได้หรือไม่
>> AVI: สำหรับ
>> เจสัน Hirschhorn: สำหรับ
>> AVI: Int i เท่ากับศูนย์
>> เจสัน Hirschhorn: OK
>> AVI: ส่วนนี้ผมไม่แน่ใจว่าเกี่ยวกับ
แต่ฉันมีค่าน้อยกว่าขนาด แหล่งที่มาของดาว?
ผมไม่แน่ใจว่าที่
>> เจสัน Hirschhorn: OK
>> AVI: เพราะคุณต้องการ ขนาดของไฟล์ใช่ไหม
>> เจสัน Hirschhorn: ดังนั้นนี้อาจจะไม่ ให้เราขนาดของจริง
ยื่นไบต์
ดังนั้นอะไรที่เราควรทำอย่างไร
เป็นชนิดของวงอื่นคืออะไร
หรือเราควรจะยึดติดอยู่กับห่วงสำหรับ?
>> นักเรียน 20: คุณสามารถทำวงในขณะหรือไม่
และแล้วสิ่งที่คุณต้องการทำคือ you'd -
เพราะเรามี char * สำหรับแฟ้ม
ดังนั้นถ้าเราเพียงแค่ให้เพิ่มขึ้นที่ จนกว่าเราจะต้องการหาอักขระที่มีค่าที่
จุดสิ้นสุดของมันได้หรือไม่
หรือไม่เป็นที่ไม่ว่าไฟล์ที่ทำงานอย่างไร
>> เจสัน Hirschhorn: ดังนั้นเราสามารถเก็บ incrementing ถ่าน *
จนกว่าเราจะหาโมฆะ -
>> นักเรียน 20: เป็นหลักให้ไป ตัวอักษรตามตัวอักษรจนกว่าเราจะตี
ส่วนท้ายของแฟ้ม
>> เจสัน Hirschhorn: ใช่
ดังนั้นนั่นคือสิ่งที่เราต้องการจะทำ
เราต้องการที่จะให้อ่านตัวอักษร ด้วยตัวอักษรจนกว่าเราจะได้รับ
ส่วนท้ายของแฟ้ม
>> นักเรียน 20: ใช่
ค้นหา -
สิ่งที่สิ้นสุดหรือป้าย ที่ส่วนท้ายของแฟ้มข้อความ
>> เจสัน Hirschhorn: OK
ดังนั้นเมื่อเราได้รับการสิ้นสุดของไฟล์ - ทำอย่างไรเราจะรู้ว่าเราได้มาถึง
ในตอนท้ายของไฟล์หรือไม่
ถ้าฉันโทร -
จึงขอย้อนกลับไป
ฟังก์ชั่นคืออะไร
ลองไปที่บรรทัดนี้ที่นี่
อ่านจากแฟ้มแหล่งที่มา
ที่สามารถให้ฉันบรรทัดของรหัสที่
>> นักเรียน 21: fscanf?
>> เจสัน Hirschhorn: fscanf
ตกลง
หากฉันต้องการที่จะอ่านมาก โดยเฉพาะหนึ่งไบต์?
>> นักเรียน 21: ผมไม่ทราบว่า
>> เจสัน Hirschhorn: OK
ได้ง่ายกว่า fscanf - สิ่งที่ -
ผมต้องการที่จะอ่านจากแฟ้มแหล่งที่มา?
อ่านจากแฟ้มแหล่งที่มา
เป็นสิ่งที่ฟังก์ชั่น - ใช่
>> นักเรียน 22: มันเป็น fread?
>> เจสัน Hirschhorn: fread
ผมคิดว่าเราจะมาติดกับ สำหรับตอนนี้ที่
ชนิดของการขัดแย้ง ไม่ fread ใช้เวลา
>> นักเรียน 22: น่าจะเป็นประเภทไฟล์ แล้วตำแหน่งในไฟล์หรือไม่
>> เจสัน Hirschhorn: สิ่งที่ฉันสามารถพิมพ์ที่นี่ ที่จะคิดออกว่าสิ่งที่ประเภทของการขัดแย้ง
fread จะ?
>> นักเรียนหลาย: คน fread
>> เจสัน Hirschhorn: คน fread และ fwrite
ดูเหมือนว่าพวกเขาออกไปเที่ยวด้วยกัน
ดังนั้น fread ใช้อาร์กิวเมนต์กี่
>> นักเรียน 23: สี่
>> เจสัน Hirschhorn: มันจะใช้เวลา สี่ข้อโต้แย้ง
มันต้องใช้ตัวชี้ขนาดและที่ สิ่งซึ่งเป็นที่แปลกและบางไฟล์
OK?
ลองอ่านเกี่ยวกับมันที่นี่
"fread ฟังก์ชันอ่าน n memb องค์ประกอบของข้อมูลไบต์แต่ละขนาด
ยาวจากกระแสชี้ไป สตรีมเก็บไว้ในสถานที่
ที่ได้รับจากตัวชี้. "
>> ดังนั้นสี่ข้อโต้แย้ง
ทำไมฉันจึงไม่เพียงแค่คัดลอกนี้ และวางไว้ที่นี่
ตกลง
ดังนั้นผู้ที่สามารถเริ่มต้นการกรอก ข้อโต้แย้งเหล่านี้สำหรับฉันหรือไม่
avi
>> AVI: จะออกเป็นโมฆะ
เพียงแค่ใส่ src
จะออกตัวชี้และดาว
ใส่ src
- แล้ว
>> เจสัน Hirschhorn: ดังนั้นฉันจะหยุด คุณไปที่นั่นเพราะที่ไม่ถูกต้อง
คุณขวาด้วย src แต่ ที่ src ควรจะไป?
>> [VOICES interposing]
>> เจสัน Hirschhorn: มันควรจะเป็น ไปกว่าที่นี่
ที่ src - src ของเราเป็นชนิด
ลองดูที่นี่
นี้จะขอ * ประเภทไฟล์เรา จริงมักจะเห็นพวกเขาเช่นนั้น
ดังนั้นนี่จะขอโต้แย้งของ ประเภท FILE * กระแสเรียกที่เป็น src
OK?
>> ขนาดอะไรในสิ่งที่ทำ เราต้องการที่จะอ่าน
ฉันให้คุณนี้ใน คำอธิบายปัญหา
>> นักเรียน 24: หนึ่งไบต์ในเวลา
>> เจสัน Hirschhorn: หนึ่งไบต์
วิธีการใหญ่ไบต์คืออะไร
ขนาดของมันที่อยู่ในไบต์ดังนั้นสิ่งที่ ฉันสามารถวางที่นั่น
>> นักเรียน 25: หนึ่ง
>> เจสัน Hirschhorn: หนึ่ง
ขวา
ขนาดของมันจะอยู่ในหน่วยไบต์ ดังนั้น 1 เป็น 1 ไบต์
ฉันไม่กี่ต้องการที่จะอ่านในเวลา
>> นักเรียน 26: หนึ่ง?
>> เจสัน Hirschhorn: สิ่งหนึ่งที่
ฉันต้องการที่จะอ่านสิ่งหนึ่งที่มีขนาด 1 หนึ่งกัดในเวลา
และฉันจะใส่มันเมื่อฉันอ่านมันได้หรือไม่
>> นักเรียน 27: ปลายทาง?
>> เจสัน Hirschhorn: ดังนั้นผมจึงไม่สามารถใส่ มันตรงเข้ามาในหัวข้อ
>> นักเรียน 28: คุณจะใส่ มันเป็นตัวชี้ที่สาม
>> นักเรียน 27: เพื่อไปยังจุดหมาย
>> เจสัน Hirschhorn: OK
ใช่
>> นักเรียน 29: คุณสามารถประกาศสิ่งที่จะ ทำหน้าที่เป็นที่เก็บชั่วคราวก่อนหน้านี้
>> เจสัน Hirschhorn: OK
ให้ฉันที่
>> นักเรียน 29: ไฟล์อีก ชี้อาจจะ?
>> เจสัน Hirschhorn: OK
ดังนั้นนี่คือดาวเป็นโมฆะ -
ก็ชนิดโมฆะดาวดังนั้นมันไม่ได้ จะต้องมีตัวชี้แฟ้ม
และถ้าฉันอ่านหนึ่งไบต์ ที่จะเป็นสถานที่ที่ดี
ในการจัดเก็บหนึ่งไบต์?
>> นักเรียน 29: อาร์เรย์?
>> เจสัน Hirschhorn อาร์เรย์
ตกลง
และอะไรคือสิ่งที่เป็น เพียงแค่ขนาดหนึ่งไบต์?
>> นักเรียน 30: char *?
>> นักเรียน 29: ใช่
>> เจสัน Hirschhorn: ถ่าน * ไม่ได้เป็นหนึ่งไบต์
>> นักเรียน 29: ถ่าน
>> เจสัน Hirschhorn: ถ่านเป็นหนึ่งไบต์
ใช่มั้ย?
ดังนั้นขอเรียกบัฟเฟอร์นี้เป็นทั่วไป ชื่อที่ใช้สิ่งเหล่านี้ในการจัดเก็บ
สิ่งชั่วคราว
ดังนั้นผมจึงสร้างบัฟเฟอร์
ใช่มั้ย?
แต่จะใช้เวลาเป็นโมฆะ *
ดังนั้นบางทีคุณมีสิทธิที่จะ ควรจะเป็นกันชนขนาด 0
ดังนั้นจะเก็บหนึ่ง -
ขวา
>> เพราะตอนนี้ที่นี่ - ถ่าน บัฟเฟอร์เป็นตัวละคร แต่
นี้จะเป็นโมฆะ * -
ตัวชี้
ดังนั้นผมสามารถทำเช่นนี้และตอนนี้ บัฟเฟอร์เป็นตัวชี้
อะไรที่ฉันจะทำอย่างไร
>> นักเรียน 31: ใส่ดาวถัดจากถ่าน
>> เจสัน Hirschhorn: ฉันสามารถ ได้สร้างมันถ่าน *
ตกลง
อะไรเป็นสิ่งที่ฉันสามารถทำอื่นได้หรือไม่
หรือให้เป็นไปด้วยนี้
char * บัฟเฟอร์ดังนั้นสิ่งที่ ฉันจะใส่ในที่นี่
>> นักเรียน 31: บัฟเฟอร์
>> เจสัน Hirschhorn: บัฟเฟอร์
บัฟเฟอร์ตัวชี้ไปยังถ่าน
และอยู่ในตำแหน่งที่เรากำลังวาง หนึ่งไบต์ของสิ่งที่เราได้อ่าน
ใช่
avi
>> AVI: เพียงคำถามอย่างรวดเร็ว
คุณต้องการที่จะ malloc บัฟเฟอร์?
>> เจสัน Hirschhorn: ใครสามารถ ตอบคำถามที่
>> นักเรียน 32: ดีมันไม่ได้จริงๆ ชี้ไปที่อะไรตอนนี้ดังนั้น -
>> เจสัน Hirschhorn: แต่ทำ เราต้องการที่จะ malloc มันได้หรือไม่
>> นักเรียน 32: ถ้าคุณได้ทำมันที่ วิธีที่ผมคิดว่าใช่เพราะคุณจะต้อง
สถานที่ที่มันจะชี้ไปที่บาง
>> เจสัน Hirschhorn: เรา ต้อง malloc มันได้หรือไม่
>> นักเรียน 33: หากคุณกำลังจะ ใช้มันนอกวง
>> เจสัน Hirschhorn: พวกเราจะไป ใช้มันนอกวงหรือไม่
>> นักเรียน 34: ใช่
>> นักเรียน 35: รอ
เราต้องการที่จะประกาศว่า ในวงที่จะเกินหรือไม่
>> เจสัน Hirschhorn: ดังนั้นผมคิดว่าเรามี หลอกบางวงในขณะที่นี่ว่าเรา
พยายามที่จะคิดออกว่า เรายังไม่ได้อากาศไปยัง
เราไม่จำเป็นต้อง malloc มัน
เรากำลังทำงานอยู่ในหลักก็เพียงจะ เพื่อนำไปใช้ในวงนี้
มันไม่จำเป็นที่จะต้องมีอยู่ นอกนี้
>> เพื่อที่จะสามารถตัวแปรท้องถิ่น
คุณมีตัวชี้ไปยัง ตัวแปรท้องถิ่น
>> นักเรียน 36: แต่มันก็ไม่ได้ ชี้ไปที่อะไร
>> เจสัน Hirschhorn: ไม่มีก็ไม่ได้ เริ่มต้นกับสิ่งใด
แต่เราจะไม่ใช้มันยัง
เราจะนำสิ่งที่อยู่ใน มันเป็นครั้งแรกที่เราใช้มัน
เพื่อให้ดูเหมือนว่าตกลง
ดังนั้นเราจึงไม่จำเป็นต้อง malloc ที่นี่
และฉันคิดว่ามันโอเคเป็น
ตกลง
ขณะนี้มีสาย fread
ขอทำบรรทัดถัดไป
>> ถ้าเราต้องการที่จะเขียนไปยังแฟ้มสิ่งที่เป็น ฟังก์ชั่นที่ดีที่จะใช้ในการทำเช่นนั้น
>> นักเรียน 37: fwrite?
>> นักเรียน 38: fprintf?
>> เจสัน Hirschhorn: fprintf เป็นหนึ่งใน
อะไรอีกหรือไม่
>> นักเรียน 39: fwrite
>> เจสัน Hirschhorn: fwrite
และสำหรับวัตถุประสงค์ของเรา fwrite, ซึ่งเราได้เห็นที่นี่เป็น
น่าจะเป็นทางเลือกที่ดี
มันใช้เวลาสี่ขัดแย้งได้เป็นอย่างดี
Nishant คุณสามารถให้ ฉันขัดแย้งหรือไม่
>> Nishant: กำลังคนแรกของ จะเป็นเพียงบัฟเฟอร์
>> เจสัน Hirschhorn: OK
>> Nishant: สองหนึ่ง ก็จะเป็น 1
หนึ่งในสามเป็นไปได้ 1
และหนึ่งในสี่เป็นไปได้ dst
>> เจสัน Hirschhorn: ไม่มีใครมี คำถามใด ๆ เกี่ยวกับเส้นที่
ที่ดูดี
ตกลง
ดังนั้นตอนนี้ดูเหมือนว่าสิ่งหนึ่งที่เรากำลัง ที่หายไป - จริงให้เขียน
บรรทัดสุดท้ายนี้
ปิดไฟล์
ที่สามารถเสร็จเราเขียน เหล่านี้สองบรรทัดสุดท้าย?
ใช่
ขออภัยสิ่งที่ชื่อของคุณหรือไม่
>> ลูซี่ลูซี่
>> เจสัน Hirschhorn: ลูซี่
>> ลูซี่ src fclose แล้ว หัวข้อ fclose
>> เจสัน Hirschhorn: fclose, วงเล็บเปิด src, paren ปิดอัฒภาค
และ fclose -
ใช่?
>> ลูซี่เปิดวงเล็บ dst และอัฒภาคแล้ว
>> เจสัน Hirschhorn: Great
และสิ่งที่ฉันควรจะมีที่สิ้นสุดหรือไม่
>> ลูซี่กลับ 0
>> เจสัน Hirschhorn: กลับ 0
ฉันต้อง?
เพียงคำถาม
เราจะต้องมีการกลับ 0?
>> นักเรียนหลาย: เลขที่
>> เจสัน Hirschhorn: เลขที่
หลักไม่ได้โดยอัตโนมัติ ถ้าคุณได้รับการสิ้นสุด
แต่ผมคิดว่ามันเป็นที่ดีที่จะ รวมไว้อย่างชัดเจน
โดยเฉพาะอย่างยิ่งเมื่อเรากำลังจะกลับมาอีก สิ่งที่ตลอดโปรแกรม
ตกลง
นี่คือสิ่งที่เราหายไป -
ในขณะที่สิ่งที่
ใครจะคิดว่าบาง -
มีความรู้สึกของบางสิ่ง อาจจะไปอยู่ที่นั่น?
แม้ว่าจะเป็นเพียงในบาง pseudocode เช่นภาษา?
>> สิ่งที่เป็นเราจริงๆ - สิ่งที่ เราต้องการที่จะไปจนกว่า?
ใช่ลูซี่
>> ลูซี่ท้ายของแฟ้ม
>> เจสัน Hirschhorn: จุดสิ้นสุดของแฟ้ม
ดังนั้นสิ่งที่คุณหมายถึงโดยจุดสิ้นสุดของไฟล์
>> ลูซี่เมื่อคุณเข้าถึง ส่วนท้ายของแฟ้มหยุด
>> เจสัน Hirschhorn: OK
ดังนั้นเมื่อเราถึงจุดสิ้นสุดของแฟ้ม
เราจะรู้ได้อย่างไรเมื่อเราได้มาถึง ในตอนท้ายของไฟล์หรือไม่
>> นักเรียน 40: ผมคิดว่ากันชน จะถูกตั้งค่าเป็นศูนย์
>> นักเรียน 41: บัฟเฟอร์มีการประกาศ ภายในวง
>> เจสัน Hirschhorn: ดังนั้นคุณคิดว่า บัฟเฟอร์จะถูกตั้งค่าเป็นศูนย์
ทำไมจะบัฟเฟอร์ถูกตั้งค่าเป็น NULL?
>> นักเรียน 40: เพราะเมื่อคุณ fread คุณกำลังพยายามที่จะนำ
ไม่มีอะไรเป็นกันชน
>> เจสัน Hirschhorn: OK
ดังนั้นคุณกำลังคิด fread -
เมื่อเราได้มาถึงจุดสิ้นสุดของ แฟ้มสิ่งที่ fread จะทำอย่างไร
ผมคิดว่าเป็นคำถาม เราต้องคิดออก
สิ่งที่ไม่ fread ทำอย่างไร
ที่ไม่ได้ใส่โมฆะในบัฟเฟอร์หรือ ที่ไม่ได้ทำสิ่งอื่นใด
วิธีที่เราสามารถคิดออกสิ่งที่มันไม่?
>> นักเรียน 42: คน
>> เจสัน Hirschhorn: คน
เพื่อให้ดูมากกว่าที่นี่
ค่าตอบแทน
ในความสำเร็จ fread และ fwrite กลับ จำนวนรายการที่อ่านหรือเขียน
หมายเลขนี้เท่ากับจำนวนของไบต์ โอนเฉพาะเมื่อขนาด 1
หากมีข้อผิดพลาดเกิดขึ้นหรือจุดสิ้นสุดของ แฟ้มจะถึงค่าตอบแทนเ​​ป็น
นับรายการสั้นหรือ 0
>> ดังนั้นสำหรับวัตถุประสงค์ของเราถ้าถึง fread ในตอนท้ายของไฟล์และอ่านจาก
ส่วนท้ายของแฟ้มที่มีอะไรเหลือเป็น การอ่านสิ่งที่มันจะกลับมา?
>> นักเรียน 43: ศูนย์?
>> เจสัน Hirschhorn: อะไรนะ?
>> นักเรียน 43: ศูนย์?
>> เจสัน Hirschhorn: ศูนย์
มันจะกลับเป็นศูนย์
เพื่อให้เรารู้ fread ว่าเมื่อเราได้ ถึงจุดสิ้นสุดของไฟล์ที่เป็นไป
เพื่อกลับไปเป็นศูนย์
วิธีการที่เราสามารถใช้ที่เพื่อประโยชน์ของเราหรือไม่
>> AVI: คุณสามารถประกาศตัวแปรภายนอก ของวงที่เรียกว่าการตรวจสอบ
หากตร​​วจสอบเท่ากับ -
สำหรับวันนี้ - หนึ่ง
>> เจสัน Hirschhorn: OK
>> AVI: และจากนั้นคุณสามารถใส่ IF งบขวาหลังจาก fread บอกว่าถ้า
fread เท่ากับศูนย์ -
ไม่
>> เจสัน Hirschhorn: ใคร สามารถช่วย Avi ออก
>> AVI: อะไรคือค่า ส่งกลับโดย fread?
>> เจสัน Hirschhorn: เราเพียงแค่ เดินไปที่
>> AVI: คุณเป็นตัวแทนของมันได้อย่างไร
>> เจสัน Hirschhorn: ดังนั้นมันกลับ - ขอ ดูได้ที่นี่ - มันกลับ
size_t ซึ่งเป็นหลัก จำนวนเต็ม
ดังนั้นมันกลับจำนวนเต็ม
และในกรณีของเราก็จะ กลับ 1 หรือ 0 -
1 ถ้าอ่านสิ่งหนึ่ง - หนึ่งไบต์ และ 0 ถ้าเราได้ถึงจุดสิ้นสุด
ดังนั้นหาก fread -
ใช่?
>> นักเรียน 45: คุณไม่สามารถเพียงแค่ใส่เต็ม fread (บัฟเฟอร์, 1, 1, src) ลงใน
ในขณะที่ห่วง?
>> เจสัน Hirschhorn: ดังนั้นคุณเสนอ การทำเช่นนี้เป็นมี
>> [VOICES interposing]
>> เจสัน Hirschhorn: ยึดมั่นใน
ดังนั้นเรา ridding ของที่
ดังนั้นคุณเสนอวาง fread เข้าไปมี?
สิ่งที่เราควรจะย้าย ถ้าคุณต้องการที่จะทำเช่นนั้น
>> นักเรียน 45: บัฟเฟอร์นอก
>> เจสัน Hirschhorn: เราควร ยังย้ายนี้ออกจากที่นี่
>> นักเรียน 45: แต่ไม่ว่าอย่างต่อเนื่อง ย้ายไปข้างหน้า
>> [VOICES interposing]
>> เจสัน Hirschhorn: OK
ดังนั้นนี่คือสิ่ง Okshar เสนอ
เราสร้างบัฟเฟอร์ของเรา
ในขณะที่เรา fread แล้วเรา fwrite
ความคิดเกี่ยวกับเรื่องนี้?
>> นักเรียน 46: คำถามเดียวของฉันคือจะ มันจริง fread รันคำสั่งหรือไม่
>> เจสัน Hirschhorn: Great คำถาม
เมื่อคุณวางสายงาน ภายในสภาพไม่ว่า
การเรียกใช้ฟังก์ชันรัน
เราได้เห็นตัวอย่างของการนี​​้มาก่อน
ใช่มั้ย?
>> นักเรียน 46: ตกลง
ใช่
จึงไม่ดำเนินการ
>> เจสัน Hirschhorn: เราได้เห็นสิ่งที่ เช่นว่าก่อนที่เรามี
การเรียกใช้ฟังก์ชันภายในของสภาพ
ไม่เรียกใช้ฟังก์ชันที่รัน
ใช่
ดังนั้นคำตอบคือใช่
การเรียกใช้ฟังก์ชันนี้จะดำเนินการ
แต่อีกครั้งก็เป็นสิ่งที่เราต้องการได้หรือไม่
>> สิ่งที่เป็นวิธีหนึ่งที่เราสามารถคิด ว่ามันคือสิ่งที่เราต้องการได้หรือไม่
>> นักเรียนหลาย: เรียกใช้มันได้หรือไม่
>> เจสัน Hirschhorn: เราสามารถเรียกใช้มัน
แต่ก่อนที่เราจะทำอย่างไรที่เราจะทำได้ นอกจากนี้ยังมีเหตุผลผ่านทางนี้
ถ้า -
ว่าเรามีหนึ่งไบต์ในของเรา ไฟล์เราจะให้ที่นี่
เราจะให้รหัสนี้
นี้จะทำงาน
fread จะกลับหนึ่งไบต์และ เก็บไว้ในบัฟเฟอร์
และจะประเมินถึง 1, ขวาหลังจากที่เขากลับมาที่ 1
>> ดังนั้นในขณะที่ 1
ไม่ว่าหมายถึงรหัสภายใน วงในขณะที่จะรัน
>> นักเรียน 47: ใช่
มันเป็นความจริง
>> เจสัน Hirschhorn: ใช่
1 เป็นความจริง
มันไม่ 0
ดังนั้นรหัสภายในที่นี่จะดำเนินการ
ดังนั้นเราจะเขียนว่า
เราจะย้ายกลับไปนี้ สายอีกครั้ง
ตอนนี้เรามี -
เราอยู่ที่ส่วนท้ายของแฟ้มของเรา
เราอ่านจากจุดสิ้นสุดของไฟล์ของเรา เพราะเรามีเพียงหนึ่งไบต์ในนั้น
>> fread กลับ 0 ร้านค้า บางสิ่งบางอย่างในบัฟเฟอร์
ฉันสุจริตไม่ทราบว่าสิ่งที่ จะเก็บในบัฟเฟอร์
เราอาจจะมองขึ้นไป เพื่อดูสิ่งที่มันไม่
ที่ฉันสุจริตไม่ทราบว่า
เราไม่ทราบที่ใส่ใจสิ่งที่ จะเก็บในบัฟเฟอร์?
แต่มันก็ไม่กลับ 0
และจะดำเนินการในขณะที่ 0?
>> ในขณะที่ 0 จะไม่ดำเนินการ
ดังนั้นแล้วเราจะย้ายไปลงที่นี่
จึงขอได้แสดงของมือที่ว่านี้ เป็นรหัสที่เราควรจะทำงานหรือถ้าเรา
ควรจะทำอย่างไรการเปลี่ยนแปลงครั้งแรก
ดังนั้นถ้าคุณคิดว่า - คุณมีการลงคะแนนเสียง
หากคุณคิดว่าเราควรเรียกใช้รหัสนี้ ตามที่เป็นอยู่โปรดยกมือของคุณ
>> ตกลง
มีหนึ่ง -
คุณมีคำถามความกังวล?
ใช่
>> นักเรียน 48: หลังจากที่เราย้ายบัฟเฟอร์ นอกวงเราทำ
ต้อง malloc มันได้หรือไม่
>> เจสัน Hirschhorn: Great คำถาม
หลังจากที่เราย้ายไปที่ด้านนอกของกันชน วงเราจะต้อง malloc มันได้หรือไม่
นี่คือคำถามที่ขอบเขต
ถ้าเราเริ่มต้น buffer นอก ของวงนี้ก็จะมีอยู่
ด้านในของวงหรือไม่
>> นักเรียนหลาย: ใช่
>> เจสัน Hirschhorn: ใช่
ขอบเขตที่ครอบคลุมด้านในของวง และจริงๆสิ่งที่อยู่ด้านล่างภายใน
ของรหัสนี้รวมถึง สิ่งที่อยู่ข้างในที่นี่
ดังนั้นเราจึงไม่จำเป็นต้อง malloc มัน
มันเป็นตัวแปรท้องถิ่นและขอบเขตของ รวมถึงยังคงห่วง
>> นักเรียน 49: เราจำเป็นต้องที่จะเป็นอิสระได้หรือไม่
>> เจสัน Hirschhorn: เรา ต้องบัฟเฟอร์ฟรีหรือเปล่า
>> นักเรียน 49: ใช่ถ้าเราไม่ malloc
>> เจสัน Hirschhorn: เรา ต้องบัฟเฟอร์ฟรีหรือเปล่า
ที่เราทำไม่ได้
อีกครั้งก็เป็นตัวแปรท้องถิ่น ดังนั้นเราจึงไม่จำเป็นต้องเป็นอิสระ
ตกลง
ลองดูสิ่งที่เกิดขึ้น
ดังนั้นจึงเป็นสิ่งที่ไม่ได้เตรียม
นั่นคือสิ่งที่สิ่งที่ มาร์คัสเสนอก่อนหน้านี้
ดังนั้นเราจึงมีข้อผิดพลาดที่บัฟเฟอร์ตัวแปร เป็น uninitialized เมื่อนำมาใช้ที่นี่
>> วิธีที่เราสามารถแก้ไขปัญหานี้
>> นักเรียน 50: malloc มันได้หรือไม่
>> นักเรียน 51: เท่ากับโมฆะ?
>> นักเรียน 52: บัฟเฟอร์พูดเท่ากับโมฆะ
>> เจสัน Hirschhorn: OK
ดูดี
เรามีตอนนี้
ลองสร้างสิ่งที่จะพยายามคัดลอก
ดังนั้นเราจึงมีแฟ้มข้อความของเรา
วิธีการที่เราสามารถเรียกใช้โปรแกรมนี้
ใช่
>> นักเรียน 53: คุณสามารถทำจุด เฉือน cp, test.txt
และจากนั้นคุณสามารถตั้งชื่อไฟล์อื่น ซึ่งมันจะเก็บเป็น
>> เจสัน Hirschhorn: OK
เราจะเรียกว่า out.txt
เย็น
ความผิด seg
ความคิดเกี่ยวกับความผิด seg ของหรือไม่
นี้ดีมาก
วิธีที่เราสามารถหาที่ seg ​​ของความผิดคืออะไร
คืออะไร?
>> นักเรียน 54: GDB
>> เจสัน Hirschhorn: GDB
เราทำงานโดยการเขียน gdb gdb จุดเฉือน, ชื่อของโปรแกรมของเรา
ไม่มีอาร์กิวเมนต์บรรทัดคำสั่งมี
เรากำลังจะตั้ง จุดพักที่หลัก
ถ้าผมต้องการที่จะเริ่มต้น gdb สิ่งที่ฉันจะทำอย่างไร
>> นักเรียน 55: อาร์
>> เจสัน Hirschhorn: อาร์และแล้วสิ่งที่
>> นักเรียน 55: ข้อโต้แย้ง?
>> เจสัน Hirschhorn: แล้ว อาร์กิวเมนต์บรรทัดคำสั่ง
ลองเดินผ่าน
ยังไม่มีเป็นเพียงการพาผมทีละบรรทัด
ฉันจะไปจนกว่า ฉันจะได้รับความผิด seg ของฉัน
มีความผิด seg ของฉัน
ดูเหมือนว่า fread เกิด ความผิด seg ของฉัน
ฉันรู้ว่าเกิดความผิด fread seg ของฉัน เพราะเห็นว่าเป็น
สายเราก็ดำเนินการ
>> และสิ่งเดียวที่เป็น ที่เกิดขึ้นในบรรทัดที่ -
สองสิ่งที่เกิดขึ้น
fread เป็นไปแล้วเรา ทำในขณะที่บางการตรวจสอบ
ฉันยินดีที่จะเดิมพันว่าในขณะที่ การตรวจสอบก็ไม่ได้ก่อให้เกิดความผิด seg ของฉัน
ส่วนใหญ่แล้วเป็น fread ก่อให้เกิดความผิด seg ของฉัน
ฉันยังเห็นบางสิ่งบางอย่างที่นี่ memcopy
>> สำเนาหน่วยความจำ
เสียงเหมือนการย้ายหน่วยความจำจาก สถานที่หนึ่งไปยังอีก
เสียงเหมือนอะไรบางอย่างที่จะเกิดขึ้น ใน fread อาจหน่วยความจำบาง
ย้ายจากที่นี่ไปที่นี่
ให้เป็นไปผ่านทางนี้อีกครั้ง
ฉันจะเริ่มต้นมันมากกว่า และเรียกใช้อีกครั้งหรือไม่
ใช่
>> นักเรียน 56: คุณจะต้องใส่ เครื่องหมายก่อนบัฟเฟอร์?
>> เจสัน Hirschhorn: ดังนั้นเครื่องหมายก่อน บัฟเฟอร์จะให้ฉันที่อยู่ของ
บัฟเฟอร์ซึ่งเป็นถ่าน *
ขอใช้ผ่านทางนี้อีกครั้งหนึ่ง
ฉันจะทำงานผ่านมันได้อีกครั้งหนึ่ง
>> นักเรียน 57: คุณสามารถเพียงแค่ พิมพ์ที่ทำงานอีกครั้งหรือไม่
>> เจสัน Hirschhorn: เพียงพิมพ์การทำงานอีกครั้ง
ดังนั้นเราจะไม่ รันบรรทัดนี้
ดังนั้นบัฟเฟอร์เป็นตัวชี้โมฆะ
ถูกต้องหรือไม่
มันจะชี้ไปที่ - เรามาดู
ถ้าเรามีเรา -
วาดภาพได้อย่างรวดเร็วนี้
ทุกคนสามารถดูได้ว่า ที่ผมเขียนไปที่นี่?
>> ดังนั้นในกองเรามีในท้องถิ่น ตัวแปรและก็เรียกว่าบัฟเฟอร์และ
เป็นตัวชี้ไปยังถ่าน
อะไรที่อยู่เป็นถ่านนี้ที่?
>> นักเรียน 58: 0x0
>> เจสัน Hirschhorn ขวา
นั่นคือสิ่งที่เป็น
ในที่นี่ภายในบัฟเฟอร์จะถูกเก็บไว้ 0x0
นั่นคือสิ่งที่เรามี - การตั้งค่าที่เรามีตอนนี้
ดังนั้นบรรทัดนี้ fread ทำให้บางสิ่งบางอย่าง จากแหล่งที่มาอยู่ที่ไหน
ลงในช่องนี้หรือกล่องนี้
กล่องไหน
กล่องหรือกล่องด้านขวาซ้าย
ช่องขวานี้
>> มันเป็นไปตามตัวชี้ และทำให้มันอยู่ในที่นี่
เมื่อเราพยายามและหน่วยความจำสัมผัสที่ สถานที่ 0, สิ่งที่เราได้รับ
ความผิดส่วน
นั่นคือความผิดพลาดที่เรามีตอนนี้
ใช่
>> นักเรียน 59: คุณไม่ได้ ใส่กันชนดาว?
หรือไม่ได้หรือไม่
สำหรับ fread?
>> เจสัน Hirschhorn: ดังนั้น fread ใช้ตัวชี้
ดังนั้นมันผ่านในบัฟเฟอร์
และจากนั้นก็จะยกเลิกการอ้างอิง มันอยู่ที่ไหนสักแห่งภายใน fread
แต่อีกครั้งที่เราเห็นก็จะใช้เวลาชี้
เราไม่จำเป็นที่จะผ่านมันบัฟเฟอร์ดาว
ที่จะผ่าน มันสิ่งที่นี่
และนั่นอาจจะทำให้เรามีข้อผิดพลาด เพราะเรากำลังยกเลิกการอ้างอิงนั้น
>> ใช่มั้ย?
เมื่อเรายกเลิกการอ้างอิงตัวชี้นี้เมื่อ เราพยายามที่จะเข้าสู่ตำแหน่งนี้
เราได้รับข้อผิดพลาด - ความผิดส่วนของเรา
ดังนั้น -
อุ่ย
เรากำลังจะออกจาก gdb
สายของเรา -
ปัญหาของเรา - ที่ถูกต้อง ที่นี่ในสายนี้
และมันก็เป็นปัญหาเพราะ ของสายนี้
>> วิธีที่เราสามารถสร้างกล่องที่ สามารถเข้าถึงได้ใน fread
ใช่มั้ย?
เราจำเป็นต้องสร้างกล่องที่หนึ่ง ไบต์ขนาดใหญ่ขนาดของถ่าน
แต่เราจำเป็นต้องกล่องที่จะสามารถเข้าถึง เมื่อฟังก์ชั่นนี้ดำเนินการ
เพื่อที่ -
ใช่
ความคิดใด?
>> นักเรียน 60: เพียงแค่ตั้งค่าเป็น ตัวอักษรแบบสุ่มใด ๆ
เพียงแค่ทำเท่ากับบัฟเฟอร์ถ่าน ตัวละคร
และจากนั้นเมื่อคุณได้ buffer มี -
>> เจสัน Hirschhorn: รอ
ถ่าน buffer?
จึงไม่มีดาว?
>> นักเรียน 60: ใช่
จะออกจากดาว
เท่ากับเป็นตัวละครที่สุ่ม
>> เจสัน Hirschhorn: OK
เพื่อให้ฉันหนึ่ง
>> นักเรียน 60: เหมือนหรือสิ่งที่
และจากนั้นเมื่อคุณมีบัฟเฟอร์ มีคุณใช้ -
>> นักเรียน 61: สตาร์?
โอ้ไม่เครื่องหมาย
>> นักเรียน 60: ใช้เครื่องหมาย
>> เจสัน Hirschhorn: OK
และสิ่งที่เกี่ยวกับใน fwrite?
>> นักเรียน 60: ใช้เครื่องหมายอีกครั้ง
>> เจสัน Hirschhorn: ทั้งหมดขวา
ดังนั้นความคิดของคุณก็คือเราสร้างถ่านและ นำสิ่งที่อยู่ในนั้นแล้ว
เขียนถึงถ่านที่
>> นักเรียน 60: ใช่
>> เจสัน Hirschhorn: อะไร คนคิดว่า
>> นักเรียน 62: มันซับซ้อน
>> เจสัน Hirschhorn: OK
ลองวาดมันออกมา
ดังนั้นเวลานี้ฉันจะวาดนี้ใน สีแดงบนสแต็คที่นี่แล้วเรา
จะมี -
โอ!
ขอโทษ
ดังนั้นเวลานี้เรามีสิ่งที่เรียกว่า buffer และก็ในกอง
ถูกต้องหรือไม่
และเรากำลังบันทึกอยู่ในนั้นในตอนแรก
>> แล้วเรามีการเรียกร้องของเราที่จะ fread
สิ่งที่ fread ไม่เป็นก็จะใช้เวลาไบต์จาก ไฟล์ของเราและทำให้มันอยู่ที่ไหนสักแห่ง
มันทำให้มันในสิ่งที่ ชี้สิ่งที่จะ
ดีก่อนที่เราจะมีที่อยู่นี้ -
0x0
ตอนนี้เราทำในสิ่งที่อยู่มี
>> นักเรียน 63: สิ่งที่ บัฟเฟอร์ที่อยู่เป็น
>> เจสัน Hirschhorn: สิ่งที่ บัฟเฟอร์ที่อยู่เป็น
มันอาจเป็นไปได้ สิ่งที่ต้องการที่
อาจจะเริ่มต้นด้วย b และ ฉแล้วมีหกอื่น ๆ
เลขฐานสิบหก
ไม่สำคัญ
ที่อยู่บาง
และเรากำลังผ่านอยู่ที่ค่ะ
>> และเรากำลังจะใส่หนึ่งของเรา สิ่งไบต์ตามที่อยู่ที่
ดังนั้นเราจะใส่หนึ่งของเรา สิ่งไบต์ภายในที่นี่
แล้วเรากำลังจะเขียนจาก สิ่งที่เคยอยู่ในที่นี่
ไม่มีใครมีคำถามใด ๆ เกี่ยวกับที่
ที่คิดว่ารหัสนี้จะทำงานอย่างไร
>> ยกมือของคุณถ้าคุณคิด รหัสนี้จะทำงาน
คุณต้องใช้ท่าทาง
และผู้ที่คิดว่ารหัสนี้จะไม่ทำงาน
ยกมือของคุณ
คนอื่น ๆ ที่ควรจะเป็น ยกมือของพวกเขา
ตกลง
ไมเคิลที่คุณยืน
>> ไมเคิล: ผมไม่สามารถตัดสินใจ
ชนิดของที่อยู่ตรงกลาง
>> เจสัน Hirschhorn: คุณ อยู่ตรงกลาง
เลือกหนึ่ง
>> ไมเคิล: ผมจะมีความเชื่อ และบอกว่ามันจะทำงาน
>> เจสัน Hirschhorn: OK
คุณจะมีความเชื่อและบอกว่ามันทำงานอย่างไร
สิ่งที่เกิดขึ้น
>> [VOICES interposing]
>> เจสัน Hirschhorn: ไม่มีความผิด seg ของ
วิธีการที่เราสามารถตรวจสอบเพื่อดูว่า สองสิ่งที่เท่ากัน
สองไฟล์เท่ากัน
>> นักเรียน 64: ความแตกต่าง
>> เจสัน Hirschhorn: Diff
การตรวจสอบความแตกต่างสำหรับความแตกต่างระหว่าง สองไฟล์และถ้ามันกลับ
ไม่มีอะไรที่พวกเขากำลังเหมือนกัน
และถ้าเราเปิดขึ้นเราได้รับไฟล์ของเรา
เพื่อให้เป็นวิธีที่ถูกต้อง
ลองมองย้อนกลับไปที่มันอีกครั้งหนึ่ง
เราไม่จริงไม่ได้ จำเป็นที่จะต้องเริ่มต้นมัน
>> มันอาจจะดูเล็กน้อย ทำความสะอาดถ้าคุณไม่ได้ใส่
สิ่งที่สุ่มอยู่ในที่นั่น
ชี้ถูกคุณจำเป็นในการสร้าง พื้นที่ในการจัดเก็บบางสิ่งบางอย่างจากบางส่วน
fread และนำสิ่งที่ ออกจาก fwrite
และสิ่งที่จะต้องมีทั้งในประเทศ ตัวแปรในสแตก - คุณ
อาจได้ malloc'd พ​​ื้นที่บางส่วน
>> ดังนั้นเราจริงอาจมี เขียน malloc ที่นี่และ
ที่จะได้ทำงาน
แล้วเราจะได้รับการจัดเก็บ สิ่งที่เราอยู่ที่ไหนสักแห่งในกอง
แต่นี้เป็นจริงอาจจะ ทางออกที่สง่างามมากที่สุด
เพียงแค่สร้างพื้นที่บนสแต็คบาง เพราะสิ่งเหล่านี้จะไป
>> ฉันจะมีสองความคิดเห็นอื่น ๆ
ถ้าคุณจะเปิดในนี้และ แล้วได้รับคะแนนเกี่ยวกับเรื่องนี้ความคิดเห็นของฉัน
จะเป็นดังนี้
1 เหล่านี้ของที่นี่ให้ฉันดู เช่นหมายเลขมายากล
1 ในแง่ของ fread, ทำให้รู้สึก
นั่นคือจำนวนของสิ่ง จะอ่านหรือเขียน
>> แต่หนึ่งในที่นี่นี้ควร อาจจะเป็นอย่างอื่น
ดังนั้นสิ่งที่เป็นวิธีการแก้ปัญหาอย่างใดอย่างหนึ่ง
>> นักเรียน 65: ขนาดของไบต์
>> เจสัน Hirschhorn: เช่นเดียวกับที่
>> นักเรียน 65: ขนาดของถ่าน
>> เจสัน Hirschhorn: ขนาดของถ่าน
ใช่ไบต์ไม่ได้เป็นประเภท
ดังนั้นขนาดของผลงานถ่าน
เราจะได้มีที่ด้านบนของ รหัสของเรา, # กำหนดว่า
สิ่งที่เรียกว่าไบต์และ ก็จริงๆถ่าน
ที่จริงแล้ววิธีการที่ดียิ่งขึ้น อาจจะได้รับนี้ -
uint
ใครรู้ว่าสิ่งที่เป็น?
>> ขอโทษ
ฉันมีมันไปข้างหลัง
รอไม่
ก็ไม่ทางไหนที่ไป?
ใครรู้ว่าสิ่งที่เป็น?
ใช่
>> นักเรียน 67: ควรที่จะช่วยสร้างมาตรฐาน เจอสิ่งที่ระบบ
มี - เช่นจำนวนเต็มไม่ได้ลงนาม ที่มี 8 ไบต​​์?
>> เจสัน Hirschhorn: นั่น ตรงขวา
บนเครื่องที่แตกต่างกัน ขนาดของถ่าน -
มักจะไม่ได้ถ่าน
ตัวอักษรที่มักจะมีหนึ่งไบต์
แต่ขนาดของชนิดข้อมูลอื่น ๆ ที่มี ขนาดแตกต่างกันบนเครื่อง 32 บิต
เมื่อเทียบกับเครื่อง 64 บิต
uint8_t เสมอ 8 บิต -
เสมอหนึ่งไบต์
>> และฉันต้องการที่จะรวมถึงที่ ไฟล์ส่วนหัว int มาตรฐาน
ดังนั้นตอนนี้จะได้รับน่าจะเป็น วิธีที่ดีที่สุดที่จะเขียนรหัสนี้
ดังนั้นฉันจะกำจัดของตัวเลขมหัศจรรย์
และฉันยังมีตรรกะมากขึ้น ประเภทการบัฟเฟอร์
มันไม่ได้เป็นเพียงถ่านเป็นไบต์ ซึ่งเป็นสิ่งที่เราคาดหวังให้เป็น
>> และที่นี่เราได้จริง รับบิตที่แข็งแกร่งมากขึ้น
เราไม่ได้เรียกมันว่าถ่านซึ่ง -
บางทีใครจะรู้ - ที่อาจจะแตกต่างกัน ขนาดในเครื่องที่แตกต่างกัน
เรากำลังจริงว่าตรงนี้เป็น หนึ่งไบต์เสมอไม่ว่าสิ่งที่
และถ้าเราดูที่นี่เราทำ cp
เอ่อโอ้
สิ่งที่เกิดขึ้น
>> นักเรียน 68: มันอาจจะเปลี่ยน
>> เจสัน Hirschhorn: อะไรนะ?
>> นักเรียน 69: มันคืออะไร
>> นักเรียน 70: คุณไม่ได้ กำหนดเป็นประเภท
>> นักเรียน 71: แต่มันควรจะเป็น ได้รับการกำหนดไว้ในมาตรฐาน
>> นักเรียน 72: สิ่งที่เกิดขึ้น?
>> นักเรียน 73: ควรจะกำหนดเป็นตัวพิมพ์ใหญ่ทั้งหมดหรือไม่
>> เจสัน Hirschhorn: ดังนั้นจึงไม่ # define
ที่จริงในกรณีนี้ผม จะใช้ typedef
เพราะเรากำลังจะใช้มันเป็น ประเภทในสถานที่หนึ่ง
ดังนั้นในกรณีนี้เราต้องการจริง typedef เหมือนเรากำลังพิมพ์รูปแบบใหม่
ไบต์และมันก็เป็นหลักนี้
เป็นบิตที่แตกต่างจาก # กำหนด
>> และตอนนี้รหัสของเราทำงานอย่างสมบูรณ์แบบ
ดังนั้นอีกครั้ง # กำหนดจะใช้เวลาบางสิ่งบางอย่าง แทนที่มันทุก
กับสิ่งอื่น ๆ
มันเป็นเพียงแมโคร -
ชวเลขในการกำจัดของตัวเลขมหัศจรรย์
แต่ในกรณีนี้เพราะเรา ใช้มันเป็นชนิด -
ที่นี่ -
เพื่อให้การทำงานที่เราต้องการ การ typedef สิ่งที่เป็นไบต์
>> และเรากำลังกำหนดมันที่นี่
มันไม่ struct ก็จริง เพียงจำนวนเต็ม
มันเป็นหนึ่งในไบต์ยาว
รหัสนี้จะมีออนไลน์และ ทุกท่านควรจะมีได้ในขณะนี้
>> ดังนั้นเราจึงมี -
ที่สมบูรณ์แบบ -
13 นาทีที่เหลือที่จะไป กว่าปัญหาตั้ง 5
ผมต้องการที่จะเดินผ่าน copy.c กัน และจากนั้นเราจะพูดสั้น ๆ
เกี่ยวกับส่วนอื่น ๆ ของปัญหาที่กำหนด
เพื่อให้ฉันดึงขึ้น copy.c.
และสิ่งที่น่าสนใจคือเราได้จริง เขียนแล้วจำนวนมากของรหัสนี้
>> รหัสที่เราเขียนอย่างแท้จริงเพียง ออกจากที่นี่มาเมื่อฉันถูก
เขียนนี้ของฉันเอง
แต่นี้เป็น copy.c, รูปแบบพื้นฐาน สำหรับสองส่วนแรกของ
ปัญหาที่กำหนดไว้สำหรับ whodunit.c ซึ่ง คุณจะต้องเขียนและ resize.c
Recover.c ซึ่งเป็นสามและครั้งสุดท้าย ส่วนหนึ่งของชุดปัญหาไม่ได้
ตามออกของไฟล์นี้
>> คุณจะต้องเขียนไฟล์ที่ เราจะให้คุณแม่แบบสำหรับการที่
ยื่น แต่มันมีอะไร จะทำอย่างไรกับ copy.c.
แต่เนื่องจาก copy.c เป็นพื้นฐานสำหรับ สองส่วนแรกที่เรากำลังจะ
จะเดินผ่านได้ในขณะนี้เพื่อให้คุณมี ความรู้สึกที่ดีของสิ่งที่มันไม่
>> และแสดงความคิดเห็นให้บางส่วนของมันออกไป
เราได้เขียนแล้วบางส่วนของนี้
ครั้งแรกที่เราทำให้แน่ใจว่า เราได้รับข้อโต้แย้งที่สาม
ต่อไปเราจะจดจำชื่อไฟล์
ดังนั้นเราจึงข้ามขั้นตอนนี้เมื่อ เราเขียนสิ่งที่เรา -
เมื่อ cp ของเรา
แต่ที่นี่พวกเขากำลังทำ มันทำความสะอาดบิต
>> พวกเขากำลังตรวจสอบเพื่อให้แน่ใจว่า ไฟล์ทั้งสองดีใน
นอกเหนือไปจากการเปิดให้
เราเขียนรหัสทั้งหมดนี้เพียงแค่ตอนนี้ดังนั้นฉัน ไม่ได้ไปอาศัยอยู่ในรหัสนี้
ต่อไปคือสิ่งที่เฉพาะบางอย่าง ประเภทของไฟล์ที่เรากำลังใช้ซึ่ง
เป็นไฟล์บิตแมป
แฟ้มบิตแมปมีข้อมูลบางส่วน เกี่ยวข้องกับพวกเขา
>> ดังนั้นคู่แรกของไบต์ บอกคุณเกี่ยวกับไฟล์
พวกเขาจะไม่สีของ พิกเซลในภาพที่
พวกเขาบอกคุณเกี่ยวกับไฟล์
และถ้าคุณอ่านผ่านชุดปัญหา คุณจะมีข้อมูลมากขึ้น
เกี่ยวกับประเภทของโครงสร้างข้อมูล จะมาพร้อมกับบิตแมป
>> แต่นั่นเป็นเหตุผลที่เรามีเป็นครั้งแรกนี้ ชุดของ - รหัสนี้ที่นี่
เรากำลังอ่านเมตาดาต้า -
สองชิ้นของเมตาดาต้า - ไฟล์ ส่วนหัวและส่วนหัวของข้อมูล
และเราจะตรวจสอบบางส่วนของมันที่จะ ให้แน่ใจว่ามันเป็นไฟล์บิตแมปที่แท้จริง
ก่อนดำเนินการต่อ
>> และอีกครั้งเหล่านี้เป็นรายละเอียดที่เรา ไม่จำเป็นต้องไปลงในขณะนี้
ถ้าคุณอ่านผ่านชุดปัญหา คุณจะเข้าใจเหล่านี้
เรื่องยาวสั้นเหล่านี้เป็นเพียงการพูดว่า นี้เป็นไฟล์บิตแมปและ
ยืนยันว่า
>> ต่อไปเรากำลังเขียนเหล่านั้น ไฟล์ออก
เราจะเห็นว่าที่นี่
เรากำลังเขียนถึงตัวชี้ออก
ต่อไปเราจะกำหนดช่องว่างภายใน
ดังนั้นอีกครั้งเป็นพิเศษด้วย ไฟล์บิตแมปเส้นบางรวมถึง
padding ที่สิ้นสุด
และถ้าคุณอ่านผ่านชุดปัญหา คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับช่องว่างภายใน
นี้คือสูตรที่จะหาช่องว่างภายใน
>> สำคัญที่ต้องจำ -
เมื่อคุณเปลี่ยนขนาดของบิตแมป ไฟล์ที่มีการเปลี่ยนแปลงช่องว่างภายใน
เมื่อคุณเปลี่ยนขนาดของ ไฟล์ที่มีการเปลี่ยนแปลงช่องว่างภายใน
มันไม่เคยไปได้ สูงกว่า 3 -
มันจะเป็น 0 ถึง 3 รวม
แต่เมื่อคุณเปลี่ยนขนาดของ บางสิ่งบางอย่างที่มีการเปลี่ยนแปลงช่องว่างภายใน
>> ถ้าฉันมีเพียงหนึ่งพิกเซลในแถวที่ผม ต้องสามไบต์ของ padding เพราะ
แต่ละแถวจะต้องมีคูณสี่ ไบต์ยาวในไฟล์บิตแมป
แต่ถ้าฉันเป็นสองเท่ามันจะไปจากที่หนึ่งพิกเซล สองพิกเซลซึ่งแต่ละ,
สมมติว่าเป็นไบต์แล้วฉันต้องการ สองไบต์ของการขยายที่จะทำให้
ที่เท่ากับสี่
>> ดังนั้นเมื่อผมเปลี่ยนขนาดของบางสิ่งบางอย่าง ฉันต้องการที่จะเปลี่ยนจำนวนเงิน
ของการขยายฉันมี
ไม่ว่าทำให้ความรู้สึกที่ทุกคนหรือไม่
ต่อไปเราจะย้ำกว่าแต่ละแถว หรือผ่านแถวทั้งหมด
แล้วเราย้ำผ่าน แต่ละคอลัมน์ในแต่ละแถว
เรากำลังรักษาบิตแมปนี้เช่น ตารางเช่นเดียวกับที่เราเคยได้รับการรักษา
คณะกรรมการใน 15
>> เหมือนอย่างที่เราได้รับการรักษาอิฐเมื่อ เราพิมพ์พวกเขาบนหน้าจอ
ตารางของแถวและคอลัมน์
- แล้วที่เราเห็นนี้
เราจริงเพียงแค่เขียนนี้
เราได้สร้างที่เก็บชั่วคราวบางส่วน
เราอ่านในนั้นแล้ว เราเขียนมันออกมา
ตรงนี้เป็นสิ่งที่เราเพิ่งได้
>> ต่อไปเพราะผมบอกว่าแต่ละบรรทัด จะสิ้นสุดลงในช่องว่างบางอย่างเรา
ข้ามช่องว่างภายในที่ -
padding เก่า
แล้วเราเพิ่มกลับ
ในกรณีนี้เรากำลังสร้าง ไฟล์ที่แน่นอนเดียวกัน
เราเพียงแค่การคัดลอก
ดังนั้นสายนี้เป็นชนิดของโง่
เราสามารถแท้จริงเพียง ใส่ช่องว่างค่ะ
>> แต่ถ้าคุณเปลี่ยนขนาดของไฟล์ คุณยังคงต้องการให้บรรทัดนี้
ดังนั้นหากเราเปลี่ยนขนาดของไฟล์ที่ เราจะยังคงต้องการที่จะข้าม
กว่า padding เก่าหรือไม่
>> นักเรียน 74: ใช่
>> เจสัน Hirschhorn: ดังนั้นที่เราทำ
เพราะสิ่งนี้อีกครั้งข้อเสนอ ด้วยแฟ้มแหล่งที่มา
เราไม่ได้ดูแลเกี่ยวกับช่องว่างภายใน จากแฟ้มแหล่งที่มา
เราต้องการที่จะไปที่บรรทัดถัดไป
แต่เราไม่ได้ใส่เพียงกลับ จำนวนเงินเดิมของการขยาย
เราต้องการที่จะนำกลับ จำนวนใหม่ของการขยาย
>> ดังนั้นเมื่อเรากำลังจะเปลี่ยนขนาดของ ไฟล์เรายังคงต้องการที่จะข้าม
padding ในแฟ้มเก่า - สิ่งที่ เรากำลังอ่านจาก
แต่สิ่งที่เรากำลังเขียนถึงเราจะ ที่จะต้องนำกลับมาบางส่วนที่แตกต่างกัน
จำนวนของการขยายที่ เราได้กำหนด
ใช่
>> นักเรียน 75: คำสั่งของทั้งสอง สายไม่เป็นไรใช่มั้ย
เพราะคุณกำลังจัดการ ไฟล์ที่แตกต่างกัน
>> เจสัน Hirschhorn: แน่นอน
คำสั่งของทั้งสองสาย ไม่สำคัญ
เราเขียนบรรทัดนี้
นี้เป็นที่นี่เพื่อดูไฟล์ เรากำลังเขียนถึง
นั่นเป็นสิ่งสำคัญเพื่อที่เราได้รับ ในปริมาณที่เหมาะสมของการขยาย
นี้มีการจัดการกับไฟล์ใน
เราต้องการที่จะข้ามไปทางด้านขวา ผ่านช่องว่างภายใน
>> เราไม่ต้องการที่จะอ่าน -
ถ้าเรากำลังอ่านไบต์ในเวลาที่เรา ไม่สนใจเกี่ยวกับผู้ไบต์ padding
เราต้องการที่จะย้ายไปยังบรรทัดถัดไป
ในที่สุดเช่นเดียวกับลูซี่ให้สำหรับเรา เราปิดไฟล์และ return 0
ดังนั้นนี่คือ copy.c.
และเราจริงเขียน - เราใช้เวลาส่วนใหญ่ของ เขียนนี้เป็นหลักส่วน
>> คุณทำนี้
เพื่อหวังว่าคุณจะมีความรู้สึกที่ดี ของสิ่งที่เกิดขึ้นที่นี่
ความแตกต่างใหญ่ตรงไปตรงมาเป็นเพียง ส่วนแรกนี้ที่เกี่ยวข้องกับ
ลักษณะของแฟ้มบิตแมป
ดังนั้นผมจึงมีเป็นสไลด์ต่อไปของฉัน สิ่งที่เราจะต้องทำอย่างไร
ดีขอคิดเกี่ยวกับการสืบสวนสอบสวน
>> และสำหรับคนที่อ่านผ่าน ปัญหาที่กำหนดสิ่งที่เราทำ
ต้องทำสืบสวนสอบสวน?
เพียงแค่
aleja
>> aleja: คุณสามารถนำออกไปส่วนหนึ่ง ของพิกเซลที่หมายถึงสีแดงแต่ละ
แล้ว -
ชนิดของ?
>> เจสัน Hirschhorn: OK
ดังนั้นจะออกเป็นส่วนหนึ่งของแต่ละ พิกเซลที่หมายถึงสีแดง
ที่ใกล้ชิด แต่ไม่ทั้งหมดของมัน
>> นักเรียน 76: ดีมี วิธีการที่แตกต่างกันที่จะทำมัน
>> เจสัน Hirschhorn: OK
ให้ฉันวิธีหนึ่ง
>> นักเรียน 76: จะออกทั้งหมดสีแดงและ แล้วเน้นสีฟ้าและสีเขียว
>> เจสัน Hirschhorn: OK
ให้ดังนั้นทั้งสองวิธีการเหล่านี้ -
ดูเหมือนเราจะให้มันพิกเซลมัน มีระดับสีแดง, สีฟ้า, สีเขียวและ
เราต้องการที่จะเปลี่ยนระดับความสัมพันธ์ของ สีแดง, สีฟ้า, สีเขียวและขึ้นอยู่
บนพิกเซลที่
ที่ไหนในรหัสนี้เราควรจะเปลี่ยน ญาติสีแดง, สีฟ้า, สีเขียวและ
ระดับของพิกเซลที่กำหนด
หลังจากที่เราได้อ่านมัน -
ก่อนที่เราจะเขียนมันได้หรือไม่
ให้ฉันหมายเลขบรรทัด
>> นักเรียนหลาย: 83
>> เจสัน Hirschhorn: 83
ดังนั้นที่นี่
สำหรับสืบสวนสอบสวนรหัสที่คุณจำเป็นต้อง เขียนทุกคนควรจะไปที่นั่น
และที่เป็นเพียงรหัส คุณจะต้องเขียน
เพราะเหมือนอย่างที่เราได้ยินสิ่งที่คุณต้อง ทำคือการเปลี่ยนเหล่านี้สีฟ้าญาติ
ระดับสีแดงและสีเขียวจากแต่ละพิกเซล
>> ที่คุณได้อ่านในและตอนนี้คุณ จะเขียนมันออกมา
ฉันจะได้รับ - ถ้าฉันมีสิ่งนี้ ที่เรียกว่าสามขวาที่นี่และมันเป็นของ
ประเภท RGBTRIPLE -
ดีถ้าเรามองใน bmp.h, สิ่งที่เป็น RGBTRIPLE?
>> นักเรียน 77: มันเป็นโครงสร้าง
>> เจสัน Hirschhorn: RGBTRIPLE เป็น struct
เราจะเห็นว่าทางด้านขวาลงที่นี่
และอื่น ๆ ถ้าผมต้องการที่จะเข้าถึงพูด ระดับสีแดงของ struct ฉันจะ
เข้าถึงระดับสีแดงของ struct นี้
>> [CLASS พึมพำ]
>> นักเรียน 78: RGBTRIPLE.rgbtred?
>> เจสัน Hirschhorn: เป็นความถูกต้องหรือไม่
>> นักเรียน 79: มันควรจะเป็นสาม จุดแทน RG​​BTRIPLE จุด?
>> เจสัน Hirschhorn: ทริปเปิ
ทริปเปิเป็นตัวแปรท้องถิ่นเพื่อ ที่นี่มีคำแนะนำที่นี่
ดังนั้นเราก็ใช้เครื่องหมายจุด
นี้จะให้ฉันระดับของสีแดง
ถ้าผมต้องการที่จะเปลี่ยนมันฉันเพิ่งตั้ง มันเท่ากับสิ่งที่แตกต่าง
ดังนั้นอีกครั้งบรรทัดของรหัสนี้เข้าถึง ตัวแปรนี้อยู่ภายในนี้และ
เราสามารถตั้งค่าให้สิ่งใหม่ ๆ
>> ดังนั้นสำหรับสืบสวนสอบสวนอีกครั้งนี้ ในสาระสำคัญสิ่งที่เราต้องทำ
ง่ายมาก
เพียงแค่เปลี่ยนระดับญาติบางส่วนและ นี่คือที่รหัสที่จะไป
ปรับขนาดในมืออื่น ๆ , เป็นบิต trickier
ในความเป็นจริงน่าจะปรับขนาด ส่วนหนึ่งของปัญหาที่ยากชุดนี้
เรามีสามนาทีเพื่อไปกว่านั้น
>> แต่อีกครั้งที่เราได้เขียนแล้ว มากที่สุดของรหัสนี้เพื่อให้เรา
ควรจะคุ้นเคยสวย
สิ่งที่มีบางสิ่งบางอย่างที่เราต้องการที่จะทำใน ปรับขนาดถ้าคุณได้อ่านกว่า
ปัญหาการตั้งค่า?
ถ้าคุณให้พวกเขาให้ฉันเรา สามารถพูดคุยเกี่ยวกับพวกเขา
อะไรบางสิ่งบางอย่างที่เราต้องการจะทำคืออะไร
>> นักเรียน 80: แนวตั้ง -
เพื่อให้คุณได้ปรับขนาดในแนวนอนนั้น แต่ปรับขนาดในแนวตั้งด้วยหรือไม่
>> เจสัน Hirschhorn: ดังนั้นถ้าเราได้รับ พิกเซลและเราต้องการที่จะปรับขนาดได้โดย
ปัจจัยที่สองได้ในขณะนี้ความต้องการที่จะ ปรับขนาดในแนวนอนและการปรับขนาด
ดิ่ง
ไม่ที่ทำให้รู้สึก?
ใช่
เพื่อที่ว่าน่าจะเป็น ความท้าทายที่ยิ่งใหญ่ที่สุด
และเราจะพูดคุยเกี่ยวกับว่าในวินาที
ใช่
>> นักเรียน 81: วิธีที่ฉันคิดว่ามัน คุณจำเป็นต้องได้รับการพิมพ์ออก -
>> เจสัน Hirschhorn: รอ
ไม่ได้บอกเราว่าสิ่งที่คุณทำ
เรากำลังจะพูดคุยในตรรกะ
>> นักเรียน 81: ตกลง
สิ่งที่เป็นคำถามได้หรือไม่
>> เจสัน Hirschhorn: คุณเพียงแค่ ยกมือของคุณ
มีคำถามไม่ได้
ผมขอนำเสนอ
ให้ฉันเพียงแค่พูดคุยสั้น ๆ นี้
ดังนั้นเราจึงได้หนึ่งพิกเซลเราต้องการที่จะ ทำซ้ำได้ทั้งแนวนอนและ
ดิ่ง
ดังนั้นความนึกคิดสิ่งที่เราทำที่นี่คือเรา อ่านได้ในพิกเซลของเราเราเขียนมัน
แต่หลายครั้ง
>> แต่เราก็มีเคล็ดลับของเราที่นี่เพราะ แล้วเราต้องการที่จะข้ามไป
บรรทัดถัดไปและเขียนได้ที่ จุดเริ่มต้นของบรรทัดถัดไป
ดังนั้นหากเราต้องการที่จะทำซ้ำทั้ง แนวนอนและแนวตั้งคืออะไร
หนึ่งในวิธีที่ดีที่จะทำว่า -
หนึ่งที่ดี แต่จะทำอย่างไรที่
ดังนั้นเราจึงไม่จำเป็นที่จะแสวงหาอย่างต่อเนื่อง รอบไฟล์ของเราที่จะวางสิ่งที่
>> คำถามที่อาจไม่ได้ ทำให้ความรู้สึก แต่ฉันคิดว่า
คำตอบก็จะช่วยให้
>> นักเรียน 82: สร้างอาร์เรย์?
>> เจสัน Hirschhorn: ดังนั้นขอคิด ของแต่ละไฟล์เป็นแถว
ลองคิดในแง่ของแถว
ถ้าเรามีแถวแรกของเราจากขนาดเล็ก ภาพเราสามารถทำให้แถวนั้น
เป็นแถวขนาดใหญ่จากภาพขนาดใหญ่ แล้วทำซ้ำแถวนั้น แต่
หลายครั้งจะต้องมีการจำลองแบบ แทนที่จะไปพิกเซลโดยพิกเซล
ที่ได้รับสับสนเมื่อ จัดการกับไฟล์
>> เพราะถ้าเรามี -
ผมทำงานออกจากพื้นที่
หากเป็นไฟล์ของเราและเราได้ว่า หนึ่งพิกเซลมีและเราต้องการที่จะนำมัน
ที่นั่นเรายังมีบางสิ่งบางอย่าง จำเป็นที่จะต้องไปที่นั่นเมื่อเราอยู่ที่
การเขียนและการสร้างไฟล์ใหม่ของเรา -
ไฟล์ของเราที่เป็นใหญ่เป็นสองเท่าของ
>> แต่มันก็ยากมากที่มีฟังก์ชั่นไฟล์ ที่จะข้ามไปรอบ ๆ เพื่อขึ้นบรรทัดใหม่
เช่นนั้นแล้วก็จะกลับไปที่นี่ และนำสิ่งที่อยู่ในนั้น
มันเป็นไปไม่ได้เกือบที่จะทำบางสิ่งบางอย่าง เช่นนั้นหากที่ทำให้รู้สึก
ดังนั้นหากเราคิดในแง่ของแถวที่เราสามารถทำได้ ใช้แถวของเราและใส่แล้วมัน -
ทำซ้ำแถวในแนวตั้ง
>> และนั่นคือวิธีที่เราจัดการกับการปรับขนาด ในแนวตั้งมากกว่าแนวนอน
นั่นคือชนิดของรวดเร็วและ ทำให้เกิดความสับสนเล็กน้อย
แต่น่าเสียดายที่เวลาของเราจะขึ้น
ฉันจะยืนอยู่นอกสำหรับผู้ที่คุณ ที่นี่ที่มีคำถามเกี่ยวกับ
ปัญหาชุดรวมทั้งการกู้คืน
>> จึงขอเลื่อนออกไปตอนนี้
และอีกครั้งถ้าคุณมีคำถามใด ๆ เราสามารถแชทได้ออกไปข้างนอก