📕 عاشق یادگیری و به اشتراکگذاری دانش -- آیدی من تو شبکه های اجتماعی : mrNazouri13
بررسی تابع scanf در زبان C
ویدیو مربوط به این مقاله: (کلیک کن)

تو مقاله قبلی با stdio و تابع printf آشنا شدیم. تابع printf برای نمایش مقداره و تابع scanf برای گرفتن مقدار.
چطوری از scanf استفاده کنم؟
scanf("فرمت_ورودی", &variable);فرمت ورودی: نوع دادهای که میخوای دریافت کنی (مثلا d% برای عدد صحیح)
variable&: آدرس متغیر رو میدی تا scanf بتونه مقدار رو داخلش ذخیره کنه (& یعنی آدرس این متغیر رو بده) مثال:
int age;
printf("Enter Your age: ");
scanf("%d", &age); // دریافت عدد و ذخیره در متغیر age
printf("Your age: %d", age);تو خط اول یه متغیر ساختم ولی مقداری بهش ندادم.
تو خط دوم از printf استفاده کردم و متنی رو چاپ کردم.
تو خط سوم از scanf (که داخل همون stdio.h هست) استفاده کردم و تو ورودی اول نوع مقداری که کاربر باید وارد کنه رو نوشتم (d% یعنی باید int بزنه) تو ورودی دوم علامت & گذاشتم و اسم متغیر رو قرار دادم تا آدرس اون متغیر بدست بیاد و مقداری که کاربر وارد کرده داخلش قرار بگیره.
تو خط آخر از printf استفاده کردم، متنی رو چاپ کردم و در آخرش d% گذاشتم یعنی میخوام بجای d% یک عدد چاپ بشه، و بیرون string یه ویرگول گذاشتم و اسم متغیری که عدد داخلش هست و باید همراه رشته چاپ بشه رو دادم.
(من میتونم چندین تا % داخل یک رشته قرار بدم)
برنامه رو اجرا میکنم، تو ورودی بهش عدد میدم و بدون مشکل اجرا میشه. اما اگه کاراکتر یا رشته وارد کنم چه اتفاقی میوفته؟ خطا بهم نمیده و یه عدد تصادفی برام برمیگردونه! یعنی یه عدد تصادفی داخل age قرار میگیره. دلیلش چیه؟ به کد زیر که قبلا بررسی کردیم دقت کن:
int age;این خط فقط یه متغیر تعریف میکنه، ولی هیچ مقداری بهش اختصاص نمیده. یعنی مقدارش از قبل ممکنه هر چیزی باشه. پس وقتی scanf نتونه مقدار تعیین شده رو بخونه، همون عدد قبلی داخل age باقی میمونه، و توی printf هم چاپ میشه.
نکته. علامت & یه اپراتور خیلی مهم تو زبان Cعه و استفادش فقط به scanf ختم نمیشه.
به کد زیر دقت کن:
char name[]; // Error
char ch; // no Errorخط دوم مشکلی نداره چون گفتم یه متغیر ساده به اسم ch از نوع char بساز. کامپایلر چون دقیقا میدونه باید برای ch فقط 1 بایت حافظه کنار بذاره خطا نمیده (هیچ چیزی مبهم نیست)
اما خط اول خطا میده چون گفتم یه آرایهایی از نوع char به اسم name بساز و تعیین نکردم که این آرایه چندتا خونه و چقدر حافظه داشته باشه! به همین دلیل کامپایلر نمیتونه حدس بزنه که این آرایه چندتا عضو داره، چون نه اندازش رو گفتم نه مقدار اولیه دادم و درنتیجه: Error 🤔
توی C اگه قرار باشه آرایه تعریف کنم و مقدار اولیه بهش ندم باید بدین شکل عمل کنم:
char name[10];تو کد بالا تعیین کردم که آرایه name باید 10 تا خونه داشته باشه. اما تعداد خونه دقیقا یعنی چه؟
تو کد بالا گفتم یه آرایه بساز با 10 خونه از نوع char، یعنی 10 بایت حافظه پشتسرهم. هر خونه میتونه یه کاراکتر نگه داره.
حالا یه سوال! آیا من میتونم رشته Amirhosein رو داخل name قرار بدم؟ عبارت Amirhosein تعداد 10 تا کاراکتر داره ولی نمیتونم داخل name قرارش بدم. چرا؟
تو زبان C رشتهها همیشه با کاراکتر 0\ تموم میشن. یعنی وقتی میخوای Amirhosein رو توی آرایه بریزی، واقعا داری اینو میریزی:
'A' 'm' 'i' 'r' 'h' 'o' 's' 'e' 'i' 'n' '\0'یعنی 11 تا خونه لازم داری نه 10 تا (البته ممکنه خطا نده ولی هزاران دلیل به وجود میاد که برنامه به شکل های نادرست رفتار کنه)
باکیفیت ترین دوره آموزش برنامه نویسی چیست ؟
⭐⭐⭐⭐⭐ دوره ی آموزش دوازده قدم برنامه نویسی مهندس سام نیک زاد با کسب امتیاز بالاترین کیفیت دوره ی آموزشی بعنوان با کیفیت دوره انتخاب شده است برای مشاهده کلیک کنید
ثبت نام دوره با تخفیف از ویرگول
مطلبی دیگر از این انتشارات
چگونه یک پیغام کامیت خوب بنویسیم؟
مطلبی دیگر از این انتشارات
ناگتِ ویژوالاستودیو (Visual Studio Nuget) هم بله!
مطلبی دیگر از این انتشارات
زبانهای برنامهنویسی از نگاه اجرا، سطح و پردازش