ลำโพง 1: ทั้งหมดขวา ยินดีต้อนรับกลับ นี่คือสองสัปดาห์ของ CS50 และเรามี ป่านนี้ได้ใช้ฟังก์ชั่น แต่ นำส่วนใหญ่พวกเขาได้รับ เราได้ใช้ printf ซึ่งมี ผลข้างเคียงของการพิมพ์ สิ่งที่อยู่บนหน้าจอ เราได้ใช้ get-int รับลอย แต่สิ่งที่จริงถ้าคุณต้องการที่จะสร้าง ฟังก์ชั่นของคุณเองเป็นบางส่วนของ คุณอาจต้องเริ่มแล้ว ทำเพื่อตั้งปัญหาหนึ่ง แต่ ไม่จำเป็นต้องใช้อย่างเคร่งครัด ดีขอไปข้างหน้าและทบทวนว่า ปัญหาเพียงขอให้ผู้ใช้สำหรับ ชื่อและการพิมพ์ของพวกเขาบางสิ่งบางอย่าง หน้าจอ แต่พยายามที่จะออกปัจจัยบางอย่าง ของคนธรรมดาสามัญที่เราได้ มองเห็นได้ในรหัสของเราป่านนี้ ดังนั้นโดยที่ฉันหมายความว่าต่อไปนี้ ฉันจะไปข้างหน้าและสร้าง โปรแกรมใหม่เพียงโทร มัน hello.c ตามปกติ ฉันจะไปข้างหน้าและให้ตัวเอง รวม io.h มาตรฐานที่ด้านบน ฉันจะยังให้ตัวเอง preemptively ห้องสมุด CS50 เพื่อให้ ฉันไม่ได้รับการตะโกนใส่โดยคอมไ​​พเลอร์ และตอนนี้ฉันจะไปข้างหน้า และประกาศ int, โมฆะหลัก และจากนั้นในที่นี่นี้เป็นที่ที่ฉันต้องการ ที่จะเริ่มต้นที่จะ outsource ฟังก์ชันการทำงาน บางฟังก์ชั่นอื่น ๆ ที่ตัวผมเอง am จะเขียน แต่ไม่ อยู่ในขณะนี้ ตัวอย่างเช่นสมมติว่าผมต้องการที่จะ เขียนฟังก์ชันที่ช่วยให้ผม พิมพ์ออกมาทักทายจุลภาคและ แล้วชื่อผู้ใช้บางคน แทนที่จะดำเนินการต่อเพื่อทำ printf สวัสดี% s, มันจะไม่ดีถ้า มีเพียงฟังก์ชันที่เรียกว่า ไม่ printf แต่พิมพ์ชื่อ? ดังนั้นในคำอื่น ๆ ที่ฉันต้องการเพื่อให้สามารถ เขียนโปรแกรมที่ไม่น้อย บางอย่างเช่นนี้ ครั้งแรกที่ฉันจะพูด printf ของคุณ ชื่อดังนั้นการกระตุ้นให้ผู้ใช้สามารถ ให้ฉันชื่อของเขาหรือเธอและแล้วฉัน จะใช้ s สตริงคุ้นเคยกับ ประกาศสตริง ให้ฉันตัวแปรชนิดสตริง, เรียกมันว่า s เก็บและในการที่ ผลของการเรียกสตริงการรับ แต่ตอนนี้ในสัปดาห์ที่ผ่านมาผมจะมี ทำได้ค่อนข้างน่าเอือมระอาสวัสดี% s / n และในคำอื่น ๆ ที่เราเคยเห็นนี้ ตัวอย่างเช่นพวงของครั้งและก็ ตัวอย่างเล็กน้อยเพราะมีเพียงหนึ่ง บรรทัดของรหัสดังนั้นมันจึงไม่ได้จริงๆ เรื่องใหญ่ที่จะทำให้การพิมพ์อีกครั้ง แต่คิดว่าบรรทัดของรหัสนี้ จริงกำลังกลายเป็นภาระและ มันไม่ใช่หนึ่งบรรทัดของรหัส แต่ 10 บรรทัดของรหัสสองสามสัปดาห์ต่อจากนี้ และคุณเพียงแค่เหนื่อย ของการคัดลอกและวางหรือ การพิมพ์ดีดครั้งใหม่ว่ารหัสเดียวกัน มันจะไม่ดีแทนที่จะทำ printf สวัสดี% s และอื่น ๆ มันจะไม่ดีถ้ามีเพียงแค่ ฟังก์ชันที่เรียกว่าพิมพ์ชื่อที่ ใช้อาร์กิวเมนต์ - ในคำอื่น ๆ ก็จะเข้า - แล้วอัฒภาค ดังนั้นเป็นหน้าที่ที่จะไม่ได้ จะดีถ้าที่มีอยู่? แล้วฉันจะได้ไม่ต้องกังวลเกี่ยวกับ สิ่ง printf คือสิ่งที่% s และทั้งหมดของ ความซับซ้อนเหล่านี้ที่ ไม่ใช่สิ่งที่น่าสนใจ พวกเขามีประโยชน์ พิมพ์ชื่อดังนั้นโชคไม่ดีที่ไม่ได้เป็น คิดค้นบาง 40 ปีบวกที่ผ่านมา ไม่มีใครคิดที่จะเขียนมัน แต่ที่ความงามของการมี การเขียนโปรแกรมภาษาเช่นเดียวกับใน รอยขีดข่วนคุณสามารถกำหนดบล็อกที่กำหนดเองดังนั้น อยู่ใน C และส่วนใหญ่ภาษาใด ๆ ที่คุณสามารถ กำหนดฟังก์ชันการทำงานของคุณเองสามารถ คุณกำหนดฟังก์ชั่นของคุณเอง ดังนั้นแม้ว่าเราจะได้รับเป็นหลักโดย โดยอัตโนมัติสำหรับฟรีเราสามารถประกาศ ฟังก์ชั่นของเราเอง ดังนั้นฉันจะทำให้บางห้องที่นี่ ขึ้นด้านบนและฉันจะประกาศของฉัน ฟังก์ชั่นของตัวเองที่จะไปดู แปลก ๆ ในตอนแรก แต่เราจะมา กลับไปที่นี้นานก่อนที่จะ ฉันจะบอกว่าเป็นโมฆะดังนั้น แสดงฟังก์ชั่นนี้จะ บางสิ่งบางอย่างมีผลข้างเคียง แต่มัน ไม่ได้กลับสิ่งที่ฉันใน เช่นเดียวกับที่ได้รับ int หรือ รับสายตัวเองไม่ และฉันจะให้ฟังก์ชั่นนี้ ชื่อของชื่อพิมพ์และฉันจะไป ระบุว่าผู้ชายคนนี้จะใช้เวลา สตริงและฉันจะเรียกว่า ชื่อสตริง ฉันจะเรียกมันว่าอะไรที่ฉันต้องการ แต่ฉัน ต้องการรหัสของฉันจะเป็นตนเอง documenting ในคำอื่น ๆ ถ้าหนึ่งของคุณจะ เปิดแฟ้มนี้และอ่านมันคุณสามารถ เรียงลำดับของการอนุมานจากชื่อของที่ อินพุตบทบาทอะไรก็ควรที่จะเล่น และตอนนี้ต่ำกว่าที่ฉันจะเปิด วงเล็บปีกกาและรั้งปิดหยิก และอื่น ๆ ที่ผมเคยสังเกตเห็นตามเดียวกัน ลวดลายบนเส้นสี่เจ็ดเป็น ฉันได้รับการดังต่อไปนี้สำหรับสัปดาห์ที่ดีบวก ขณะนี้อยู่ระหว่างการพูด, เก้าเส้นและ 14 ซึ่งประกอบด้วยหลัก ในคำอื่น ๆ พิมพ์ชื่อ ฟังก์ชั่นอีกอย่างก็คือ ตอนนี้คอมไพเลอร์จะไม่ทราบว่า ที่จะเรียกสิ่งนี้โดยอัตโนมัติ เพราะแท้จริงฉันเพียงแค่คิดค้นมัน แต่มันจะได้รู้ว่ายังคงที่จะเรียกหลัก โดยอัตโนมัติและแล้วแน่นอนใน สาย 13, ฉันเรียกใช้ฟังก์ชันของตัวเอง และเพราะผมบอกว่าฟังก์ชั่น ขึ้นไปบนสี่บรรทัดก่อนหลัก นี้จะสอนคอมไพเลอร์ สิ่งอ้างไม่ได้นำมาอ้าง "ชื่อพิมพ์" วิธีการและสิ่งที่ควรทำ ดังนั้นฉันจัดเรียงของให้มันเป็นที่กำหนดเองใหม่ บล็อกในบริบทของการพูด, Scratch ดังนั้นในที่นี่ผมสามารถใส่ที่พบบ่อยมาก หรือรูปแบบที่เกิดขึ้นของรหัสผมเก็บ การเขียนในชั้นเรียน printf สวัสดี% s,% s / n ", - สิ่งที่ฉันต้องการที่จะนำเข้า ? S ดังนั้นผมจึงต้องการที่จะนำชื่อในบริบทนี้ ดังนั้นสังเกตเห็นบิตของการแบ่งขั้วที่นี่ เพราะฉันประกาศฟังก์ชั่นของตัวเอง และฉันได้ค่อนข้างเรียกพล มันพิมพ์ชื่อและเพราะฉัน ที่ระบุไว้ในวงเล็บว่านี้ ฟังก์ชั่นใช้เวลาหนึ่งอาร์กิวเมนต์ของ ซึ่งเป็นสตริง - ดังนั้นจึงเป็นคำ หรือวลีหรือสิ่งที่ต้องการที่ - และ ฉันโทรชื่ออาร์กิวเมนต์ที่ว่า หมายถึงตัวแปรเดียวที่อยู่ใน ขอบเขตเพื่อที่จะพูด, คือชื่อ S เท่านั้นอยู่ระหว่างสิ่งสอง วงเล็บปีกกาของหลักสูตร? ดีจริงๆเช่นเดียวกับสาย 10 ผ่าน 14 ดังนั้นเช่นเดียวกับเมื่อวันจันทร์ที่ไม่สามารถใช้ S แต่สิ่งที่ฉันสามารถทำได้คือผ่าน S ในการพิมพ์ชื่อ ชื่อพิมพ์เกิดขึ้นเพียงเพื่อที่จะให้มัน นามแฝง, ไวพจน์, ชื่อเล่น, เรียกมันว่าชื่อและตอนนี้ ใช้มันในสายนี้ ดังนั้นตอนนี้ให้ฉันบันทึกนี้ซูมออก ให้ฉันไปข้างหน้าและทำให้สวัสดี ดูดี ไม่ได้คายข้อผิดพลาดใด ๆ . / สวัสดีใส่ ชื่อของฉันคืออะไร? เดวิด และสวัสดีเดวิด ดังนั้นไม่ทั้งหมดที่น่าตื่นเต้นที่, แต่ก็คิดว่าตอนนี้ ขณะนี้คุณมีที่ส่วนผสมเดียวกัน ในขณะที่เราทำใน Scratch ไป ทำให้การทำงานของเราเอง แต่มีบิตของ gotcha คือ สมมติว่าผมไม่เคยคิดจริงๆ นี้ผ่านทางและที่จริงผมไม่ต้อง จริงๆคิดเกี่ยวกับมันครับ ฟังก์ชั่นลงที่นี่ที่ ความรู้สึกที่เหมาะสมอย่างสมบูรณ์แบบ ใน Scratch มีความคิดไม่เป็น จากที่ตั้งอยู่ในสคริปต์ของคุณ คุณสามารถใส่หนึ่งขึ้นที่นี่หนึ่งขึ้นที่นี่ หนึ่งขึ้นที่นี่และมันอาจจะเริ่มต้น จะดูยุ่ง ๆ ถ้าคุณทำไม่ได้ วางออกอย่างเรียบร้อย แต่มันไม่ได้ เรื่องสคริปต์ร่างกายที่ อยู่บนหน้าจอ แต่น่าเสียดายที่ใน C - และสิ่งนี้จะแตกต่างจาก ภาษาเช่น Java และ Python และอื่น ๆ ที่คุณอาจไม่คุ้นเคย กับ - โชคร้ายที่อยู่ใน C, การสั่งซื้อไม่ สำคัญเพราะดูว่ามีอะไร ที่จะเกิดขึ้นในขณะนี้ ฟังก์ชั่นเริ่มต้นที่เกิดขึ้น ที่จะดำเนินการเป็นของหลักสูตรหลัก ที่หน้าหลักจะเรียกชื่อพิมพ์บน แปดเส้น แต่โชคร้าย, คอมไพเลอร์จะไม่ได้รู้ชื่อพิมพ์ที่ มีอยู่จนกว่าจะได้รับถึง 11 สาย, ที่โชคร้ายคือ จะสายเกินไป ดังนั้นขอให้ทำสวัสดี และตอนนี้แช่งสองข้อผิดพลาดที่สร้าง ดังนั้นตอนนี้ให้ฉันเลื่อนขึ้นไปมาก ครั้งแรกที่เราควรทำและ สังเกตเห็นว่ามันตะโกนใส่ฉัน "ประกาศนัยของการทำงาน พิมพ์ชื่อ. " ดังนั้นเราจึงได้เห็นข้อความนี้ก่อน ประกาศนัยของการทำงาน ที่เราได้เห็นเมื่อชนิดของข้อผิดพลาดที่? เมื่อฉันไม่ได้รวมถึงห้องสมุด ถ้าฉันลืม cs50.h และฉันจะได้รับ ตะโกนใส่สำหรับการรับสายหรือได้รับ int แต่ในกรณีนี้, พิมพ์ฟังก์ชั่นนี้ ชื่อไม่ได้อยู่ในห้องสมุดขวา? มันเป็นอย่างแท้จริงในแฟ้มนี้ดังนั้น จริงๆสิ่งที่เป็นปัญหา? ดีโชคร้ายใน C ก็จะนำคุณ ดังนั้นอย่างไม่น่าเชื่ออย่างแท้จริงว่าถ้าคุณ ต้องการฟังก์ชันที่เรียกว่าพิมพ์ชื่อไป อยู่คุณอาจต้องดำเนินการ ฟังก์ชั่นที่ส่วนบนสุดของคุณที่ รหัสเพื่อที่จะสามารถเข้าถึงได้ที่ลดลง ฟังก์ชั่น แต่ตรงไปตรงที่จะกลายเป็น เลอะเทอะอย่างรวดเร็ว ส่วนตัวผมชอบการวางหลักแรก แล้วเพราะมันชัดเจนมากว่านี้ โปรแกรมไม่ได้อย่างรวดเร็วก่อน และบวกคุณจะได้รับในมุมแปลก กรณีที่ถ้า x ต้องการที่จะเรียก y y แต่อาจจะเรียก x, คุณเพียงแค่ ร่างกายไม่สามารถจริงหนึ่งใส่ เหนือผู้อื่น แต่ปรากฎอยู่ใน C เราสามารถ แก้มากเพียงนี้ ฉันจะใส่นิด ๆ หน่อย ๆ ของพื้นที่ ขึ้นที่นี่และฉันก็จะ preemptively แม้จะค่อนข้าง เกินความจำเป็น, ไปสอน คอมไพเลอร์ว่ามีฟังก์ชั่น เรียกชื่อพิมพ์ก็จะใช้เวลาสตริง, และฉันจะเรียก อัฒภาคชื่อมัน ดังนั้นตอนนี้ในสายสี่ซึ่งเรา ยังไม่ได้เห็นมาก่อนการประกาศเป็น ของฟังก์ชั่นการพิมพ์ชื่อ แต่มันเป็นเพียง สัญญาว่าฟังก์ชั่นนี้จะ ในที่สุดก็จะถูกกำหนดไว้ในท้ายที่สุด จะดำเนินการ ตอนนี้ฉันจะออกเพียงอย่างเดียวเพราะ ตอนนี้เป็นคำนิยาม การดำเนินการเรียงลำดับของไมล์สุดท้าย ของการดำเนินการนี​​้ ฟังก์ชั่นโดยเฉพาะอย่างยิ่ง ดังนั้นตรงไปตรงมามันโง่มันน่ารำคาญ, แต่นี้เป็นวิธีที่ซีเป็นและก็ เพราะมันจะนำคุณมากอย่างแท้จริง และในขณะที่เครื่องคอมพิวเตอร์ตรงไปตรงมาควร เพียง แต่สิ่งที่คุณบอกมันไป ทำและเพื่อให้การสั่งซื้อเป็นสิ่งสำคัญ ดังนั้นเก็บที่ในใจครั้งและอีกครั้งเริ่มต้นที่จะ สังเกตเห็นการกำเริบของรูปแบบ ราคาต่อรองที่คุณจะถ้าคุณยังไม่ได้ แล้วเริ่มต้นที่จะพบข้อความ เช่นนี้ที่ได้อย่างรวดเร็วก่อนดูเหมือน ความลับอย่างสมบูรณ์ แต่ถ้าคุณเริ่มต้น ที่จะมองหาคำที่สำคัญเหล่านี้เช่น "การประกาศโดยปริยาย" กล่าวถึง ฟังก์ชั่นในกรณีนี้ - และตรงไปตรงมาคุณ แม้บางครั้งจะได้รับสีเขียวเล็ก ๆ น้อย ๆ สัญลักษณ์แครอทที่จะบอกคุณที่ ปัญหาอาจจะ - คุณสามารถเริ่มต้นการทำงานของคุณผ่านทาง ยังข้อความผิดพลาดที่มองไม่เห็น คำถามใด ๆ เกี่ยวกับการเขียนของคุณ ฟังก์ชั่นของตัวเองในลักษณะนี้? ขอทำสิ่งที่ เล็ก ๆ น้อย ๆ น่าสนใจมากขึ้น มากกว่าเพียงแค่ทำสิ่งที่มี ผลข้างเคียงของการพิมพ์ให้ฉันไป ข้างหน้าและบันทึกไฟล์ใหม่และเราจะ เรียก positive.c นี้แม้ว่าจะ จะแตกต่างกันเล็กน้อย เมื่อเทียบกับครั้งสุดท้ายที่ และในครั้งนี้ผมต้องการใช้อีกครั้ง ตัวอย่าง positive.C เวลาที่ผ่านมาซึ่ง มีการบังคับให้ผู้ใช้เพื่อให้ ฉันเป็นจำนวนเต็มบวก แต่ผมใช้ครั้งสุดท้ายที่ได้รับ int จะไม่ได้มีดีถ้ามี ฟังก์ชั่นที่เรียกว่าได้รับ int บวก ว่าฉันสามารถ outsource การนี​​้ ชิ้นส่วนของฟังก์ชันการทำงาน? ดังนั้นความแตกต่างที่นี่คือเราจะ ดำเนินการรับ int บวก แต่ไม่เหมือน พิมพ์ชื่อที่มีผลข้างเคียง - มัน ไม่ได้กลับมาบางสิ่งบางอย่างที่ฉันชอบ ตัวเลขหรือสตริง - ได้รับ int บวกของหลักสูตรที่จะไป กลับมาหวังว่า int บวก ดังนั้นขอให้พวกนี้ทำ รวม cs50.h, รวมมาตรฐาน io.h. เป็นโมฆะหลัก Int และตอนนี้ในที่นี่ฉันจะไปข้างหน้า และสมมติว่า int เรียกว่า n เท่ากับ ได้รับ int บวก และเช่นเดียวกับได้รับ int อยู่แล้ว เพราะพนักงานเขียนมันฉันจะ จะต้องรับผิดชอบสำหรับช่วงเวลาที่ได้รับ int บวกอยู่และตอนนี้ฉันจะ ไปข้างหน้าและพูด printf, ขอบคุณสำหรับ% i / n ", n ดังนั้นตอนนี้ถ้าผมรวบรวมโปรแกรมนี้สิ่งที่ ที่จะเกิดขึ้นในขั้วของฉัน หน้าต่างที่ด้านล่างของหน้าจอ? ฉันจะอาจจะได้รับที่ ข้อผิดพลาดเช่นเดียวกับก่อน ดังนั้นขอลองนี้ ให้บวก และอีกครั้งที่ประกาศโดยปริยาย ของฟังก์ชั่นได้รับ int บวก เพื่อให้เราสามารถแก้ปัญหานี้ใน สองวิธี ฉันจะให้มันง่ายและเพียงแค่ ใส่คำประกาศของฉันขึ้นที่นี่และได้รับ int บวก ฉันจำเป็นต้องใช้ลายเซ็นที่เรียกว่า ลายเซ็นเพียงหมายถึง เพื่อความงามของ บรรทัดแรกของโปรแกรม ดังนั้นสิ่งที่ควรจะได้รับในเชิงบวก int กลับมา? ดังนั้น int ผมหมายถึงความนึกคิดมันจะกลับมา สิ่งที่ต้องการ int บวก แต่ที่ ไม่ได้อยู่ เราไม่เห็นว่าในข้อมูลของเรา ชนิดเพื่อให้เรามีการจัดการกับ ความจริงที่ว่าเรามีน้อยมาก ชนิดข้อมูลที่จะทำงานกับ แต่เราสามารถกลับ int และเพียงแค่ เชื่อว่ามันจะเป็นบวก มันจะถูกเรียกว่า ได้รับ int บวก และตอนนี้วิธีการเกี่ยวกับการขัดแย้งได้อย่างไร มันจะใช้เวลาป้อนข้อมูลใด ๆ ? มันจำเป็นต้องป้อนข้อมูลใด ๆ ? ดังนั้นจึงไม่จำเป็นต้องรู้ อะไรล่วงหน้า รับสายไม่ได้รับ int ไม่ได้ printf ไม่ - มันต้องมีบาง การป้อนข้อมูลผ่านเข้าไปในมัน - และพิมพ์ชื่อ ที่จำเป็นในการป้อนข้อมูลบางอย่าง แต่ได้รับ int บวกไม่ได้ ดังนั้นฉันจะต้องชัดเจน บอกเป็นโมฆะคอมไพเลอร์ ถือเป็นโมฆะหากไม่มีอะไรอื่น ดังนั้นหมายความว่าไม่มีอะไรเป็นโมฆะเป็นไปภายใน วงเล็บเหล่านั้นอัฒภาค และตอนนี้ที่ด้านล่างของไฟล์ของฉัน - และ ชนิดอีกครั้งฉันแค่เป็นอยู่ของทวารหนั​​ก ที่นี่การวางหลักที่ด้านบนซึ่ง คือการปฏิบัติที่ดีเพราะด้วยวิธีนี้ ตลอดเวลาที่คุณหรือคนอื่น เปิดไฟล์ของคุณ การทำงานที่นั่น คุณสามารถดำน้ำจากหนึ่งตาราง ดังนั้นตอนนี้ฉันกำลังจะไปที่ซ้ำกันนี้ ได้รับเป็นโมฆะ int บวก แต่ฉันไม่ จะตีอัฒภาคขณะนี้ ฉันจะเปิดวงเล็บปีกกา, และตอนนี้ฉันต้องการที่จะยืม ความคิดบางอย่างจากวันจันทร์ เพื่อที่คุณจำได้ว่าเราทำอะไรบางอย่าง ชอบทำต่อไปนี้ในขณะที่ สิ่งที่เป็นความจริง และฉันทำอะไร? ผมทำสิ่งที่ต้องการให้ ฉันเป็นจำนวนเต็มบวก, นิด ๆ หน่อย ๆ ของพรอมต์ ฉันสามารถใช้คำพูดใด ๆ ที่ฉันต้องการ และจากนั้นผมใช้อะไร int n เท่ากับได้รับ int, ไม่มีข้อโต้แย้งกับมัน และเห็นความแตกต่าง เมื่อคุณเรียกใช้ฟังก์ชันที่เมื่อคุณใช้ ฟังก์ชั่นที่คุณไม่ได้ใส่ในช่องว่าง คุณจะทำเมื่อประกาศ ฟังก์ชั่นการเรียนการสอนคอมไพเลอร์ว่า มันควรคาดหวังว่า ดังนั้นคุณจึงไม่จำเป็นต้องใส่ เป็นโมฆะมีตัวเอง และตอนนี้สิ่งที่เป็นสภาพของฉัน ดี n ไม่เท่ากับบวก แต่เพียงหลอกรหัส ดังนั้นฉันจะแสดงนี้ขึ้นหมดจด? ดังนั้นน้อยกว่าหรือเท่ากับศูนย์ ดังนั้นอีกครั้งแจ้งให้ทราบล่วงหน้าที่คุณสามารถทำได้ น้อยกว่าหรือเท่ากับ แม้จะแยกออกเป็นสอง สัญลักษณ์ที่คุณสามารถทำมัน แป้นพิมพ์ของคุณเช่น แต่ยังคงมีข้อผิดพลาดที่ ผมเมาขึ้นครั้งเกินไป ฉันต้องประกาศ - อย่างแน่นอน ฉันต้องประกาศ n นอก ของวง ดังนั้นผมจึงจำเป็นต้องใส่ n ขึ้นที่นี่และผมก็ทำไม่ได้ ต้องการอีกครั้งประกาศไว้ในที่นี่ เกรงว่าฉันจะได้รับตัวแปรใหม่ ผมแค่อยากจะกำหนดค่าที่นี่ และตอนนี้ฉันไม่ได้ทำค่อนข้างที่นี่ ให้ฉันได้รับล่วงหน้าของตัวเอง และแสร้งทำเป็นว่าฉันทำ ทำให้บวกและตอนนี้ มีข้อผิดพลาดใหม่ ควบคุมการถึงจุดสิ้นสุดของ ฟังก์ชั่นที่ไม่เป็นโมฆะ ดังนั้นข้อผิดพลาดใหม่ แต่ถ้าชนิดที่คุณ จากแซวกันแต่ละคำมัน อาจเป็นนัย ๆ ว่ามีอะไรที่ไม่ถูกต้อง การควบคุม ควบคุมเพียงหมายถึงการสั่งซื้อ ของการดำเนินงานในโปรแกรม คอมพิวเตอร์ที่อยู่ในการควบคุมและ สิ่งที่ผิดพลาด ดังนั้นจึงถึงจุดสิ้นสุดของ ฟังก์ชั่นที่ไม่เป็นโมฆะ ฟังก์ชั่นอะไรที่มันเห็นได้ชัดคือ หมายถึง? ฟังก์ชั่นอะไรที่ไม่เป็นโมฆะ? เพื่อให้ได้รับ int บวกและเล็ก ๆ น้อย ๆ ทำให้เกิดความสับสนในกันดีว่า, มันเป็นชนิดของการเป็นโมฆะ แต่ก็มีสเปคของโมฆะสำหรับตน ข้อโต้แย้ง แต่เอาท์พุทเป็นไป จะเป็นชนิดที่ n ดังนั้นคำบนซ้ายคือ จึงเรียกว่าชนิดกลับ คำข้างในที่นี่คือ ศูนย์หรือมากกว่าอาร์กิวเมนต์ ฟังก์ชั่นที่ใช้เวลา ดังนั้นสิ่งที่ฉันจะต้องทำอย่างไร ณ จุดนี้ในรหัสของฉัน, 21 เส้น ให้กระพริบในขณะนี้คือผม มี int บวกภายใน ของตัวแปรที่เรียกว่า n ฉันจะให้มันกลับไปที่วิธีการหลัก? อย่างแท้จริง กลับ n อัฒภาค ดังนั้นกลับมาเช่นเดียวกับการตัดสินใจที่ชิ้นส่วนของ กระดาษที่มีคำตอบให้ฉันโดยวาง ชิ้นนั้นในกระดาษสีดำเล็ก ๆ น้อย ๆ กล่องบนโต๊ะที่จะทำใน รหัสคุณอักษรเพียงแค่เขียนกลับ n และมันราวกับว่าการตัดสินใจที่ถูก ส่งฉันบางสิ่งบางอย่างกลับทางกายภาพ ในกรณีนี้สิ่งที่เกิดขึ้นคือการได้รับ int บวกที่เกิดขึ้นจะส่งกลับ สันนิษฐานว่าสิ่งที่เป็นบวก จำนวนเต็มเพื่อใคร? ค่าที่ไม่ที่สิ้นสุด? ที่จบลงในตัวแปรนี้, n และ แล้วเราจะดำเนินการกับเก้าเส้น ดังนั้นในคำอื่น ๆ ในคำสั่งของ การดำเนินงานโครงการนี​​้จะเริ่มต้น การดำเนินงานและคอมไพเลอร์ตระหนัก, โอ้คุณต้องการห้องสมุด? ให้ฉันไปคว้าสิ่งที่อยู่ภายใน โอ้คุณต้องการห้องสมุด IO มาตรฐาน ให้ฉันไปคว้าสิ่งที่อยู่ภายใน คอมไพเลอร์พูดว่าอย่างไรกับตัวเอง เมื่อมันกระทบสายสี่ โอ้คุณสัญญาว่าจะดำเนินการ ฟังก์ชันที่เรียกว่าได้รับในเชิงบวก แต่ เราจะได้รับกลับไปในภายหลังว่า, บางสิ่งบางอย่างตามเส้นที่ เป็นโมฆะหลัก Int เพียงแค่หมายความว่านี่คือ guts ของโปรแกรมของฉัน เจ็ดแถวเป็นเพียงรั้งหยิก แปดสายไม่ว่าจะทางด้านซ้ายให้ ฉัน 32 บิตสำหรับจำนวนเต็มเรียกว่า n ทางด้านขวามือก็ บอกว่าได้รับ int บวก ตอนนี้หยุดเถอะว่าเรื่องเพราะตอนนี้ ผมไม่ให้ย้ายเคอร์เซอร์ของฉันลง เคอร์เซอร์ของฉันตอนนี้ไปลงที่นี่เพราะ ขณะนี้ได้รับ int บวกรัน int n มีการประกาศ ทำต่อไปนี้ printf ให้ฉันเป็นจำนวนเต็มบวก รับ int จากผู้ใช้เก​​็บไว้ใน n, และอาจจะทำเช่นนี้อีกครั้งและอีกครั้ง ห่วงซึ่งหมายความว่ารหัสนี้อาจจะ ดำเนินการขึ้นและลงเช่นนี้อีกครั้ง และอีกครั้ง แต่เมื่อผู้ใช้ในที่สุด ให้ความร่วมมือและให้ฉันที่เป็นบวก int ผมตีสาย 21 จุดที่ จำนวนถูกส่งกลับมาและที่หนึ่ง ผมควรจะเน้นในขณะนี้? เก้า การควบคุมเพื่อที่จะพูดกลับ กับสายเก้า นั่นคือเส้นที่ตอนนี้อยู่ในความดูแล เพื่อให้เป็นสิ่งที่ถูกที่เกิดขึ้นทั้งหมด เวลานี้อยู่ภายใต้ฝากระโปรง แต่ เมื่อเราใช้ฟังก์ชั่นเช่น printf หรือแม้กระทั่งการรับสายที่คนอื่น เขียนให้คุณควบคุมถูกส่ง สายรหัสออกไปคนอื่น โดยทีละบรรทัด มันเป็นเพียงการที่เราไม่สามารถมองเห็นมันและเรา อาจไม่ได้จริงๆพรรณนาไว้ในนี้ โปรแกรมเพราะในบางอื่น ๆ ไฟล์บนฮาร์ดไดรฟ์ ถิ่นเรา ดังนั้นขอรวบรวมจริง และเรียกใช้ในตอนนี้ ให้บวก คอมไพล์ที่ความคืบหน้า . / บวก ให้ฉันเป็นจำนวนเต็มบวก ให้เป็นเรื่องยาก เชิงลบ 1 เป็นศูนย์ ขอให้มัน 50 ขอบคุณสำหรับ 50 และการควบคุมดังนั้น ตอนนี้กลับมา คำถามใด ๆ แล้วในที่? อ้าง? [เงียบสงัด] พูดอีกครั้ง โอ้คำถามที่ดี ดังนั้นคุณอาจสังเกตเห็นคู่ขนานที่นี่ที่ ผมชนิดของการตัดมุมบน ในบรรทัดที่ 12 ผมว่าได้รับ int บวก ผลตอบแทนที่ int แต่เดียวกันกับที่ ตรรกะบัดนี้มันยืนเพื่อเหตุผลที่ใน สายหกผมบอกว่าผลตอบแทนที่ได้หลัก int แต่สิ่งที่เราไม่เคยมี มีอยู่ในใด ๆ ของโปรแกรมของเราหรือไม่ เราไม่เคยมีการเอ่ยถึง กลับคำนี้สำคัญ ดังนั้นมันจึงกลับกลายเป็นว่าใน C อย่างน้อย รุ่นของมันที่เรากำลังใช้ ที่ทำในปี 1999 เทคนิคนี้คือ ที่เกิดขึ้นให้คุณโดยอัตโนมัติ ตลอดเวลาที่คุณใช้โปรแกรมและคุณ ใช้ฟังก์ชันที่เรียกว่าหลัก, ฟังก์ชั่นที่จะกลับมาเป็นศูนย์โดย เริ่มต้นถ้าคุณไม่ได้พูดอย่างนั้น และศูนย์เป็นเพียงการประชุม โลกก​​ลับเป็นศูนย์ดังนั้น แสดงให้เห็นว่าทั้งหมดเป็นอย่างดี, ได้อย่างมีประสิทธิภาพออกจากเราด้วยสี่พันล้าน สิ่งที่เป็นไปได้ว่าอาจจะไป ที่ไม่ถูกต้องเพื่อที่ว่าถ้าเรากลับไปหนึ่งว่า อาจมีความหมายรหัสที่หมายถึงนี้ สิ่งที่ผิดพลาดไป เราสามารถกลับสองซึ่งหมายความว่า นี้สิ่งอื่น ๆ ที่ผิดพลาดไป เราจะกลับมาสี่พันล้านซึ่ง นี้หมายถึงสิ่งอื่น ๆ ที่ผิดพลาดไป และถ้าคุณคิดเกี่ยวกับของคุณเอง PC หรือ Mac ของคุณอาจจะจำได้ว่า บางครั้งคุณจะได้รับข้อความผิดพลาดคลุมเครือ จากซอฟต์แวร์ที่คุณ การใช้และบางครั้งก็มีความเป็นมนุษย์ คำอธิบายที่เป็นมิตร แต่มี มักจะรหัสหรือหมายเลข บนหน้าจอ? หากยังไม่สามารถมาใจ, เพียงแค่เก็บตาออกสำหรับมัน ที่มักจะมีสิ่งเหล่านี้ รหัสหมายถึง พวกเขากำลังรวมอยู่ในโปรแกรม Microsoft Word และ โปรแกรมอื่น ๆ เพื่อที่ว่าถ้าคุณยื่น รายงานข้อผิดพลาดกับ บริษัท ที่คุณสามารถ บอกพวกเขาว่าโอ้ผมได้หมายเลขข้อผิดพลาด 45 และกลับโปรแกรมเมอร์บาง บริษัท สามารถดูว่าในของเขาหรือเธอ รหัสและพูดว่าโอ้ว่าเป็นเพราะฉันทำ ข้อผิดพลาดนี้และที่ว่าทำไมผู้ใช้ ได้รับข้อความนี้ แต่ตรงไปตรงมาก็เพียงเล็ก ๆ น้อย ๆ เบี่ยงเบนความสนใจและน่าเบื่อเล็กน้อยเพื่อ สรุปได้ว่าอย่างน้อยในของเรา ไม่กี่โปรแกรมแรกดังนั้นเราได้ รับเลี่ยงมัน แต่เวลานี้ทุกหนึ่งของของคุณ ฟังก์ชั่นหลักได้แอบมีนี้ สายเพิ่มโดยอัตโนมัติสำหรับคุณโดย คอมไพเลอร์, การประชุมเพียงแค่ไป ช่วยให้คุณประหยัดเวลา [เงียบสงัด] คุณไม่จำเป็นต้องรวมไว้ในหลัก ที่ปรับ คุณไม่จำเป็นต้องรวมไว้ถ้าคุณได้ ฟังก์ชั่นการดำเนินการเช่นนี้ มิฉะนั้นแบนฟังก์ชั่น ออกจะไม่ทำงาน แต่ในหลักมันไม่จำเป็น ในหนึ่งสัปดาห์หรือสองเราจะเริ่มได้รับ เป็นนิสัยว่าเ​​มื่อเราต้องการที่จะเริ่มต้น ข้อผิดพลาด signifying คำถามที่ดีจริงๆ การแบ่งวาจาอย่างรวดเร็วเพื่อให้พูดถึงว่า ศุกร์นี้เราจะไม่ได้มีอาหารกลางวัน ต่อ แต่เราจะมีอาหารค่ำกับ บางส่วนของนักเรียนและพนักงาน หากคุณต้องการเข้าร่วมกับเรารู้สึก อิสระที่จะไปถึง cs50.net/rsvp 06:00 ศุกร์นี้ ในพื้นที่จะเป็นเสมอ จำกัด แต่เราจะ ยังคงทำเหล่านี้ในเกือบ เป็นประจำทุกสัปดาห์หากพื้นที่ ไหลออกมาในสัปดาห์นี้ ดังนั้นน่าตื่นเต้นที่เราทิ้งไปเมื่อ วันจันทร์ที่สตริงอันที่จริงแล้ว การจัดทำดัชนีลงซึ่งก็หมายความว่าคุณ จะได้รับตัวอักษรตัวแรก, อักขระตัวที่สอง, สามตัวอักษร และอื่น ๆ เพราะคุณสามารถ ได้อย่างมีประสิทธิภาพคิดของสตริงเช่น สวัสดีในฐานะที่เป็นในกรณีนี้ห้า ตัวอักษรที่อยู่ภายในกล่อง และคุณจะได้รับในแต่ละเหล่านั้น กล่องกับสิ่งที่พวกเราไวยากรณ์ แนะนำในวันจันทร์ที่? ผู้วงเล็บ บนแป้นพิมพ์ของคุณ ที่เพียงแค่หมายความว่าไปที่สถานที่ตั้งศูนย์ เราเริ่มนับที่ศูนย์ดังนั้นวงเล็บ ศูนย์หมายถึงชั่วโมงวงเล็บหนึ่ง หมาย e, และอื่น ๆ และเพื่อให้ทุกช่วงเวลาที่เราได้รับ ใช้สตริงและพิมพ์ใน "สวัสดี" และ "โลก" และสิ่งอื่น ๆ ที่ หน้าจอก็ถูกเก็บไว้ ในกล่องเช่นนี้ และใช้การคาดเดา แต่ละกล่องจะมีอะไรเป็นตัวแทนของร่างกาย ภายในของเครื่องคอมพิวเตอร์ของคุณ [เงียบสงัด] ขออภัย? อักขระ ตัวอักษรดังนั้นแน่นอนในกรณีที่ ของสตริงและตัวอักษรเป็นเพียง แปดบิตหรือไบต์ ดังนั้นคุณอาจจะอย่างน้อยคลุมเครือ คุ้นเคยกับความจริงที่ว่าคุณ คอมพิวเตอร์มีหน่วยความจำ มันมีอยู่สองประเภทของหน่วยความจำอย่างน้อย หนึ่งคือฮาร์ดดิสก์ที่คุณบันทึก สิ่งที่ถาวรและที่ว่า โดยทั่วไปจะมีขนาดใหญ่เพื่อให้คุณสามารถมีภาพยนตร์ เพลงและอื่น ๆ แล้วคุณมีหน่วยความจำประเภทอื่น ที่เรียกว่า RAM, R-M-, มาจาก Random Access หน่วยความจำและนี้คือประเภทของหน่วยความจำ ที่ใช้เมื่อเครื่องคอมพิวเตอร์ของคุณคือ ทำงานอยู่ แต่ถ้าคุณสูญเสียอำนาจของคุณหรือ ตายแบตเตอรี่อะไรที่เก็บไว้ อยู่ในแรมจะหายไปถ้าคุณสูญเสียอำนาจ ทั้งสิ้นเพราะไม่ หมั่น คุณมักจะมีวันนี้ กิ๊กของมันสองกิ๊กบางทีอาจจะมากกว่า และกลับหัวกลับหางของ RAM คือว่ามันมาก มากมากเร็วกว่าฮาร์ดดิสก์ หรือแม้กระทั่งสถานะของแข็งไดรฟ์วันนี้ แต่มันก็มักจะมีราคาแพงขึ้นดังนั้น คุณมีน้อยของมัน ดังนั้นการสนทนาของวันนี้จริงๆหมายถึง เพื่อ RAM ชนิดของหน่วยความจำที่ว่า มีอยู่เฉพาะในขณะที่มีอำนาจ ถูกป้อนเข้าเครื่องคอมพิวเตอร์ของคุณ ดังนั้นเมื่อคุณพิมพ์ใน H-E-L-L-O, Enter บน แป้นพิมพ์, H เป็นไปได้ในที่เดียว ไบต์ของ RAM, E ที่เป็นไปใน ไบต์อื่นของ RAM เช่น ส่วนที่เหลือของคำว่า ดังนั้นจำสิ่งที่เรามีความสามารถ ที่จะทำเวลาที่ผ่านมานี้ ให้ฉันไปข้างหน้าและเปิดไฟล์ ที่เราเรียกว่า string.c และจำ ที่มันดูเล็ก ๆ น้อย ๆ บางอย่างเช่นนี้ ให้ฉันจริงย้อนกลับและการเปลี่ยนแปลง ไปให้ตรงกับสิ่งที่มันดูเหมือน, ความยาวสตริงของ s ดังนั้นมองไปที่โปรแกรมที่นี่ เรารวมถึงห้องสมุด CS50 ดังนั้น ที่เราสามารถใช้รับสาย เรามีมาตรฐาน io.h เพื่อให้เราสามารถใช้ printf เราไม่รวมสตริงทำไม? นี้เป็นสิ่งใหม่ในวันจันทร์ที่ ดังนั้นเราจึงต้องการความยาวสตริง leng Str คนตัดสินใจปีที่ผ่านมา ให้เพียงจะรวบรัด แทนที่จะเรียกมันว่า "ความยาวสตริง" ขอเรียกว่า "เล้ง Str" และปล่อยให้ รูปโลกที่ออกและเพื่อที่ว่า สิ่งที่เราได้รับการเข้าถึงด้วยสตริง นี้เป็นที่คุ้นเคย นี้เป็นที่คุ้นเคย นี้เป็นที่คุ้นเคย นี้เป็นเพียงเล็กน้อยใหม่ ในบรรทัดที่ 22 - และเราจะกลับมา นี้ แต่ตอนนี้รู้ - และคุณเท่านั้นที่จะรู้เรื่องนี้จากการมี อ่านเอกสารหรือถ้า คุณรู้อยู่แล้ว C - รับสายบางครั้งสามารถสกรูขึ้น หากผู้ใช้ที่เป็นจริงความขัดแย้งหรือ ความร่วมมือและเขาหรือเธอเพียงแค่ ไม่ได้พิมพ์อะไรแป้นพิมพ์หรือ ชนิดมากที่แป้นพิมพ์ว่า มันทุกข์ระทมหน่วยความจำของคอมพิวเตอร์ ในทฤษฎีรับสายจะกลับมา สิ่งอื่น ๆ กว่า สายอักขระ มันจะกลับมาเป็นค่าที่พิเศษที่เรียกว่า โมฆะในตัวพิมพ์ใหญ่ทั้งหมด N-U-L-L และนี่คือ เพียงแค่ค่าแมวมองที่เรียกว่า มันเป็นค่าพิเศษที่หมายถึง สิ่งที่ไม่ดีที่เกิดขึ้นในกรณีนี้ มันเป็นตัวตนของสตริง ดังนั้นโมฆะผมตรวจสอบก็เพื่อที่ว่า เรื่องสั้นยาว leng Str และ ฟังก์ชั่นอื่น ๆ ที่มากับ C ถ้า พวกเขาคาดหวังสตริง แต่คุณผ่านพวกเขา ตัวตนของสตริงถ้าคุณส่ง พวกเขา NULL, คอมพิวเตอร์หรือโปรแกรม เพียงแค่จะผิดพลาดทันที มันจะแขวน มันจะโยนขึ้นข้อความข้อผิดพลาดบางอย่าง สิ่งเลวร้ายที่จะเกิดขึ้น ดังนั้นแม้ว่านี้ยังคง ไม่ดีที่กำหนด - นี้จะทำให้รู้สึกมากขึ้นในหนึ่งสัปดาห์หรือ - สองในสาย 22 นี้เป็นเพียง ตัวอย่างของการตรวจสอบข้อผิดพลาดของตัวเองป้องกัน เพียงในกรณีที่ครั้งหนึ่งออกจาก ล้านอะไรผิดพลาดที่ อย่างน้อยโปรแกรมของฉันจะไม่ผิดพลาด ดังนั้นถ้า s ไม่เท่ากับสิ่งที่ไม่ดี, ฉันมีนี้สำหรับวงและนี่คือ ที่เรามีอื่น ๆ ที่ ชิ้นใหม่ของไวยากรณ์ ฉันมีห่วงสำหรับ iterating จาก ศูนย์ได้ถึงความยาวของ s และแล้วที่นี่ผมก็พิมพ์ออก s วงเล็บฉัน แต่ฉันไม่ใช้% c ทำไมทุก ฉับพลันแทน% s แม้ แม้ว่าเป็นสตริง? มันเป็นตัวละครใช่มั้ย? S เป็นสตริง แต่สิ่งที่ยึดวินาที, s วงเล็บผมที่ฉันเป็นศูนย์ หรือหนึ่งหรือสองที่แต่ละ ตัวอักษรในสตริงและอื่น ๆ สำหรับ ที่ printf จะต้องทราบว่า มันแน่นอนตัวละครที่คาดหวัง แล้วจำสิ่งที่ทำอย่างนี้ โปรแกรมจริงทำอย่างไร พิมพ์ออกในคอลัมน์ อ้างว่า มันเพียงแค่พิมพ์คำที่ฉันพิมพ์ใน คอลัมน์หนึ่งตัวอักษรต่อบรรทัด ดังนั้นเรามาดูนี้อีกครั้ง เพื่อให้สตริง ตกลงรวบรวม . / string ผมขอพิมพ์ใน H-E-L-L-O, ใส่และ แน่นอนฉันได้รับมันอย่างใดอย่างหนึ่งต่อบรรทัด เพื่อให้ฉันทำหนึ่งในการเพิ่มประสิทธิภาพที่นี่ หากคุณคิดเกี่ยวกับมันโดยเฉพาะอย่างยิ่งถ้า คุณได้ตั้งโปรแกรมก่อนที่จะมี เนื้อหาที่ขาดประสิทธิภาพใน 24 เส้น ในคำอื่น ๆ ก็ไม่จำเป็นต้องมี ออกแบบที่ดีที่สุด ตรงไปตรงมาอย่างน้อยหนึ่งครั้งคุณ จำสิ่งที่ leng Str เป็น แต่ ทำสิ่งที่โง่ที่อาจเกิดขึ้น อะไรที่อาจจะมี? [เงียบสงัด] อย่างแน่นอน มันตรวจสอบความยาวของ s ทุกเวลาเดียวแม้ว่า H-E-L-L-O เสมอไป จะห้าตัวอักษร เวลาผ่านห่วงนี้ทุก ห้าจะไม่เปลี่ยนแปลง ฉันอาจจะเพิ่มขึ้นทีละครับ แต่สิ่งที่ คือความยาวของบนทุก ซ้ำของวงนี้ มันห้าก็ห้าก็ห้าและ ข้าพเจ้าก็ยังคงถามนี้ ถามอีกครั้งและอีกครั้งและอีกครั้ง ตอนนี้ตรงไปตรงมาที่คอมพิวเตอร์อยู่ครับดังนั้น ได้อย่างรวดเร็วและไม่มีใครจะสังเกตเห็น ความแตกต่างในกรณีนี้ แต่เหล่านี้ชนิด ของการตัดสินใจการออกแบบไม่ดีสามารถ เริ่มต้นที่จะเพิ่มขึ้นหากคอมไพเลอร์ตัวเอง ไม่พยายามที่จะแก้ไขปัญหานี้สำหรับคุณที่ มันมักจะไม่ที่ อย่างน้อยในเครื่องใช้ไฟฟ้า ดังนั้นฉันจะทำเช่นนี้ ฉันจะเพิ่มจุลภาคหลังจาก ตัวแปรแรกของฉันฉัน ฉันจะให้ตัวเองอีก ตัวแปรเรียกมันว่า n เพียงโดย การประชุมสำหรับตัวเลขและแล้วฉัน จะไปกำหนด n ค่าของสตริง ความยาวของ s แล้วฉันจะเปลี่ยน สภาพของฉันจะเป็นสิ่งที่? ฉันจะเปลี่ยนสภาพของฉัน ในขณะที่ i น้อยกว่า n ดังนั้นตอนนี้กี่ครั้งที่ฉัน การตรวจสอบความยาวของ s? ครั้งเดียว แต่มันตกลงเพื่อตรวจสอบกับผม n อีกครั้งและอีกครั้งเพราะตอนนี้เหล่านั้น ค่าที่ไม่จริงการเปลี่ยนแปลง ตอนนี้สำหรับตอนนี้เพิ่งรู้ว่าเวลาที่คุณ เรียกใช้ฟังก์ชันที่มีบิตของคน ค่าใช้จ่ายไม่เพียงพอที่จะกีดกันคุณ จริงๆจากที่เคยใช้ฟังก์ชั่น แต่ แน่นอนเมื่อมีบรรทัดของรหัสอะไร ชอบที่ - และเส้นจะได้รับ น่าสนใจมากขึ้นก่อนที่จะยาว - กรณีที่ มีโอกาสที่จะคิดว่าถ้าฉัน พิมพ์รหัสนี้หลายวิธี ครั้งก็จะดำเนินการ? คุณจะเริ่มเห็นเมื่อเวลาผ่านไป ประสิทธิภาพการทำงานของโปรแกรมของคุณสามารถ แน่นอนเปลี่ยน ในความเป็นจริงหนึ่งในปัญหาที่เราได้กำหนด ทำได้ในปีที่ผ่านมาเกี่ยวข้องกับการ การดำเนินการที่คุณอาจจำจาก ศูนย์สัปดาห์ตรวจสอบการสะกด แต่ ตรวจสอบการสะกดที่ออกแบบมาเพื่อสนับสนุน พจนานุกรม 150,000 บวก คำที่เราจะให้พวกคุณ คุณจะต้องเขียนโค้ดที่โหลด คำพูดเหล่านั้นเป็น RAM จึงเป็น กล่องเหมือนที่เราเห็นบนหน้าจอสักครู่ ที่ผ่านมาแล้วเป็นอย่างที่คุณ สามารถคุณจะต้องสามารถที่จะตอบ คำถามของฟอร์มเป็นคำนี้ สะกดผิด? เป็นคำที่สะกดผิดนี้? เป็นคำที่สะกดผิดนี้? และในบางสิ่งบางอย่างเช่นว่าสิ่งที่เราได้ ทำได้ในปีที่ผ่านมามีการเปิดลง, แม้จะเลือกอยู่ในเกณฑ์ที่ไม่จำเป็น การแข่งขันของทุกชนิดด้วยเหตุนี้ นักเรียนที่ใช้น้อยลงแรม เวลาน้อยลงรอบการทำงานจบลง เดือดปุด ๆ ขึ้นไปด้านบนของเล็ก ๆ น้อย ๆ คณะกรรมการผู้นำหรือการจัดอันดับที่เราใส่ หน้าแรกของหลักสูตรที่เราได้ ทำได้ในปีที่ผ่านมา ดังนั้นอีกครั้งโดยสิ้นเชิงตัวเลือก แต่นี้ พูดถึงโอกาสในการออกแบบ ที่ไปข้างหน้าทันทีที่เราเริ่มต้น สร้างอยู่บนบางส่วนของเหล่านี้ สร้างพื้นฐาน เพื่อให้ฉันกลับไปที่แผนภาพนี้ รอสักครู่และเปิดเผยเล็ก ๆ น้อย ๆ บางสิ่งบางอย่างมากขึ้น นี้แน่นอนเป็นสตริงและเราได้นำมา ความได้เปรียบของห้องสมุดไม่กี่ io.h มาตรฐานที่มี - printf printf เหนือสิ่งอื่นใด cs50.h ซึ่งได้รับ int และรับสาย และอื่น ๆ สตริงซึ่ง มี leng Str แต่มันกลับกลายเป็นว่ามีอีก ตรงไปตรงมามีจำนวนมากและจำนวนของส่วนหัวของ ไฟล์ที่ประกาศฟังก์ชัน สำหรับห้องสมุด แต่ ctype.h นี้ จริงจะค่อนข้าง ที่ได้เปรียบเพราะฉันจะ ไปข้างหน้าและการดำเนินการอย่างใดอย่างหนึ่ง โปรแกรมอื่น ๆ ที่นี่ ให้ฉันไปข้างหน้าและเปิดขึ้นบางสิ่งบางอย่าง ผมเขียนล่วงหน้าที่เรียกว่า capitalize.c และขอใช้เวลา ดูที่วิธีการทำงานนี้ ขอให้สังเกตว่าฉันใช้ในรุ่นนี้ ของมันสามไฟล์ที่คุ้นเคย ขอให้สังเกตว่าในบรรทัดที่ 18 ผม รับบรรทัดของข้อความ แจ้งให้ทราบในบรรทัดที่ 21 ผมอ้างว่า รหัสต่อไปนี้จะไป ประโยชน์ของสิ่งที่ผู้ใช้พิมพ์ ในและวิธีการที่ฉันทำว่า? ดีฉันได้รับ - บทเรียนจากครั้งสุดท้าย - ผมประกาศ i และ n และ iterating ตัวละครในสตริง แล้วบล็อกนี้เป็นสิ่งที่ รหัสในสาย 24 ผ่าน 27 ทำในแง่ของคนธรรมดา? กลับอักษรตัวพิมพ์เล็ก อย่างแน่นอน ถ้า s วงเล็บผม - ดังนั้นถ้าที่ i ตัวละครซึ่งเป็นที่เฉพาะเจาะจง ถ่านในสตริงเป็นใหญ่กว่า หรือเท่ากับเป็นตัวพิมพ์เล็กและ - จำได้ว่าเครื่องหมายคู่ และมีความหมาย - และตัวละครเดียวกันวงเล็บ s i, คือ น้อยกว่าหรือเท่ากับเป็นตัวพิมพ์เล็ก z, นั่นหมายความว่ามันเป็น A หรือ B หรือ C หรือ จุดจุดจุดหรือ z ซึ่งหมายความว่า มันเป็นตัวพิมพ์เล็ก อะไรที่ฉันต้องการจะทำในกรณีที่? ดีฉันสามารถทำเช่นนี้ค่อนข้าง ความลับ แต่ ขอแซวนี้ออกจากกัน ฉันจะเรียก printf, c% พิมพ์ เพราะผมต้องการที่จะพิมพ์ใหม่นี้ ตัวอักษรบนหน้าจอ ผมก็จะใช้วงเล็บ s i, ที่ i ตัวละครใน s และแล้วทำไม ฉันทำนี้เคล็ดลับเล็ก ๆ น้อย ๆ ที่นี่ ตัวพิมพ์เล็กทุนลบ? นั่นคือสิ่งที่จะให้ ฉันมักพูด? [เงียบสงัด] อย่างแน่นอน ฉันไม่จำ - มันเป็น 65 ทุน A. ที่ฉันทำไม่ได้จริงๆ จำสิ่งที่เป็นตัวพิมพ์เล็กคือ แต่ไม่ว่า คอมพิวเตอร์รู้ ดังนั้นด้วยการบอกว่าเป็นตัวพิมพ์เล็กลบ เงินทุนก็จะแปลก ลบหนึ่งถ่านจากที่อื่น แต่ สิ่งที่อยู่ใต้ฝากระโปรงตัวอักษรหรือไม่ พวกเขากำลังเพียงตัวเลข ดังนั้นไม่ว่าตัวเลขเหล่านั้น ให้คอมพิวเตอร์จำได้ มากกว่าฉันมนุษย์ ดังนั้นตัวพิมพ์เล็กทุนลบคือ จะให้ฉันแตกต่าง มันเกิดขึ้นเป็น 32, และที่จะ กรณีที่ตัวพิมพ์เล็ก b และเงินทุน B เป็นต้น จะยังคงสอดคล้องขอบคุณ ดังนั้นฉันเป็นหลักว่าจะต้องมีการ ตัวพิมพ์เล็กตัวอักษรลบปิดที่ ความแตกต่างของมาตรฐานและว่า ผมยึดการเปลี่ยนแปลงได้อย่างมีประสิทธิภาพจากการ ตัวพิมพ์เล็กไปแน่นอนตัวพิมพ์ใหญ่, โดยไม่ต้องจริงๆฉันต้องคิด เกี่ยวกับหรือจำไว้ว่าสิ่งเหล่านั้น ตัวเลขที่เราได้พูดคุยเกี่ยวกับเมื่อแปด อาสาสมัครขึ้นมาบนเวที? ตอนนี้ในขณะเดียวกันในที่อื่นถ้ามันไม่ได้ อักษรตัวพิมพ์เล็กตามที่กำหนด เส้น 24 เพียงแค่พิมพ์ออกมา ฉันต้องการที่จะสัมผัส ตัวอักษรที่เป็น จริงมาเป็นตัวพิมพ์เล็ก ดังนั้นเรามาดูนี้ ให้ประโยชน์ รวบรวมตกลง . / ประโยชน์ และแจ้งให้เราพิมพ์ใน H-E-L-L-O ในตัวพิมพ์เล็กใส่ และสังเกตเห็นว่ามันถูกแปลง เป็นตัวพิมพ์ใหญ่ ให้ฉันทำนี้อีกด้วย คำที่แตกต่างกัน วิธีการเกี่ยวกับ D--V-I-D กับครั้งแรก D พิมพ์ใหญ่เป็นชื่อมักจะเป็น? เข้าไป แจ้งให้ทราบว่ายังคงถูกต้อง มันก็ outputted แรกที่ D ไม่เปลี่ยนแปลง ผ่านทางที่อื่นสร้าง ดังนั้นเก็บไว้ในใจแล้ว สองสิ่งที่นี่ หนึ่งถ้าคุณเคยต้องการตรวจสอบสอง เงื่อนไขในครั้งเดียวที่คุณสามารถและพวกเขา ร่วมกันในขณะที่เราคาดการณ์ไว้ คุณสามารถเปรียบเทียบตัวละครในลักษณะนี้ และมีประสิทธิภาพการรักษาตัวอักษรเช่น ตัวเลข แต่ตรงไปตรงมานี้เป็นคำด่าดังนั้น ความลับที่ผมไม่เคยไปจำ วิธีที่จะเกิดขึ้นกับเรื่องนี้ตั้งแต่เริ่มต้น โดยไม่ต้องผ่านมันให้เหตุผลสำหรับค่อนข้าง บิตของเวลา จะไม่ได้มีดีถ้ามีคน ออกมีเขียนฟังก์ชันที่เรียกว่า ลดลงที่จะตอบคำถามของฉันจริงหรือ ปลอมตัวละครตัวนี้เป็นตัวพิมพ์เล็ก? ดีขอบคุณใครก็ตามที่อ้าง ctype.h ก็ตรงที่ ผมขอไปขึ้นที่นี่และเพิ่ม ctype สำหรับ C ประเภทและตอนนี้ให้ฉันไปลงที่นี่และ เขียนบรรทัดนี้ดังนี้ ดังนั้นหากจะเรียกว่าเป็นราคาที่ต่ำผมเรียกร้อง s วงเล็บฉันแล้วฉันจะลบ สองบรรทัดเหล่านี้โดยสิ้นเชิง ดังนั้นตอนนี้คนอื่นฉันหวังที่เขียน ฟังก์ชันที่เรียกว่าเป็นราคาที่ต่ำและมัน ผลัดกันออกพวกเขาและพวกเขาประกาศ มันภายในของ ctype.h และตอนนี้ฉันจะออกจากสาย 27 คนเดียวที่ฉันจะออกจากสาย 31 เพียงอย่างเดียว แต่สังเกตเห็นว่าฉันได้ กระชับขึ้นรหัสของฉัน ก็ตอนนี้ทำความสะอาด มันยากที่น้อยกว่าที่จะมองผ่าน เพราะตอนนี้ฟังก์ชั่นยิ่งไปกว่านั้นคือ เพื่อให้ชื่อมันก็เยี่ยมยอด ไม่สิ่งที่มันพูดว่า ดังนั้นตอนนี้ฉันจะบันทึกนี้ ฉันจะซูมออก และเช่นเดียวกับใน Scratch คุณอาจมี บูลีนค่าบูลีนจริงหรือ เท็จที่ว่าสิ่งที่เป็น ลดลงอย่างมีประสิทธิภาพส่งกลับ ให้ฉัน recompile ผมขอ re-run และตอนนี้ลองอีกครั้ง H-E-L-L-O, ใส่ ที่ดีงาม และลองอีกครั้งให้แน่ใจว่าฉัน กรูไม่ได้บางสิ่งบางอย่างขึ้น ที่เป็นตัวพิมพ์ใหญ่เช่นกัน แต่ตอนนี้ยังไม่ดีพอเพราะ สิ่งอื่น ๆ ที่ฉันไม่เคยไป จำเว้นแต่ว่าฉันจะทำงานผ่านมันจริงๆ อย่างรอบคอบเกี่ยวกับการพูด, กระดาษ ทางรถไฟสายนี้ครับ มันจะไม่ดีถ้ามี ฟังก์ชั่นเรียกตัวไปที่ด้านบน? ด้วยปรากฎออกมี อยู่ใน ctype.h เช่นกัน ฉันจะไปข้างหน้าและพิมพ์ - ให้ฉันนำบรรทัดที่กลับ แทนการนี​​้ที่นี่ให้ฉันไปข้างหน้า และพูดแทน% c ผลของการเรียกใช้ฟังก์ชันนี้ ไปบนตัวอักษรที่ i ของ S และตอนนี้สังเกตเห็นก็เริ่ม เล็ก ๆ น้อย ๆ ที่สมดุล ฉันต้องติดตามหลายวิธี วงเล็บฉันเปิดและปิด ดังนั้นตอนนี้ก็จะยิ่งทำความสะอาด ตอนนี้โปรแกรมนี้จะเริ่มดีขึ้นและ ได้รับการออกแบบที่ดีกว่าเร็วเพราะ อื่น ๆ อีกมากมายที่สามารถอ่านได้ แต่ มันไม่ขอแก้ไข ให้ประโยชน์ . / ประโยชน์ H-E-L-L-O ลองเรียกใช้อีกครั้ง, D--V-I-D ตกลงดังนั้นเรายังคงอยู่ใน รูปร่างที่ดีงาม แต่ตอนนี้ไปด้านบน ผมเสนอว่ามีอีกหนึ่ง การปรับแต่งเราจะทำให้ที่จะ ดีจริงๆที่จริงๆอาจกระชับ ขึ้นรหัสนี้และจริงๆให้เราห้า จากห้าสำหรับการออกแบบเช่น สิ่งที่จะเป็นที่ดีที่จะกำจัด? ดีมองว่าเหี้ยบล็อกนานนี้ รหัสเป็นเพียงการทำสิ่งที่ง่าย ตอนนี้เป็นกันเช่นคุณอาจมี มองเห็นได้ในส่วนของซูเปอร์ผ่านมานี้ วันหยุดสุดสัปดาห์คุณไม่จำเป็นต้องอย่างเคร่งครัด วงเล็บปีกกาเมื่อคุณมีเพียงหนึ่ง บรรทัดของรหัสแม้ว่าเราจะนำเสนอ ทำให้พวกเขาเพื่อที่จะทำให้มาก ชัดเจนมากขึ้นเช่นเดียวกับใน Scratch ของรูปตัวยู บล็อกสิ่งที่อยู่ภายในของสาขา แต่มันจะไม่ดีถ้าไปบน, เมื่อได้รับการป้อนข้อมูลของมันก็กลายเป็น ตัวพิมพ์ใหญ่ถ้ามันไม่ได้และสิ่งที่จะ จะวิเศษในกรณีตรงข้ามถ้า มันมีอยู่แล้วเป็นตัวพิมพ์ใหญ่? เพียงผ่านมันผ่าน และทิ้งไว้คนเดียว ดังนั้นบางทีมันอาจจะไม่ว่า ฉันสามารถลองและเพียงแค่หวังว่า ว่ามันไม่ แต่ให้ฉัน แนะนำสิ่งหนึ่งที่อื่น ๆ แทนการใช้นี้ขั้วในตัว หน้าต่างลงที่นี่จำได้ว่า ไอคอนนี้ตารางสีดำจะช่วยให้คุณ หน้าต่าง terminal ที่ใหญ่กว่าที่ฉันจะได้เต็มช่วง หน้าจอถ้าฉันต้องการได้หรือไม่ ดังนั้นมันจะเปิดออกที่พวกเขากำลังจัดเรียงของแปลก ชื่อ แต่มีสิ่งเหล่านี้เรียกว่า หน้าคนหน้าคู่มือมนุษย์สั้น และฉันสามารถเข้าถึงเหล่านี้โดย คนพิมพ์ - สิ่งที่ฉันต้องการพิมพ์? มนุษย์บน และตอนนี้สังเกตได้ถ้ามี ทำงานภายในเครื่องคอมพิวเตอร์ใน กรณีนี้เครื่องใช้ไฟฟ้าซึ่งเป็นเพียง ระบบปฏิบัติการลินุกซ์ก็จะ จะให้ฉันชุดคลุมเครือค่อนข้าง เอาท์พุท แต่คุณจะพบว่าเมื่อเวลาผ่านไป ก็มักจะมีรูปแบบสวยมาก เดียวกันเพื่อให้คุณเริ่มต้นที่จะได้ใช้มัน ให้สังเกตที่ด้านบนไปด้านบนและ เห็นได้ชัดว่าเอกสารเดียวกันคือ สำหรับการลด ใครก็ตามที่เขียนมันถูกตัดบางส่วน มุมและวางไว้บนหน้าหนึ่ง จุดประสงค์สิ่งเหล่านี้ใน ชีวิตคือการแปลง จดหมายถึงบนหรือตัวพิมพ์เล็ก ขอให้สังเกตว่าภายใต้เรื่องย่อ, หน้าคน คือการสอนฉันว่าฉันมีไฟล์ รวมถึงการที่จะใช้สิ่งนี้ มันทำให้ฉันลายเซ็นเหล่านี้ ฟังก์ชั่นทั้งสองของพวกเขาแม้ แม้ว่าเราตอนนี้มีเพียง ดูแลเกี่ยวกับหนึ่ง นี่คือคำอธิบายในขณะนี้ ไปบนแปลงตัวอักษร c เพื่อเป็นตัวพิมพ์ใหญ่ถ้าเป็นไปได้ ยังไม่ให้คำแนะนำว่า แต่ให้ฉัน ตอนนี้ดูอยู่ภายใต้ค่าตอบแทนสิ่ง ที่ส่งกลับ ดังนั้นค่าที่ส่งกลับคือ แปลงตัวอักษรหรือ C ถ้า การแปลงเป็นไปไม่ได้ c คืออะไร? ตัวละครเดิม ตัวละครเดิมและเรารู้ว่า ว่าด้วยการอีกครั้งจะขึ้นไปยัง บทสรุปและใครก็ตามที่เขียนนี้ ฟังก์ชั่นเพียงแค่ตัดสินใจว่าอินพุต เพื่อบนและลดลงเป็นเพียง พลจะถูกเรียกว่า C พวกเขาจะได้เรียกมันว่าสิ่งใดมากที่สุด ที่พวกเขาต้องการ แต่พวกเขาก็เก็บมันไว้ ง่ายๆเป็นค ดังนั้นผมจึงปรึกษากับหน้าคน ประโยคนี้ให้ความมั่นใจกับผมว่าถ้า มันไม่ได้เป็นอักษรตัวพิมพ์เล็กก็ ไปเพียงแค่ให้ฉันกลับคซึ่งเป็น ที่สมบูรณ์แบบซึ่งหมายความว่าฉันสามารถกำจัด เงื่อนไขอื่น ๆ ของฉัน เพื่อให้ฉันกลับไปที่ gedit และ ตอนนี้ให้ฉันเพียงแค่ทำเช่นนี้ ฉันจะคัดลอกคำสั่ง printf ของฉัน ฉันจะไปข้างหน้าและขวาภายใน สำหรับการพิมพ์ห่วงว่าออกและได้รับ กำจัดขณะนี้ทั้งนี้ถ้าสร้าง ไม่ได้เป็นความคิดที่ดีและมันก็มาก มากที่ถูกต้องและสอดคล้องกับ ทุกสิ่งที่เราเคยเทศน์ แต่ก็ไม่จำเป็น ทันทีที่คุณตระหนักถึงห้องสมุดบาง ฟังก์ชั่นที่มีอยู่ว่าคนอื่น เขียนหรือบางทีคุณอาจอ้างที่อื่น ๆ ใน ไฟล์ที่คุณสามารถใช้งานได้และจริงๆ เริ่มต้นที่จะกระชับขึ้นรหัส และเมื่อฉันพูดสิ่งที่ต้องการรูปแบบที่ดี, ความจริงที่ว่าสมาชิกผู้นี้เรียกว่า ทำงานเพื่อสังคมหรือก่อนหน้านี้ ที่ลดลงจะเป็นประโยชน์อย่างน่าพิศวงเพราะ พวกเขากำลังบรรยายมาก คุณจะไม่ต้องการที่จะเรียกฟังก์ชั่นของคุณ x และ y และ z ซึ่งมี มากความหมายน้อยมาก คำถามใด ๆ ในซีรีส์ที่ ของการปรับปรุง? ดังนั้นพอเพียงที่จะบอกว่าหนึ่งใน คบแม้จะเป็นปัญหาของคุณเอง ชุด - ชุดปัญหาอาจจะหนึ่ง แต่ แน่นอน P ตั้งสองเป็นต้นไปและแม้ เมื่อพวกเขากำลังที่ถูกต้องไม่จำเป็นต้อง หมายความว่าพวกเขาจะสมบูรณ์แบบเพียง หรือยังโดยเฉพาะอย่างยิ่งการออกแบบที่ดี นั่นคือแกนอื่น ๆ ที่จะ เริ่มคิดเกี่ยวกับ ดังนั้นนี่คือภายในสตริงของคุณ หน่วยความจำของเครื่องคอมพิวเตอร์ แต่ถ้าคุณมี ทั้งกลุ่มของตัวอักษรเช่น H-E-L-L-O ภายในของ RAM และคิดว่า ที่คุณในโปรแกรมของคุณโทรรับสาย หลายครั้งเช่นที่คุณ เรียกรับสายครั้งเดียวแล้วคุณ เรียกรับสายอีกครั้ง ดีสิ่งที่เป็นไป เกิดขึ้นเมื่อเวลาผ่านไป ในคำอื่น ๆ ถ้าคุณมีสายของ รหัสแม้ว่าออกจากบริบทเช่น สตริง s ได้รับ - ให้ทำเช่นนี้ String ชื่อเท่ากับรับสาย ดังนั้นคิดว่าบรรทัดของรหัสที่มีความหมาย ขอให้ผู้ใช้ชื่อของเขาหรือเธอ นี้บรรทัดถัดไปของรหัสจะหมายถึงการถาม การใช้งานสำหรับโรงเรียนของเธอหรือของเขาและ นี้บรรทัดถัดไปและอื่น ๆ สมมติว่าเราให้ถาม ผู้ใช้อีกและ สตริงอื่นและอื่น ๆ พวกเขากำลังจะอยู่ในความทรงจำ ในขณะเดียวกัน หนึ่งไม่ได้ไปบังคับอื่น ๆ เป็นโรงเรียนที่ได้เขียนทับอื่น ๆ แต่ที่พวกเขาทำทุกอย่าง จบลงในหน่วยความจำ? ดีถ้าเราเริ่มที่จะวาดบนหน้าจอ, ซึ่งเราสามารถใช้สิ่งนี้ ที่นี่เหมือนกระดานดำถ้าสีดำนี้ แสดงให้เห็นถึงรูปสี่เหลี่ยมผืนผ้าของเครื่องคอมพิวเตอร์ของฉัน หน่วยความจำที่ฉันจะเริ่มต้นโดยพลการ แบ่งออกเป็นสี่เหลี่ยมเล็ก ๆ , แต่ละแห่งซึ่งแสดงให้เห็นถึง หนึ่งไบต์ของหน่วยความจำ ตรงไปตรงมาถ้าคุณมีกิกะไบต์ของ RAM วันนี้คุณมีพันล้านไบต์ ของหน่วยความจำในคอมพิวเตอร์ของคุณดังนั้น พันล้านของสี่เหลี่ยมเหล่านี้ ดังนั้นพอเพียงที่จะพูดนี้ ไม่ได้จริงๆที่จะไต่ แต่เราสามารถเก็บภาพวาดทั้งหมดเหล่านี้ ไม่ชัดเจนในการวัดสแควร์และ รวมแสดงให้เห็นถึง หน่วยความจำคอมพิวเตอร์ของฉัน ตอนนี้เราก็จะทำจุดจุดจุด ดังนั้นในคำอื่น ๆ เมื่อตอนนี้ผมแจ้งให้ ผู้ใช้ที่มีสตริงได้รับเพื่อให้ฉัน สตริงจะเกิดอะไรขึ้น หากผู้ใช้ชนิดใน "สวัสดี" ที่สิ้นสุด ขึ้นมาใน H-E-L-L-O แต่คิดว่า ประเภทของผู้ใช้แล้วใน - ที่จริงผมไม่ควรจะทำ สวัสดีเพราะเรากำลังขอให้ พวกเขาสำหรับชื่อของพวกเขา ดังนั้นขอกลับไปถ้าฉันสามารถทำเช่นนี้ ดังนั้นถ้าฉันพิมพ์ใน D--V-I-D สำหรับชื่อของฉัน แต่จำได้ว่าบรรทัดที่สองของ รหัสถูกรับสายอีกครั้ง เพื่อให้ได้โรงเรียนของพวกเขา ในกรณีที่คำที่คือผู้ใช้ ชนิดในจะไปต่อไปหรือไม่ ดีอาจจะมันจะไปลง H-A-R-V-A-R-D ดังนั้นแม้ว่าฉัน วาดเป็นสองแถวนี้เป็นเพียง ทั้งกลุ่มของไบต์ในของคุณ ของคอมพิวเตอร์ RAM มีปัญหาในตอนนี้เพราะตอนนี้ถ้าฉัน ใช้แรมในเรื่องนี้มากพอสมควร แต่การเรียงลำดับของวิธีไร้เดียงสาสิ่งที่คุณสามารถ ไม่เห็นความแตกต่างที่เห็นได้ชัด? ที่หนึ่งเริ่มต้นและที่ หนึ่งปลายใช่มั้ย? พวกเขากำลังชนิดของการทำให้เปรอะเปื้อนกัน ดังนั้นมันจะเปิดออกคอมพิวเตอร์ ไม่ทำเช่นนี้ ผมขอเลื่อนจริงกลับในเวลา ไม่กี่ตัวอักษรและแทนที่จะฮาวาร์ด ไปทันทีหลังจากที่ชื่อของผู้ใช้ ผู้ได้รับจริงที่อยู่เบื้องหลัง ฉากอักขระพิเศษ แทรกขึ้นมาโดย คอมพิวเตอร์สำหรับเขาหรือเธอ / 0 หรือที่เรียกว่าตัวอักษร nul annoyingly เรียกว่า N-U-L ไม่ N-U-L-L แต่คุณเขียนเป็น / 0 มันเป็นเพียงทั้งหมดบิตศูนย์เป็นเครื่องหมายใน ระหว่างคำแรกที่ของผู้ใช้ พิมพ์และครั้งที่สอง ดังนั้นฮาร์วาร์จริงตอนนี้จบลง เป็นลำดับของตัวอักษรนี้ และอีกหนึ่ง / 0 ดังนั้นในคำอื่น ๆ โดยมีเหล่านี้ ค่าแมวมองแปดศูนย์ติดกัน บิตตอนนี้คุณสามารถเริ่มต้นที่จะเห็นความแตกต่าง ตัวละครตัวหนึ่งจากที่อื่น ดังนั้นตลอดเวลาสิ่งที่ถูก "สวัสดี" นี้ จริง "สวัสดี" กับ / 0 และ ในขณะที่มีอาจจะเป็นอย่างดี เป็นแรมค่อนข้างน้อยมาก ภายในเครื่องคอมพิวเตอร์ ให้ฉันทำสิ่งหนึ่งที่อื่น ๆ ในขณะนี้ แต่กลับกลายเป็นว่าทั้งหมดของสี่เหลี่ยมเหล่านี้ เราได้รับการวาดภาพพวกเขาอยู่ใช่, สตริง แต่มากกว่าปกติ สิ่งเหล่านี้เป็นอาร์เรย์ อาร์เรย์เป็นเพียงหน่วยความจำอัน ที่กลับไปกลับไปที่ด้านหลัง, และคุณมักจะใช้อาร์เรย์โดยวิธีการ สัญกรณ์วงเล็บตารางนี้ ดังนั้นเราจะเห็นเหล่านี้ไม่น้อย เมื่อเวลาผ่านไป แต่ให้ฉันไปข้างหน้าและ เปิดขึ้นขอเรียกว่าทุกเพศทุกวัย และสังเกตเห็นสิ่งที่เราสามารถทำอะไรกับ เหล่านี้เทคนิคเดียวกันเล็ก ๆ น้อย ๆ ไวยากรณ์บิตเพิ่มเติมได้ที่นี่ ดังนั้นใน 17 บรรทัดของโปรแกรมนี้ - จริงให้ฉันรันโปรแกรมครั้งแรก เพื่อให้เราสามารถเห็นสิ่งที่สิ่งนี้จะ ผมขอเรียกร้องให้ทุกเพศทุกวัยไป รวบรวมโปรแกรมนี้ . ทุกเพศทุกวัย / มีกี่คนที่อยู่ในห้อง? เรียกว่าสาม อายุของคนแรกที่? 18, 19, และ 20 และตอนนี้ค่อนข้างน่าขันผม ได้ทำโปรแกรมทุกเพศทุกวัยเหล่านั้น คนสามคน จึงมีโอกาสที่ชัดเจน สำหรับคณิตศาสตร์สนุกบางอย่างที่นี่ ขอบคุณคณิตศาสตร์ที่ถูกต้อง 18 ไป 19, 19 ไป ถึง 20 และอื่น ๆ แต่สิ่งที่หมายจริงๆจะ ตัวอย่างที่นี่เป็นวิธีการที่เราเก็บ ทุกเพศทุกวัยทั้งสามคน ผมขอซูมในที่สิ่งที่ เกิดขึ้นที่นี่ ดังนั้นครั้งแรกที่เหล่านี้ไม่กี่บรรทัดแรกควร จะได้รับคุ้นเคยสวย ฉันแค่เตือนผู้ใช้ให้ จำนวนของคนที่อยู่ในห้องพัก แล้วฉันใช้ int ได้รับและทำในขณะที่ไป ทำเช่นนี้อีกครั้งและอีกครั้งและอีกครั้ง เราได้เห็นรูปแบบที่ก่อนหน้านี้ แต่ 27 สายใหม่และจริงค่อนข้าง มีประโยชน์และจะกลายเป็น ที่มีประโยชน์มากขึ้น ขอให้สังเกตว่ามีอะไรที่แตกต่างกันในบรรทัดที่ 27 คือว่าผมดูเหมือนจะประกาศ int ทุกเพศทุกวัยที่เรียกว่า แต่รอ มันไม่ใช่แค่วัย int เหล่านี้มีวงเล็บว่า, ด้านในของที่ n คือ ดังนั้นวงเล็บ n ในบริบทนี้ไม่ได้ ด้านในของงบ printf แต่ที่นี่ แต่เพียงผู้เดียวในสาย 27, สายนี้คือ บอกให้ฉัน n ints ซึ่งแต่ละ เป็นชนิด int ดังนั้นนี่คือถังเพื่อที่จะพูด, ของ, ในกรณีนี้สามจำนวนเต็มกลับไป กลับไปกลับเพื่อที่ฉันจะได้อย่างมีประสิทธิภาพ มีสามตัวแปร ทางเลือกที่จะ ชัดเจนจะเป็นนี้ ถ้าผมอยากนักเรียนคนแรกของ อายุผมอาจทำเช่นนี้ ถ้าผมต้องการนักศึกษาที่สอง อายุผมอาจจะทำเช่นนี้ ถ้าผมต้องการนักศึกษาที่สาม อายุผมอาจทำเช่นนี้ และพระเจ้าที่เราต้องห้ามของทุกคน อายุในห้องนี้ - ผมหมายถึงนี้เป็น heck ของมากของการคัดลอก, วางอีกครั้งและอีกครั้งและอีกครั้ง และบวกเมื่อผมรวบรวมโปรแกรมนี้ ถ้านักศึกษาอีกคนหนึ่งเดินเข้ามาในกว่าออก ของประตูที่ตอนนี้จำนวนของฉัน ของตัวแปรที่ไม่ถูกต้อง ดังนั้นสิ่งที่ดีเกี่ยวกับอาร์เรย์เป็น ทันทีที่คุณเริ่มรู้สึกตัวเอง คัดลอกและวางอัตราต่อรองการเป็นที่ ไม่ได้วิธีที่ดีที่สุด อาร์เรย์เป็นแบบไดนามิกที่อาจเกิดขึ้น ผมไม่ทราบล่วงหน้าว่าหลายคน จะต้องอยู่ในห้อง, แต่ฉันรู้ว่าฉันต้อง n ของพวกเขาและฉันจะ คิดออก n เมื่อเวลามาถึง บรรทัดของรหัสนี้หมายความว่าให้ฉัน หน่วยความจำอันมีลักษณะเช่นนี้ ซึ่งมีจำนวนของกล่องบนหน้าจอ เป็นทั้งหมดขึ้นอยู่กับว่า n ผู้ใช้พิมพ์นิ้ว ดังนั้นตอนนี้ส่วนที่เหลือของโปรแกรมนี้คือ จริงสวยคล้ายกับสิ่งที่เรา ก็ไม่ได้ด้วยตัวอักษร แจ้งให้ทราบฉันมีห่วงสำหรับ เริ่มต้นในปี 30 เส้น ดังนั้นหลังจากที่ฉันได้รับอาร์เรย์ผม ย้ำจาก y เท่ากับศูนย์เมื่อถึง n ฉันมีนี้ให้คำแนะนำ printf ข้อความแค่บอกให้ฉันอายุ ของสมาชิกผู้% # i, ดังนั้นจำนวนหนึ่ง หมายเลขสองสามจำนวน และทำไมฉันไม่ทำเช่นนี้? ตรงไปตรงมามนุษย์ชอบที่จะนับหนึ่ง ขึ้นในขณะที่นักวิทยาศาสตร์คอมพิวเตอร์, ศูนย์ขึ้น นักวิทยาศาสตร์คอมพิวเตอร์จะไม่ได้ไป ใช้ประเภทของโปรแกรมนี้เพื่อให้เรา ไปเพียงแค่เริ่มต้นการนับ ที่หนึ่งเหมือนคนปกติ และตอนนี้อยู่ในสาย 33, แจ้งให้ทราบล่วงหน้าเล็กน้อย ชิ้นส่วนที่แตกต่างกันของไวยากรณ์ อายุที่ i ในตัวแปรประเภทนั้น อาร์เรย์เป็นไปได้ int และตอนสุดท้ายนี้เป็นเพียง คณิตศาสตร์ลงที่นี่ ฉันตัดสินใจที่จะอยู่ในวงที่แยกต่างหากที่จะเรียกร้อง บางเวลาที่ผ่านมาและในตอนนี้มี ห่วงแยกบรรทัดเหล่านี้ดำเนินการ ปีต่อจากนี้คนที่ฉันจะเป็นผม ปีเก่า แต่สังเกตเห็นนี้ไม่ได้ ตัวแปรผม นี่คือตอน i% สำหรับ int และแจ้งให้ทราบเป็นตัวยึดแรกผม เสียบผมบวก 1 ดังนั้นเราจึงนับเช่น คนปกติ แล้วสำหรับมูลค่าของอายุของพวกเขาสำหรับ ปีที่ผมเก่าผมใช้เวลานานวงเล็บ - ฉันและฉันทำบวกหนึ่งที่นี่ทำไม? พวกเขาอายุแค่ มันเป็นทางเลือกของฉันโง่ของโปรแกรม พวกเขามีอายุเพียงหนึ่งปี ฉันสามารถพิมพ์ในจำนวนที่ใด ที่จริงผมต้องการมี ดังนั้นจริงสิ่งที่ทุก ความเกี่ยวข้องที่นี่? ดีให้ฉันจริงเลื่อนกลับ กว่าที่นี่และวาดภาพ ของสิ่งที่อยู่ข้างหน้า สิ่งที่เราจะทำกับเราต่อไป ชุดสองปัญหาคือเล่นน้ำใน โลกของการเข้ารหัส ดังนั้นนี่คือสายอักขระดังนั้น ลำดับของตัวอักษรหลายและสิ่งที่ นี้จะพูด? มันไม่ได้อยู่ในรุ่นออนไลน์ จากภาพนิ่ง ดังนั้นผมจึงเรียกร้องว่านี้เท่ากับนี้ โฆษณาโง่จากหลายปี ที่ผ่านมาว่าจริงๆแล้วอาจจะจำ หนึ่งในต้นกำเนิดของมัน ดังนั้นนี่คือตัวอย่างของการเข้ารหัส หรือการเข้ารหัส แต่กลับกลายเป็นว่าถ้าคุณต้องการ จริงส่งข้อมูลหรือแบ่งปัน ข้อมูลอย่างปลอดภัยกับใครสักคน, เช่นข้อความเช่นนี้คุณสามารถ ช่วงชิงตัวอักษร แต่โดยทั่วไปแล้วคำพูดเป็น ไม่ได้มีสัญญาณรบกวนแบบสุ่ม พวกเขากำลัง permuted ในบางวิธีหรือมีการเปลี่ยนแปลง ในวิธีการบางอย่างเพื่อให้ - โอ๊ะ ที่สปอยเลอร์สนุกสำหรับครั้งต่อไป ดังนั้นคุณจึงสามารถ map สิ่งที่เห็นได้ชัดว่า O เพื่อ B ประกาศว่าสายการขึ้น โครงสร้างเงินทุนที่ชาญฉลาด เห็นได้ชัดว่าจะกลายเป็น r e เห็นได้ชัดว่า F-H-E-R กลายเป็น S-U-R-E ดังนั้น มันจะเปิดออกมีการทำแผนที่และใน กรณีที่มีคนโง่สวยนี้ การทำแผนที่ถ้าใครได้คิดออก? นี่คือสิ่งที่เรียกว่า Rot 13, หมุน 13 มันเป็นเรื่องที่โง่ที่สุดของการเข้ารหัส เพราะกลไกอย่างแท้จริงเพียง เพิ่ม 13 ถึงทุกหนึ่งของตัวอักษร, โง่ในแง่ที่ว่าถ้าคุณเพียงแค่ มีบิตของเวลาว่างในมือของคุณ และดินสอหรือคุณเพียงแค่คิดว่ามัน ผ่านในหัวของคุณคุณสามารถลอง ทั้งหมดเพิ่มเติมไปได้ - หนึ่งสอง สามจุดจุดจุดที่จะเพียงแค่ 25 หมุนตัวอักษรทั้งหมดและ ในที่สุดคุณจะคิดออก ข้อความนี้คือสิ่งที่ ดังนั้นถ้าคุณทำอะไรบางอย่างเช่นนี้ใน โรงเรียนเกรดผ่านข้อความของคุณ เพื่อนที่ดีที่สุดถ้าโรงเรียนเกรดของคุณ ครูเพียงแค่อ่านผ่าน ข้อความและเดรัจฉานบังคับให้แก้ปัญหา คุณอาจมีอากาศ คำตอบตามที่ ตอนนี้แน่นอนในโลกแห่งความจริง การเข้ารหัสที่ซับซ้อนมากขึ้น นี่คือตัวอย่างของข้อความจาก ระบบคอมพิวเตอร์ที่มีชื่อผู้ใช้และ รหัสผ่านเป็นเกือบทั้งหมดของเราทำและ นี่คือสิ่งที่รหัสผ่านของคุณอาจจะ มองเหมือนถ้าเก็บไว้ในฮาร์ดดิสก์ของคุณ แต่ไดรฟ์ในรูปแบบการเข้ารหัส นี้ไม่ได้เป็นเพียงการหมุนของตัวอักษร, คือ B และ B เป็น C. นี้เป็น ซับซ้อนมากขึ้น แต่จะใช้ สิ่งที่เป็นที่รู้จักกันโดยทั่วไปว่าเป็นความลับสำคัญ การอ่านรห​​ัส รูปภาพนี้จะบอกต่อไปนี้ เรื่องที่มีไอคอนไม่กี่ ทางด้านซ้ายเรามีสิ่งที่ เราจะเรียกข้อความธรรมดา ในโลกของการเข้ารหัสธรรมดา ข้อความที่เป็นเพียงข้อความต้นฉบับ ที่เขียนในภาษาอังกฤษหรือฝรั่งเศส หรือภาษาใด ๆ หากคุณต้องการเข้ารหัสมันเราจะผ่าน มัน pictorially ผ่านกุญแจดังนั้น บางชนิดของอัลกอริทึมของฟังก์ชั่นบางอย่าง โปรแกรมหรือว่าคนที่อ้าง ปีนป่ายที่ตัวอักษรหวังว่า ขึ้น complicatedly กว่าเพียงการเพิ่ม 13 แต่ละของพวกเขา สิ่งที่คุณได้รับจากกระบวนการที่ใน ตรงกลางมีที่เรียกว่า cyphertext ดังนั้นชนิดของคำว่าเซ็กซี่ มันก็หมายความว่ามันเข้ารหัส รุ่นของข้อความธรรมดา และเฉพาะในกรณีที่คุณมีว่าเป็นความลับเดียวกัน 13 หรือลบ 13 แล้วคุณสามารถที่จะ ถอดรหัสข้อความเช่นนั้น ดังนั้นในการหาชุดที่สองในหมู่สิ่ง คุณจะทำอย่างไรถ้าใน Hacker Edition คุณจะต้องเขียนโค้ดเพื่อ crack รหัสผ่านเหล่านี้หา สิ่งที่พวกเขาและวิธีการที่พวกเขา การเข้ารหัสแม้เราจะให้คุณบิต ของคำแนะนำไปพร้อมกัน ใน Standard Edition ที่เราแนะนำ คู่ของยันต์, การเข้ารหัส กลไกหนึ่งที่เรียกว่าซีซาร์หนึ่ง เรียกว่า Vigenere, ที่ยังคง ยันต์หมุนที่จะกลายเป็น บางสิ่งบางอย่าง B กลายเป็นบางสิ่งบางอย่าง แต่ ที่คุณต้องทำมันโปรแกรม เพราะมีก็จะเป็นความลับ สำคัญที่เกี่ยวข้องซึ่งโดยทั่วไปจะมีเป็นจำนวนมาก หรือคำหลักที่เฉพาะ ผู้ส่งและผู้รับเหล่านี้ ข้อความควรจะเข้าใจ ตอนนี้จริงมีแปลง ในโลกแห่งความจริง นี้เช่นเป็นเด็กกำพร้าเล็ก ๆ น้อย ๆ แหวนถอดรหัสลับของแอนนี่และคุณ จริงสามารถดำเนินการเหล่านี้ ยันต์หมุน - กลายเป็นบางสิ่งบางอย่างจะกลายเป็น B บางสิ่งบางอย่าง - กับคู่ของล้อ, หนึ่งอยู่ด้านนอกซึ่งเป็นหนึ่งในภายใน เช่นว่าถ้าคุณหมุนล้อหรือ แหวนคุณจริงสามารถเข้าแถว ตัวอักษรด้วยตัวอักษรที่แตกต่างกัน รับรหัสลับ และเพื่อให้เป็นที่น่าตื่นเต้นสำหรับวันนี้ สิ่งที่ฉันคิดว่าฉันต้องการทำคือบิตของ ย้อนกลับว่าถ้าคุณเปิดโทรทัศน์ วันที่ 24 ธันวาคมที่คุณสามารถดู nauseum โฆษณาภาพยนตร์ 24 ชั่วโมงในแถว แต่สำหรับวันนี้ผมจะเปิดขึ้นที่นี่ และให้เราเพียงแค่สองนาที เรื่องคริสมาสต์ที่เกี่ยวข้อง pedagogically กับเพื่อนเล็ก ๆ น้อย ๆ ที่มีชื่อว่าฟี่ [เล่นภาพวิดีโอ] จะเป็นที่รู้จักกันไปใครต่อใครว่า ราล์ฟปาร์กเกอร์ได้รับการแต่งตั้งด้วยประการฉะนี้ สมาชิกของเด็กกำพร้าแอนนี่เป็นความลับ วงกลมและมีสิทธิที่จะทั้งหมด เกียรติยศและผลประโยชน์ ที่เกิดขึ้นดังกล่าวข้างต้น ลงชื่อเด็กกำพร้าแอนนี่ ผู้รับสนองพระบรมราชโองการปิแอร์อังเดรในหมึก เกียรติประวัติและผลประโยชน์อยู่แล้ว ที่อายุสิบเก้า [ตะโกนวิทยุ] มาให้ของได้รับกับมัน ผมไม่จำเป็นต้องทั้งหมดเกี่ยวกับดนตรีแจ๊สที่ ลักลอบโจรสลัดและ ฟังคืนพรุ่งนี้ การผจญภัยตอนจบของสีดำ เรือโจรสลัด ตอนนี้ก็ถึงเวลาสำหรับความลับของแอนนี่ ข้อความสำหรับสมาชิกที่คุณ ของวงกลมที่เป็นความลับ โปรดจำไว้ว่าเด็ก ๆ เฉพาะสมาชิกของวงความลับของแอนนี่ สามารถถอดรหัสข้อความลับของแอนนี่ โปรดจำไว้ว่าแอนนี่ขึ้นอยู่กับคุณ ตั้งหมุดของคุณเพื่อ B2 นี่เป็นข้อความ 12, 11, 2 - -I am ในการประชุมลับครั้งแรกของฉัน -25, 14, 11, 18, 16 - -Pierre อยู่ในคืนนี้เสียงดี ฉันจะบอกข้อความคืนนี้ว่า เป็นสิ่งสำคัญจริงๆ -3, 25 นั่นเป็นข้อความจากแอนนี่ตัวเอง โปรดจำไว้ว่าอย่าบอกใคร -90 วินาทีต่อมาฉันอยู่ในห้องพักเพียงอย่างเดียว ในบ้านที่เด็กเก้า สามารถนั่งในความเป็นส่วนตัวและถอดรหัส Aha บีผมไปต่อไป อีคำแรกคือ "จะ." เอส มันก็ง่ายขึ้นมาในขณะนี้ U. 25 ที่อาร์เอส -Come เมื่อฟี่ ฉันต้องไป -I'll be ขวาลง Ma หวือ Gee -T ทุมให้แน่ใจว่า ให้แน่ใจว่าได้อะไร เด็กกำพร้าอะไรเล็ก ๆ น้อย ๆ แอนนี่พยายามที่จะพูด? ให้แน่ใจว่าได้อะไร -ฟี่, แรนดี้ได้มีที่จะไป คุณจะกรุณ​​าออกมา? ทั้งหมดขวา, Ma ฉันจะออกทางด้านขวา ฉันได้รับใกล้ชิดกับขณะนี้ ความตึงเครียด was terrible ว่ามันคืออะไร? ชะตากรรมของดาวเคราะห์อาจ แขวนอยู่ในสมดุล -ฟี่ต้องไปแรนดี้ -I'll จะขวาออก ร้องไห้ออกมาดัง ๆ เกือบมี มือของฉันบิน ใจของฉันคือกับดักเหล็ก รูขุมขนสั่นสะเทือนทุก มันเห็นได้ชัดเกือบ ใช่ใช่ใช่ใช่ใช่ -Be แน่ใจว่าจะดื่มโอวัลติของคุณ ? โอวัลติ เชิงพาณิชย์ crummy? เก๋าเจ้ง [เล่นวิดีโอจบ] ลำโพง 1: นี่คือ CS50 และที่ จะถูกตั้งค่าปัญหาสอง ดูคุณสัปดาห์ถัดไป ลำโพง 2: ตอนต่อไป CS50 นี้เกิดขึ้น 1 ลำโพงดังนั้นหนึ่งหัวข้อที่เรายังไม่ได้ มองที่ป่านนี้คือ ที่ฟังก์ชั่นของตัวชี้ ตอนนี้ตัวชี้ฟังก์ชันเป็นเพียง ที่อยู่ของประชาชน ฟังก์ชั่น แต่เหมือน - บุตรชายของ -