2 00:00:00,000 --> 00:00:01,860 >> დინამიკები 1: მოდით შევხედოთ at 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 და შეამჩნია, რომ ეს არ არის ძალიან ხანგრძლივი და ყველაზე მეტად ის წარმოადგენს, ხოლო loop - 6 00:00:12,050 --> 00:00:15,620 უსასრულო loop რომ - რომ მხოლოდ დააბრუნებს ღირებულება ერთხელ ჩვენ რეალურად 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 >> გაითვალისწინეთ, აქ პირველ რიგში, ხოლო loop იწყება. 10 00:00:21,650 --> 00:00:25,390 ყურადღება მიაქციეთ შემდეგ, რომ ჩვენ გვაქვს ხაზი კოდი რომ რეალურად მოუწოდებს GetString, 11 00:00:25,390 --> 00:00:29,620 და ინახავს დაბრუნების ღირებულების ცვლადი, მოუწოდა ხაზი, ტიპის string. 12 00:00:29,620 --> 00:00:31,210 ჩვენ მაშინ ამის გაკეთება ცოტა საღი აზრის ქვითარი. 13 00:00:31,210 --> 00:00:35,770 თუ ხაზი == null, მაშინ ჩვენ საინტერესოა დაბრუნების 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 როგორც Sentinel ღირებულება 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 >> შემდეგი შეამჩნევთ, რომ მე განაცხადა int n და char c. 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 წელს მომხმარებლის input, რომ 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 სხვა სიტყვებით, char გარკვეული - 40 00:02:03,570 --> 00:02:07,940 რომ მეორე ცვლადი c, რომლის მისამართი ჩვენ შევიდა sscanf როგორც მისი მეოთხე 41 00:02:07,940 --> 00:02:10,560 არგუმენტი ასევე იქნება დასახლებული. 42 00:02:10,560 --> 00:02:14,220 ახლა upside of შემოწმება დამატებითი ხასიათი მომხმარებელი 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 აუწყებდა, რომ ორივე placeholders ივსებოდა 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