2 00:00:00,000 --> 00:00:01,860 >> ลำโพง 1: ลองมาดู ที่ห้องสมุด CS50, 3 00:00:01,860 --> 00:00:05,190 โดยเฉพาะฟังก์ชั่นของ GetInt 4 00:00:05,190 --> 00:00:07,820 ที่นี่เรามีแหล่งที่มาที่แท้จริง สำหรับ GetInt 5 00:00:07,820 --> 00:00:12,050 และแจ้งให้ทราบว่ามันไม่ยาวเกินไปและ ส่วนใหญ่จะถือว่าเป็นห่วงในขณะที่ - 6 00:00:12,050 --> 00:00:15,620 ห่วงอนันต์ที่ว่า - ว่ามีเพียง ส่งกลับค่าเมื่อเราได้จริง 7 00:00:15,620 --> 00:00:17,400 อากาศสิ่งที่เราคาดหวัง 8 00:00:17,400 --> 00:00:18,700 ลองเดินผ่านมัน 9 00:00:18,700 --> 00:00:21,650 >> สังเกตเห็นที่นี่ครั้งแรก ในขณะที่วงจะเริ่มต้น 10 00:00:21,650 --> 00:00:25,390 ขอให้สังเกตต่อไปว่าเรามีบรรทัดของรหัส ที่จริงเรียก GetString, 11 00:00:25,390 --> 00:00:29,620 และจัดเก็บค่าตอบแทนใน ตัวแปรที่เรียกว่าสายของสตริงประเภท 12 00:00:29,620 --> 00:00:31,210 จากนั้นเราจะทำบิตของการตรวจสอบสุขภาพจิตดี 13 00:00:31,210 --> 00:00:35,770 หากสาย == โมฆะแล้วเราอยากรู้อยากเห็น กลับ INT_MAX 14 00:00:35,770 --> 00:00:40,140 >> ตอนนี้ก็ปรากฎว่าเป็น INT_MAX คงที่พิเศษประกาศอื่น ๆ 15 00:00:40,140 --> 00:00:44,030 ที่ระบุที่ใหญ่ที่สุดที่เป็นไปได้ int ที่คุณสามารถเป็นตัวแทนใน 16 00:00:44,030 --> 00:00:45,160 โปรแกรมเช่นนี้ 17 00:00:45,160 --> 00:00:49,430 ตอนนี้เราได้ตัดสินใจที่จะกลับมาพล INT_MAX เป็นค่าแมวมองของ 18 00:00:49,430 --> 00:00:53,120 ประเภทหนึ่งที่เราได้ลิขสิทธิ์เป็น หมายถึงความผิดพลาดที่เกิดขึ้น 19 00:00:53,120 --> 00:00:56,230 ดังนั้นราคาที่เราจ่ายที่แน่นอนคือ GetInt ที่สามารถเห็นได้ชัดไม่ได้ 20 00:00:56,230 --> 00:01:01,440 จริงกลับจำนวนที่มีขนาดใหญ่เป็น INT_MAX เพราะแม้ว่าจะอยากจะ 21 00:01:01,440 --> 00:01:04,730 ค่าตอบแทนที่ควรจะเป็นจริงๆ ถูกตีความโดยผู - 22 00:01:04,730 --> 00:01:06,260 ใครก็ตามที่ใช้ GetInt - 23 00:01:06,260 --> 00:01:09,340 เป็นข้อผิดพลาดของการจัดเรียงบาง 24 00:01:09,340 --> 00:01:13,840 >> ถัดไปสังเกตเห็นว่าฉันได้ประกาศ n int และถ่านค 25 00:01:13,840 --> 00:01:18,030 ในบรรทัดถัดไปของรหัสนี้ผมเรียก ฟังก์ชั่นที่เรียกว่า sscanf ผ่านใน 26 00:01:18,030 --> 00:01:18,970 สี่ข้อโต้แย้ง 27 00:01:18,970 --> 00:01:25,110 เส้นซึ่งเป็นสายของผู้ใช้ พิมพ์ใน "i% c%" ซึ่งเป็นรูปแบบที่ 28 00:01:25,110 --> 00:01:28,850 สตริงที่ผมคาดหวังว่าผู้ใช้อาจ ประเภทตามที่อยู่ของ 29 00:01:28,850 --> 00:01:30,920 n, และที่อยู่ของค 30 00:01:30,920 --> 00:01:34,860 วัตถุประสงค์ sscanf ตอนนี้ในชีวิตแน่นอน การสแกนสตริงที่กำลังมองหา 31 00:01:34,860 --> 00:01:38,700 รูปแบบเฉพาะที่โปรแกรมเมอร์ ได้ระบุเป็นอาร์กิวเมนต์ที่สองว่า 32 00:01:38,700 --> 00:01:42,020 ในกรณีนี้% i ที่อยู่ใน มีเป็น c% 33 00:01:42,020 --> 00:01:46,700 ดังนั้นหากพบ sscanf int ใน ข้อมูลของผู้ใช้ int ที่จะถูกเก็บไว้ 34 00:01:46,700 --> 00:01:50,270 ภายในของตัวแปรที่เรียกว่า n เพราะ เราได้ให้การเป็นที่สาม 35 00:01:50,270 --> 00:01:52,810 อาร์กิวเมนต์ sscanf ที่อยู่ของ n 36 00:01:52,810 --> 00:01:56,870 ซึ่งหมายความว่า sscanf แน่นอนสามารถไป มีและปรับปรุงค่านั้น 37 00:01:56,870 --> 00:01:59,990 >> ตอนนี้ในกรณีที่ผู้ใช้ ในบางสิ่งบางอย่างมากขึ้น 38 00:01:59,990 --> 00:02:01,220 มากกว่าหนึ่งหรือมากกว่าหลัก - 39 00:02:01,220 --> 00:02:03,570 ในคำอื่น ๆ ที่ถ่านของการจัดเรียงบาง - 40 00:02:03,570 --> 00:02:07,940 ที่คตัวแปรที่สองที่มีอยู่ เราผ่านเข้าไปใน sscanf เป็นที่สี่ 41 00:02:07,940 --> 00:02:10,560 อาร์กิวเมนต์ยังจะมีประชากร 42 00:02:10,560 --> 00:02:14,220 ตอนนี้กลับหัวกลับหางของการตรวจสอบ ตัวละครที่เพิ่มขึ้นจากผู้ใช้ 43 00:02:14,220 --> 00:02:17,360 ว่าถ้าเขาหรือเธอจะไม่ให้ความร่วมมือ และประเภทในมากกว่าเพียงแค่ int, 44 00:02:17,360 --> 00:02:20,530 เราจะสามารถที่จะตรวจสอบได้ในครั้งนี้ ลักษณะเพราะในกรณีที่ sscanf 45 00:02:20,530 --> 00:02:24,860 จะไปกลับ 2 แสดงว่า ทั้งสองตัวยึดที่เต็มไป 46 00:02:24,860 --> 00:02:25,600 ด้วยค่า 47 00:02:25,600 --> 00:02:30,360 แต่เราหวังว่า sscanf แทน ผลตอบแทนที่ 1 ซึ่งหมายความว่าผู้ใช้เท่านั้น 48 00:02:30,360 --> 00:02:31,630 ให้ int 49 00:02:31,630 --> 00:02:34,480 >> สิ่งที่เราทำอย่างไรถ้า sscanf แน่นอนผลตอบแทนที่ 1? 50 00:02:34,480 --> 00:02:39,150 ดีเราทันทีฟรีเส้นที่ ผู้ใช้พิมพ์ในแล้วเรา 51 00:02:39,150 --> 00:02:42,670 ทันทีกลับ n มี อากาศ int 52 00:02:42,670 --> 00:02:47,180 อื่นถ้า sscanf ไม่กลับ 1 และ ผู้ใช้จึงไม่ได้ให้ความร่วมมือ 53 00:02:47,180 --> 00:02:51,470 เรายังคงฟรีสาย แต่เรา ขณะนี้แจ้งให้ผู้ใช้ลองใหม่อีกครั้ง 54 00:02:51,470 --> 00:02:55,390 และเนื่องจากเรายังคงอยู่ภายในว่า ห่วงอนันต์มิฉะนั้นกระบวนการ 55 00:02:55,390 --> 00:03:00,190 จะเริ่มต้นอีกครั้งและอาจจะอีกครั้งและ อาจจะอีกครั้งจนผู้ใช้จริง 56 00:03:00,190 --> 00:03:01,500 ให้เรา int 57 00:03:01,500 --> 00:03:21,490