>> SPEAKER 1: اجازه دهید یک نگاه در کتابخانه CS50،
به طور خاص عملکرد GetInt آن است.
در اینجا ما منبع واقعی کد برای GetInt.
و متوجه است که آن را بیش از حد طولانی نیست، و از آن به منزله یک حلقه در حالی که -
در حلقه بی نهایت در آن - که تنها یک مقدار را برمی گرداند زمانی که ما کرده ایم در واقع
بدست چیزی است که ما انتظار می رود.
اجازه دهید از طریق آن راه رفتن.
>> توجه کنید در اینجا برای اولین بار، در حالی که حلقه شروع می شود.
توجه بعدی که ما یک خط از کد که در واقع خواستار GetString،
و فروشگاه ها به مقدار بازگشتی در متغیر، به نام خط، از نوع رشته است.
ما پس از انجام یک بیت از یک چک سلامت عقل.
اگر خط == تهی، پس ما جالب بازگشت INT_MAX.
>> حالا معلوم است که INT_MAX است ثابت ویژه اعلام کرد در جای دیگر
که مشخص بزرگترین ممکن اعضای هیات که شما می توانید در یک نماینده
برنامه شبیه به این.
در حال حاضر ما خودسرانه تصمیم به بازگشت INT_MAX به عنوان یک ارزش نگهبان از
انواع، یکی است که ما به عنوان سایت متعلق به ام به این معنی که یک خطا رخ داده است.
پس قیمت ما پرداخت، البته، که GetInt می تواند ظاهرا نه
در واقع یک عدد به عنوان بزرگ به عنوان بازگشت INT_MAX، زیرا حتی اگر آن را می خواهد،
که مقدار بازگشتی باید واقعا توان با تماس گیرنده تفسیر -
هر کس با استفاده از GetInt -
به عنوان یک خطا از نوعی.
>> بعد، توجه کنید که من اعلام کرده ام N هوشمند و یک کاراکتر ج.
در این خط کد بعدی، I تماس بگیرید تابع به نام sscanf، عبور در
چهار استدلال.
خط است، که رشته کاربر تایپ در، "من٪ ج" است، که یک فرمت
رشته ای که من انتظار ممکن کاربر نوع و به دنبال آن آدرس
نفر، و آدرس ج.
هدف در حال حاضر sscanf در زندگی است که در واقع برای اسکن یک رشته به دنبال
فرمت خاص است که برنامه نویس است که به عنوان آرگومان دوم مشخص شده است.
در این مورد،٪ من است در وجود دارد، به عنوان٪ C است.
بنابراین اگر sscanf بین المللی در برخورد ورودی کاربر، که int ذخیره خواهد شد
در داخل متغیر به نام N، زیرا ما به عنوان سومین ارائه
استدلال به sscanf آدرس نفر.
به این معنی که sscanf در واقع می تواند به وجود دارد، و به روز رسانی ارزش آن.
>> در حال حاضر، در مورد نوع کاربر در چیزی بیشتر
از یک یا چند رقم -
به عبارت دیگر، یک کاراکتر از نوعی -
که دوم ج متغیر، که آدرس ما به sscanf به عنوان چهارم آن گذشت
استدلال نیز جمعیت خواهد شد.
در حال حاضر حرکت صعودی از چک کردن شخصیت های اضافی از کاربر است
که اگر او مساعد نباشد، و انواع در بیش از یک عدد صحیح،
ما قادر به تشخیص آن را در این صورت، چرا که در آن صورت، sscanf
است که به بازگشت 2، به این مفهوم است که هر دو از متغیرهایی پر شدند
با ارزش.
اما ما امیدواریم که sscanf به جای می گرداند 1، که بدان معنی است که کاربر تنها
هوشمند ارائه شده است.
>> چه کنیم اگر sscanf در واقع می گرداند 1؟
خب، ما فورا آزاد خط که کاربر تایپ شده در، و پس از آن ما
بلافاصله بازگشت N، داشتن بدست یک int.
دیگری، اگر sscanf نمی گرداند 1، و بنابراین کاربر عدم همکاری،
ما هنوز آزاد خط، اما ما در حال حاضر کاربر به سعی مجدد تحریک کند.
و چون ما هنوز در داخل آن است حلقه در غیر این صورت بی نهایت، فرایند
دوباره دوباره آغاز خواهد شد، و شاید، و شاید دوباره، تا زمانی که کاربر در واقع
فراهم می کند ما را از نوع int.