ลำโพง 1: ลองมาดู ที่ห้องสมุด CS50, โดยเฉพาะฟังก์ชั่นของ GetInt ที่นี่เรามีแหล่งที่มาที่แท้จริง สำหรับ GetInt และแจ้งให้ทราบว่ามันไม่ยาวเกินไปและ ส่วนใหญ่จะถือว่าเป็นห่วงในขณะที่ - ห่วงอนันต์ที่ว่า - ว่ามีเพียง ส่งกลับค่าเมื่อเราได้จริง อากาศสิ่งที่เราคาดหวัง ลองเดินผ่านมัน สังเกตเห็นที่นี่ครั้งแรก ในขณะที่วงจะเริ่มต้น ขอให้สังเกตต่อไปว่าเรามีบรรทัดของรหัส ที่จริงเรียก GetString, และจัดเก็บค่าตอบแทนใน ตัวแปรที่เรียกว่าสายของสตริงประเภท จากนั้นเราจะทำบิตของการตรวจสอบสุขภาพจิตดี หากสาย == โมฆะแล้วเราอยากรู้อยากเห็น กลับ INT_MAX ตอนนี้ก็ปรากฎว่าเป็น INT_MAX คงที่พิเศษประกาศอื่น ๆ ที่ระบุที่ใหญ่ที่สุดที่เป็นไปได้ int ที่คุณสามารถเป็นตัวแทนใน โปรแกรมเช่นนี้ ตอนนี้เราได้ตัดสินใจที่จะกลับมาพล INT_MAX เป็นค่าแมวมองของ ประเภทหนึ่งที่เราได้ลิขสิทธิ์เป็น หมายถึงความผิดพลาดที่เกิดขึ้น ดังนั้นราคาที่เราจ่ายที่แน่นอนคือ GetInt ที่สามารถเห็นได้ชัดไม่ได้ จริงกลับจำนวนที่มีขนาดใหญ่เป็น INT_MAX เพราะแม้ว่าจะอยากจะ ค่าตอบแทนที่ควรจะเป็นจริงๆ ถูกตีความโดยผู - ใครก็ตามที่ใช้ GetInt - เป็นข้อผิดพลาดของการจัดเรียงบาง ถัดไปสังเกตเห็นว่าฉันได้ประกาศ n int และถ่านค ในบรรทัดถัดไปของรหัสนี้ผมเรียก ฟังก์ชั่นที่เรียกว่า sscanf ผ่านใน สี่ข้อโต้แย้ง เส้นซึ่งเป็นสายของผู้ใช้ พิมพ์ใน "i% c%" ซึ่งเป็นรูปแบบที่ สตริงที่ผมคาดหวังว่าผู้ใช้อาจ ประเภทตามที่อยู่ของ n, และที่อยู่ของค วัตถุประสงค์ sscanf ตอนนี้ในชีวิตแน่นอน การสแกนสตริงที่กำลังมองหา รูปแบบเฉพาะที่โปรแกรมเมอร์ ได้ระบุเป็นอาร์กิวเมนต์ที่สองว่า ในกรณีนี้% i ที่อยู่ใน มีเป็น c% ดังนั้นหากพบ sscanf int ใน ข้อมูลของผู้ใช้ int ที่จะถูกเก็บไว้ ภายในของตัวแปรที่เรียกว่า n เพราะ เราได้ให้การเป็นที่สาม อาร์กิวเมนต์ sscanf ที่อยู่ของ n ซึ่งหมายความว่า sscanf แน่นอนสามารถไป มีและปรับปรุงค่านั้น ตอนนี้ในกรณีที่ผู้ใช้ ในบางสิ่งบางอย่างมากขึ้น มากกว่าหนึ่งหรือมากกว่าหลัก - ในคำอื่น ๆ ที่ถ่านของการจัดเรียงบาง - ที่คตัวแปรที่สองที่มีอยู่ เราผ่านเข้าไปใน sscanf เป็นที่สี่ อาร์กิวเมนต์ยังจะมีประชากร ตอนนี้กลับหัวกลับหางของการตรวจสอบ ตัวละครที่เพิ่มขึ้นจากผู้ใช้ ว่าถ้าเขาหรือเธอจะไม่ให้ความร่วมมือ และประเภทในมากกว่าเพียงแค่ int, เราจะสามารถที่จะตรวจสอบได้ในครั้งนี้ ลักษณะเพราะในกรณีที่ sscanf จะไปกลับ 2 แสดงว่า ทั้งสองตัวยึดที่เต็มไป ด้วยค่า แต่เราหวังว่า sscanf แทน ผลตอบแทนที่ 1 ซึ่งหมายความว่าผู้ใช้เท่านั้น ให้ int สิ่งที่เราทำอย่างไรถ้า sscanf แน่นอนผลตอบแทนที่ 1? ดีเราทันทีฟรีเส้นที่ ผู้ใช้พิมพ์ในแล้วเรา ทันทีกลับ n มี อากาศ int อื่นถ้า sscanf ไม่กลับ 1 และ ผู้ใช้จึงไม่ได้ให้ความร่วมมือ เรายังคงฟรีสาย แต่เรา ขณะนี้แจ้งให้ผู้ใช้ลองใหม่อีกครั้ง และเนื่องจากเรายังคงอยู่ภายในว่า ห่วงอนันต์มิฉะนั้นกระบวนการ จะเริ่มต้นอีกครั้งและอาจจะอีกครั้งและ อาจจะอีกครั้งจนผู้ใช้จริง ให้เรา int