>> سرور 1: دعونا نلقي نظرة في المكتبة CS50،
على وجه التحديد وظيفة GetInt لها.
هنا لدينا المصدر الفعلي رمز لGetInt.
ولاحظ أنه ليس وقتا طويلا، و أكثر من ذلك يشكل حلقة في حين -
حلقة لا نهائية في ذلك - وهذا فقط إرجاع قيمة مرة واحدة قمنا فعلا
حصلت ما كنا نتوقعه.
دعونا المشي من خلال ذلك.
>> لاحظ هنا أولا، في حين تبدأ حلقة.
تلاحظ التالية التي لدينا سطر من التعليمات البرمجية الذي يدعو فعلا GetString،
ويخزن قيمة الإرجاع في متغير، ودعا الخط، من نوع السلسلة.
نحن ثم القيام قليلا من التعقل الاختيار.
إذا خط == فارغة، فإننا الغريب العودة INT_MAX.
>> الآن اتضح أن INT_MAX هو ثابت خاص أعلن في مكان آخر
التي تحدد على أكبر عدد ممكن الباحث التي يمكن أن تمثل في
مثل هذا البرنامج.
ونحن الآن قد قررت بصورة تعسفية للعودة INT_MAX كقيمة الحارس من
أنواع، واحد بعد أن قمنا محفوظة كما وهذا يعني وجود خطأ قد حدث.
وبالتالي فإن الثمن الذي ندفعه، بالطبع، هو التي على ما يبدو لا يمكن GetInt
العودة بالفعل عدد كبير مثل INT_MAX، لأنه حتى إذا كان يريد،
ينبغي أن قيمة الإرجاع حقا أن تفسر من قبل المتصل -
أيا باستخدام GetInt -
كما خطأ من نوع ما.
>> المقبل، لاحظ أن لقد أعلن ون كثافة العمليات وشار ج.
في هذا السطر التالي من التعليمات البرمجية، أسميه وظيفة تسمى sscanf، ويمر في
أربع حجج.
الخط، الذي هو سلسلة للمستخدم كتبته في "ط٪٪ ج"، وهو شكل
السلسلة التي أتوقع جبروت المستخدم نوع، تليها عنوان
ن، وعنوان ج.
الغرض الآن في sscanf في الحياة هو في الواقع لمسح سلسلة تبحث عن
شكل خاص أن مبرمج وقد المحدد كما أن الحجة الثانية.
في هذه الحالة، هو في ط٪ هناك، كما هو٪ ج.
حتى إذا sscanf اجه الباحث في إدخال المستخدم، وسيتم تخزين أن كثافة العمليات
داخل متغير يسمى ن، ل قدمنا ​​كثالث
حجة لsscanf عنوان ن.
وهو ما يعني أن sscanf يمكن أن تذهب في الواقع هناك، وتحديث قيمة فيها.
>> الآن، في حالة أنواع المستخدم في شيء أكثر
من واحد أو أكثر من أرقام -
وبعبارة أخرى، شار من نوع ما -
ج أن المتغير الثاني، له عنوان مررنا في sscanf كما دورته الرابعة
كما سيتم ملؤها الحجة.
الآن رأسا على عقب فحص ل شخصية إضافية من المستخدم
أنه إذا كان هو أو هي لم تتعاون، والأنواع في أكثر من مجرد كثافة العمليات،
سنكون قادرين على الكشف عن ذلك في هذا الطريقة، لأنه في هذه الحالة، sscanf
يجري في العودة 2، مما يدل على أن امتلأت كل من النائبة
مع القيم.
لكننا بدلا من ذلك على أمل أن sscanf ترجع 1، مما يعني أن المستخدم فقط
أتاح الباحث.
>> ماذا نفعل إذا sscanf في الواقع يعود 1؟
حسنا، نحن فورا سراح الخط الذي كتابة المستخدم في، ومن ثم نحن
ن العودة فورا، وبعد حصلت على كثافة العمليات.
آخر، إذا sscanf لا عودة 1، و المستخدم بالتالي لم تتعاون،
ما زلنا تحرير الخط، لكننا الآن مطالبة المستخدم لإعادة المحاولة.
ولأننا ما زلنا داخل ذلك حلقة لا نهائية خلاف ذلك، فإن عملية
وسوف تبدأ مرة أخرى، وربما مرة أخرى، و ربما مرة أخرى، حتى المستخدم فعليا
يوفر لنا كثافة العمليات.