>> ลำโพง 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