تفاوت کلیدی – scanf در مقابل دریافت
یک تابع مجموعه ای از دستورات برای انجام یک کار خاص است. بدون نوشتن تمام دستورات در یک برنامه، می توان آن را به چندین تابع تقسیم کرد. در برنامه نویسی، کاربر می تواند توابع خود را تعریف کند. همچنین توابعی توسط زبان های برنامه نویسی ارائه شده است. زبان C تعدادی توابع را فراهم می کند، بنابراین برنامه نویس می تواند مستقیماً از آنها استفاده کند بدون اینکه از ابتدا آنها را پیاده سازی کند. دو تابع ارائه شده توسط زبان C عبارتند از scanf و gets. این مقاله تفاوت بین این دو تابع را مورد بحث قرار می دهد. تفاوت اصلی بین scanf و gets در این است که scanf پس از مواجهه با یک فضای خالی، خط جدید یا انتهای فایل (EOF) ورودی را به پایان میرساند، در حالی که gets یک فضای خالی را به عنوان بخشی از رشته ورودی در نظر میگیرد و با برخورد با خط جدید یا EOF، ورودی را پایان میدهد.
اسکنف چیست؟
عملکرد scanf میتواند ورودیها را از صفحهکلید بخواند و آنها را مطابق با فرمت مشخصشده ذخیره میکند. ورودی را می خواند تا زمانی که با یک فضای خالی، خط جدید یا EOF مواجه شود. نحو به شرح زیر است.
scanf("رشته قالب"، لیست آدرس متغیرها)؛
برای درک scanf به مثال زیر مراجعه کنید.
شکل 01: scanf با یک ورودی
طبق برنامه بالا، ورودی دریافتی از صفحه کلید یک عدد صحیح است، بنابراین مشخص کننده فرمت %d است. اگر یک مقدار کاراکتر دریافت می کند، مشخص کننده قالب %c است.اگر یک مقدار ممیز شناور دریافت کنید، مشخص کننده قالب %f است. مقدار ورودی دریافتی باید در متغیر عدد ذخیره شود. بنابراین آدرس عدد متغیر به تابع scanf منتقل می شود. حالا متغیر عدد حاوی مقدار داده شده توسط کاربر از صفحه کلید است. در نهایت، میتوانیم متغیر عدد را برای بررسی مقدار چاپ کنیم.
همچنین امکان دریافت بیش از یک مقدار در یک زمان وجود دارد.
شکل 02: scanf با ورودی های متعدد
ورودی های دریافتی در متغیر شماره 1 و شماره 2 ذخیره می شوند. مقادیر را می توان با استفاده از printf بررسی کرد.
چه می شود؟
تابع gets برای دریافت ورودی از صفحه کلید تا مواجهه با خط جدید یا EOF استفاده می شود. فضای خالی به عنوان بخشی از ورودی در نظر گرفته می شود. نحو تابع gets به شرح زیر است.
gets("محل ذخیره رشته");
اگر هنگام دریافت رشته خطایی وجود داشته باشد، تابع gets مقدار تهی را برمی گرداند.
به مثال زیر مراجعه کنید،
شکل 03: دریافت
ورودی توسط تابع gets دریافت شده و در متغیر word1 ذخیره می شود. اگر برنامه نویس از scanf به جای gets استفاده کرده و رشته ای مانند "hello world" را وارد کند، scanf به دلیل فضای خالی، رشته را به صورت دو رشته می خواند.اما gets آن را به عنوان یک رشته «سلام جهان» می خواند.
شباهتهای بین scanf و gets چیست؟
- هر دو توابع ارائه شده توسط زبان برنامه نویسی C هستند.
- هر دو باید حاوی فایل هدر stdio.h برای استفاده از این توابع باشند.
- هر دو را می توان برای دریافت ورودی از ورودی استاندارد استفاده کرد.
تفاوت بین scanf و gets چیست؟
scanf در مقابل دریافت |
|
scanf یک تابع C برای خواندن ورودی از ورودی استاندارد تا زمان مواجهه با یک فضای خالی، خط جدید یا EOF است. | gets یک تابع C برای خواندن ورودی از ورودی استاندارد تا زمان مواجهه با خط جدید یا EOF است. فضای خالی را به عنوان بخشی از ورودی در نظر می گیرد. |
نحو | |
تابع scanf رشته قالب و فهرست آدرس متغیرها را می گیرد. به عنوان مثال، scanf("%d", &number); | تابع gets نام متغیر را می گیرد تا مقدار دریافتی را ذخیره کند. به عنوان مثال. gets(name); |
انعطاف پذیری | |
scanf می تواند چندین مقدار از انواع داده های مختلف را بخواند. | gets() فقط داده های رشته کاراکتر را دریافت می کند. |
خلاصه - scanf در مقابل دریافتها
scanf و gets توابعی هستند که توسط زبان برنامه نویسی C ارائه می شوند. کاربر نیازی به پیاده سازی این توابع از ابتدا ندارد. آنها می توانند مستقیماً از آنها در برنامه های خود استفاده کنند. تفاوت بین scanf و gets در این است که scanf با مواجهه با یک فضای خالی، خط جدید یا انتهای فایل (EOF) ورودی را به پایان میرساند و یک فضای خالی را به عنوان بخشی از رشته ورودی در نظر میگیرد و با برخورد با خط جدید یا EOF، ورودی را پایان میدهد.استفاده از scanf یا gets به نحوه دریافت ورودی کاربر از ورودی استاندارد که بیشتر اوقات صفحه کلید است بستگی دارد. scanf انعطاف پذیرتر از چیزی است که می شود.
دانلود نسخه PDF scanf vs gets
می توانید نسخه PDF این مقاله را دانلود کنید و طبق یادداشت نقل قول برای اهداف آفلاین از آن استفاده کنید. لطفاً نسخه PDF را از اینجا دانلود کنید تفاوت بین scanf و دریافت