2 00:00:00,000 --> 00:00:01,860 >> SPEAKER 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 >> بعد، توجه کنید که من اعلام کرده ام N هوشمند و یک کاراکتر ج. 25 00:01:13,840 --> 00:01:18,030 در این خط کد بعدی، I تماس بگیرید تابع به نام 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 در این مورد،٪ من است در وجود دارد، به عنوان٪ C است. 33 00:01:42,020 --> 00:01:46,700 بنابراین اگر sscanf بین المللی در برخورد ورودی کاربر، که int ذخیره خواهد شد 34 00:01:46,700 --> 00:01:50,270 در داخل متغیر به نام N، زیرا ما به عنوان سومین ارائه 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 بلافاصله بازگشت 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