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 التي تحدد على أكبر عدد ممكن الباحث التي يمكن أن تمثل في 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 >> المقبل، لاحظ أن لقد أعلن ون كثافة العمليات وشار ج. 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 الخط، الذي هو سلسلة للمستخدم كتبته في "ط٪٪ ج"، وهو شكل 28 00:01:25,110 --> 00:01:28,850 السلسلة التي أتوقع جبروت المستخدم نوع، تليها عنوان 29 00:01:28,850 --> 00:01:30,920 ن، وعنوان ج. 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 في هذه الحالة، هو في ط٪ هناك، كما هو٪ ج. 33 00:01:42,020 --> 00:01:46,700 حتى إذا sscanf اجه الباحث في إدخال المستخدم، وسيتم تخزين أن كثافة العمليات 34 00:01:46,700 --> 00:01:50,270 داخل متغير يسمى ن، ل قدمنا ​​كثالث 35 00:01:50,270 --> 00:01:52,810 حجة لsscanf عنوان ن. 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 أنه إذا كان هو أو هي لم تتعاون، والأنواع في أكثر من مجرد كثافة العمليات، 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 أتاح الباحث. 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 ن العودة فورا، وبعد حصلت على كثافة العمليات. 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 يوفر لنا كثافة العمليات. 57 00:03:01,500 --> 00:03:21,490