توابع ورودی و خروجی در c – آموزش برنامه نویسی به زبان C – جلسه سوم

توابع ورودی و خروجی در c رو این جلسه شروع می کنیم و وارد محیط نرم افزار Devcpp میشیم ، قبل از خوندن این قسمت پیشنهاد میکنم تنبلیو کنار بزارید برای چند دقیقه و حتما دو تا  آموزش قبلی رو یک بار دور کنید.

آموزش برنامه نویسی به زبان C – جلسه اول : مقدمات

آموزش برنامه نویسی به زبان C – جلسه دوم: متغیرها در C

اصلا توابع ورودی و خروجی یعنی چی؟ ما هر برنامه که بنویسیم یک سری اطلاعات رو باید داخل برناممون بدیم و یک سری خروجی هارو از کد بگیریم .

در این چند قسمت قراره در رابطه با همین محل های ورودی و خروجی اطلاعات به برناممون صحبت کنم.

 کد فرمت و کاراکترهای کنترلی

از این کاراکترها و فرمتهای چاپ در توابع ورودی و خروجی در c که امروز بحثشون رو یاد میگیریم استفاده میشه .

( اینهارو باید به خاطر بسپارید، البته نه با نوشتن روی کاغذ و حفظی خوندن، با تمرین داخل برنامه هاتون!)

کدهای فرمت رو در مثال 2 توضیح میدم.

کد فرمت مفهوم کاراکتر کنترلی مفهوم
c% کاراکتر f\ انتقال کنترل به صفحه جدید
d%

i%

عدد صحیح با علامت n\ انتقال مکانما به خط بعد
u% عدد صحیح بدون علامت t\ انتقالب مکان نما به 8 مکان بعد
s% رشته r\ ابتدای سطر جاری
f% اعداد اعشاری “\ چاپ کوتیشن
e% نمایش عدد علمی ‘\ چاپ تک کوتیشن
p% اشاره گر %% علامت %

یادتونه گفتم که 32 تا کلمه کلیدی داریم که برای توی زبون C و کامپایلر مفهوم دارن؟

بعد یکم جلوتر فهمیدیم میتونیم توی هر برنامه یک سری متغیر تعریف کنیم و به اونها هم مفهوم بدیم .

حالا میخوام اینو هم اضافه کنم که یک سری تابع داریم که با فراخوانی و اضافه کردن فایل سرعنوانشون به برناممون برای کامپایلر مفهوم پیدا میکنن.مثل همین توابع ورودی و خروجی.

بعنوان نمونه میخوام از تابع printf که یک تابع خروجیه شروع کنم.

وقتی این تابع رو به برنامه اضافه کنید ، کامپیوتر نمیدونه دارین از چی صحبت میکنین ! چون نه بعنوان متغیر تعریفش کردین و نه جز اون 32 کلمه ی کلیدی هستش.

اینجور توابع  روباید با استفاده از #include قبل از تابع اصلیِ main فراخوانی کنیم و صدا بزنیمشون تا کامپیوتر بفهمه مفهوم این کلمه چیه!

ممکنه کسی بپرسه که چرا مثل متغیر ها اونهارو خودمون توی برنامه تعریف نمی کنیم ؟

این توابع بیش از تعریف متغیر ها پیچیدگی دارن و برای اینکه ما درگیر اون پیچیدگی نشیم هر دفعه ، بخشی از کد در فایلی که include کردیم وجود داره و کار مارو ساده میکنه.

حالا از پرحرفی بگذریم!

اولین فایل سرعنوانی که قراره باهاش کار کنیم اسمش stdio.h هست که مربوط به توابع ورودی و خروجی در c میشه.
اولین تابعی که قراره با استفاده ازاین سرعنوان استفاده و معرفی کنیم تابع زیره:

printf :

یک تابع خروجی است که براي نمایش اطلاعات روي صفحه نمایش بکار میره.

شکل کلی این تابع بصورت زیرِ:

 

مثال 1: قراره روی صفحه بنویسیم لوینیک!

همینجا بریم سراغ نرم افزار  devc++ و اون رو باز کنیم، Ctrl+n رو بزنید تا یک سورس فایل جدید باز بشه، حالا طبق گفته های قبل میخوایم کد نویسی رو شروع کنیم، خط اول قراره stdio.h رو فراخوانی کنیم و بعد اون باید تابع main رو معرفی کنیم.و با استفاده از تابع printf قراره روی صفحه بنویسیم levinic  ، وقتی قراره یک متن ثابت رو روی صفحه با استفاده از این تابع بنویسیم لازم نیست که از کدهای فرمت و یا کنترلی استفاده کنیم و متغیری هم معرفی نمیکنیم و فقط داخل دابل کوتیشن ها متنمون رو مینویسیم:

کد هارو کپی نکنید؛ خودتون بنویسید و با Error هایی که میده آشنا بشین، مطمئن باشید اینطوری بهتر یاد میگیرید.

 

 

خب ، بعد از نوشتن کد حتما باید اونو save کنید ، بعد از save کلید F11 رو بزنید و یا از منوی Execute  گزینه ی compile & run رو انتخاب کنید تا صفحه ی زیر براتون باز بشه و کلمه ی لوینیک ای که نوشتین براتون به نمایش در بیاد.

آموزش C - توابع ورودی و خروجی در c

 

مثال 2 : میخوایم مقدار یک متغیر رو روی صفحه نمایش نشون بدیم ، این بار هم طبق تعاریفی که قبلا خوندیم کدش رو مینویسیم:

 

خروجی:

آموزش C - توابع ورودی و خروجی در c

 

اینبار توی تابع از کد فرمت استفاده کردیم ، کد %d به کامپایلر اینو میفهمونه که ما میخوایم مقدار صحیح یک متغیری رو نمایش بدیم ، که بعد از بستن دابل کوتیشن و گذاشتن یک کاما نام متغیر رو معرفی میکنیم.(بخش آخر اونجا که نوشته x رو میگم).

کدهای فرمت در یک توضیح ساده همین کاربرد رو دارن که نوع نمایش مارو مشخص میکنن.

مثال 3 : اینبار یک عدد اعشاری تعریف کنید و مقدار آن را روی صفحه نمایش دهید :

خروجی:

 

آموزش C - توابع ورودی و خروجی در c

 

(بجای کد فرمت اعشاری از کد فرمت صحیح استفاده کنید و تغییر در خروجی رو مشاهده کنید.)

نکته ی جالبه این کد اینه که ،توی کد فرمت %f  با اینکه متغیرمون فقط 2 رقم بعد اعشار داره ، اما این کد فرمت کار خودشو میکنه و تا 6 رقم اعشار رو به ما نمایش میده  و 4 رقم بعدی رو صفر میزاره.

تعیین طول میدان یا فرمت چاپ:

توی تابع ( )printf میتونیم طول میدان خروجی یا فرمت خروجی را مشخص کنیم.

تعیین طول میدان براي رشته ها بصورت ns %که n طول میدان رو نشان میده.

این مثالو ببینید:

در حالت عادي، خروجی در سمت راست میدان قرار میگیره.توجه کنید که نگفتم سمت راست صفحه یا هرچی! سمت راست میدان عرض کردم:D(کدش رو خودتون بنویسید و توی نرم افزار کامپایلش کنید و خروجی رو ببنیدی.) توی خروجی میبینید که نوشته یک مقداری اومده سمت راست مثل تصویر زیر.

خروجی رو این شکلی تصور کنید: یازده خونه در نظر گرفته میشه ، اگر تعداد کاراکتر های ورودی کمتر باشه تعدادی ازون خالی میمونه و باز هم 11 خونه باقی میمونه.

تعیین طول میدان  یا فرمت چاپ در اعداد اعشاری :

تعیین طول میدان براي داده های اعشاري بصورت n.mf% که n اندازه کل عدد اعشاري شامل علامت ممیز و m تعداد ارقام اعشار رو نشان میده. باید به این نکته توجه داشت که اگر تعداد ارقام اعشار عدد مورد نظر از m بیشتر باشه، تعداد ارقام قسمت اعشار به m گرد میشه.

 

مثال : در مثال زیر حداکثر طول میدان 5 و حداکثر اعشـار 2 در نظر گرفته شده.

 

خروجی:

آموزش C - توابع ورودی و خروجی در c

برای تعیین طول میدان رشته و اعداد اعشاری تا اینجا توضیح دادیم ، در آخر هم طول میدان اعداد صحیح  میمونه.

طول میدان اعداد صحیح

برای اعداد صحیح  از nd% استفاده میشه که n تعداد ارقام مورد نظر برای چاپ متغیر رو نشون میده.
مثال های زیاد تری میشه برای این بخش و تا اینجا زد ، که پیشنهاد میکنم خیلی هاشو خودتون توی ذهنتون با کد ها ایجاد کنید و برای خودتون مثال و پروژه تعریف کنید .بلخره لازمه یکم خلاقیت به خرج بدین!:D

چند تا مثال دیگه که خودتون تست کنید و خروجی هاشون رو ببینید:

 

 

آخرین تابع این قسمت از آموزش هم تابعی برای خوندن از صفحه کلیده:

تابع scanf :

این تابع برای دریافت اطلاعات از صفحه کلید مورد استفاده قرار میگیره. شکل کلی این تابع بصورت زیره:

مثال:مقدار وارد شده از صفحه کلید را بخوانید و در متغیری صحیح به نام x بریزید.

 

در تابع printf قرار بود مقدار از متغیر خونده بشه و از کدهای فرمت استفاده کردیم.

در اینجا قراره مقداری در متغیر ها ریخته بشه و عکس عمل تابع قبلی انجام بشه. در تابع scanf هم پس باید از کد فرمت استفاده کنیم. فقط توجه کنید که مقابل کد فرمت اسم متغیر با & اومده. که اون به معنی عملگر آدرس هستش و در کنار کدهای فرمت به کامپایلر میفهمونه که طبق چه فرمتی و در چه آدرسی مطلب نوشته و ذخیره بشه. همیشه در تابع scanf از عملگر آدرس در کنار نام متغیر استفاده میکنیم.

 

فایل سرعنوان این تابع هم دیدیم که stdio.h هستش و اگر اونو نزارین کامپایلر نمیشناسه کد رو و اررور میده (همه اینارو تست کنید، برنامه نویسی برای C به درک مفهوم پروژه و خلاقیت احتیاج داره)
توضیح درباره ی این سرعنوان و توابع ورودی و خروجی در c زیاده و این مطلب هم تا اینجا خودش طولانی شده دیگه!بقیش باشه جلسه بعد 🙂

یا علی…

 

جلسه بعدی و ادامه ی آموزش توابع stdio.h : تابع getch و دیگر توابع ورودی

حمیدرضا مودت

یک مهندس الکترونیک ، علاقه مند به یاد دادن و یاد گرفتن پیرامون دانش برق و الکترونیک

مطالب مرتبط

10 دیدگاه‌

  1. sabarad گفت:

    توی تابع scanf خروجی یک صفحه خالی که میشه توش نوشت درسته ؟

      • sabarad گفت:

        در اینجا قراره مقداری در متغیر ها ریخته بشه و عکس عمل تابع قبلی انجام بشه….. همیشه در تابع scanf از عملگر آدرس در کنار نام متغیر استفاده میکنیم.
        من اینو متوجه نشدم در این تابع چطوری توی متغیر مقدار ریخته میشه ؟
        کنار اسم متغیر وقتی & رو نمی ذارم هم همون صفحه باز میشه دلیلش چیه وچه فرقی دارن ؟

        • شما با نوشتن scanf("%d", &x); اطلاعات وارد شده از طریق کیبورد رو در متغیر x میریزید. اگر میخواید بدونید چطوری باید کتابخونه اون رو بررسی کنید که زوده هنوز بررسی نحوه کار این تابع ها..

          صفحه باز میشه اما اطلاعات ذخیره نمیشن. scanf فقط زمانی اطلاعات رو ذخیره میکنه که بجای صدا زدن نام متغیر ، آدرس متغیر معرفی شده باشه. با گذاشتن & کنار نام هر متغیر ما میتونیم آدرس اون رو معرفی کنیم.

          مثالهای جلسات بعد که از اطلاعات ورودی Scanf استفاده کردیم میتونین امتحان کنید که بدون & چون اطلاعات ذخیره نمیشن ، خط بعد از Scanf اصلا اجرا نمیشه و بی نهایت بار منتظر وارد کردن اطلاعات میمونه.

  2. sabarad گفت:

    سلام ویندوز رو دوباره نصب کردم و مشکل خدا رو شکر بر طرف شد.
    انجایی که نوشتین به جای کد فرمت اعداد اعشاری ، کد فرمت صحیح رو استفاده کنید نتیجه رو ببینید من گذاشتم اما یک عدد بی ربط نشون میده. نوع داده رو هم عوض کردم اعشار و نشون نمیده .درسته ؟ اگه فقط کد فرمت رو عوض کنیم باید چه عددی نشون بده که توی مال من نشون نمیده ؟
    آموزشتونم خیلی عالی واقعا ممنون .

    • سلام.خداروشکر .
      همین درسته !عدد بی ربط نشون میده یا صفر، اما اروری رو به شما نمیده ، این نشون میده که همه ی باگ ها و اشتباهات در برنامه نویسی ارور نخواهند داشت! برنامه کامپایل میشه اما درست نیست.
      کلا همه ی حالت هارو تست کنید تا با تجربه بشید…

  3. P گفت:

    خیلی مردی پسر. :))

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *