ساختار برنامه در زبان C و توابع ورودی و خروجی

بعد از آشنایی با انواع داده ها و روش ایجاد برنامه در زبان c می خواهیم به چگونگی ساختار زبان c و ورودی و خروجی ها بپردازیم. ساختار زبان c از مجموعه ای از دستورات و تعدادی تابع تشکیل می شود. هر تابع، برای حل بخشی از مسئله نوشته می‌شود و دارای نام است. ساختار برنامه در C شامل موارد زیر می باشد:

  • کتابخانه ها
  • تابعmain
  • براکتها
  • نقطه ویرگول ;
  • ورودی و خروجی و عملیات محاسباتی

ساختار برنامه در زبان C و توابع ورودی و خروجی

ورودی و خروجی داده ها

قبل از شروع کار بهتر است توجه کنیم که، علاوه بر توابع main ، توابع دیگری از قبل نوشته شده همراه کامپایلر زبان c ارائه می‌شود و به وفور در برنامه ها مورد استفاده قرار می‌گیرند. در واقع ، بسیاری از اعمال در برنامه نویسی با c توسط این توابع از پیش نوشته شده انجام میشود. زبان برنامه سازی c یک زبان ساخت یافته بوده و می توانیم از توابع پیش ساخته و غیر پیش ساخته استفاده کنیم. توابع پیش ساخته توابعی هستند که قبلا نوشته شده و درون کتابخانه c وجود دارند. کتابخانه توابع اصلی از فایل هایی تشکیل شده که به اصطلاح به آن ها Header file گویند و توابع پیش ساخته درون آنها ذخیره شده است. به عنوان مثال ورود داده ها از صفحه کلید و نوشتن آنها در صفحه نمایش، در c توسط این توابع انجام می شود، که از قبل نوشته شده اند و همراه کامپایلر وجود دارند. بنابراین قبل از پرداختن به برنامه نویسی، باید اطلاع داشته باشیم که این توابع در کجا وجود قرار دارند و برنامه چگونه با آنها دسترسی پیدا می کند.این توابع و سایر اطلاعاتی که کامپایلر برای ترجمه‌ی برنامه به آنها نیاز دارد، در تعدادی از فایل ها به نام فایل سرایند قرار دارند.

پسوند فایل های سرآیند h. است و معمولا در محلی که کامپایلر نصب شده است، در داخل پوشه ای به نام include قرار میگیرند.برای استفاده از این توابع باید از قبل بدانیم که هر تابع در کدام فایل قرار دارد. برای مثال توابع ()printf و ()scanf در فایل stdio.h قرار دارند.

جهت اتصال فایل های سرآیند از دستور include# استفاده میشود. این دستور از دستورات پیش پردازنده بوده و قبل از تابع ()main قرار میگیرد. پیش پردازنده مترجمی است که با مشاهده دستوراتی که با # شروع میشوند، اجرا شده و آن ها را به دستورات زبان c تبدیل میکند. این دستور به ; ختم نمیشود. این دستورات به صورت زیر مورد استفاده قرار میگیرند.

<نام فایل سرآیند> include#

#include <فایل سرایند>
int main()
{
اعلان متغیرها
دستورات اجرایی
return 0;
}

در مورد دستور  include باید به نکات زیر توجه کنیم:

  • بین # وinclude نباید فاصله باشد.
  • بین نام فایل و علائم < و > فاصله ای نباشد.
  • ذکر علامت < و > ضروری است.

اصولاً، امکانات ورودی و خروجی هر زبان برنامه‌سازی، بیان کننده میزان قابلیت آن زبان در طراحی فرمان های ورودی داده ها و گرفتن گزارش از برنامه است. در زبان برنامه نویسی c روش های گوناگونی برای ورودی و خروجی داده ها وجود دارد. معمولا ورودی و خروجی با استفاده از توابع ()scanf و ()printf انجام میشود. برای سهولت کارکردن با کاراکتر ها از توابع دیگری نیز برای دریافت و نمایش کاراکترها استفاده می شود. توابع ورودی : ()getch() _ getche() _ getchar  –  توابع خروجی: ()putch() _ putchar .

۱- تابع خروجی ()printf

 زمانی که برنامه های زبان c اجرا میشوند پنجره ای نمایش داده میشود که به آن پنجره خروجی یا نماش گفته میشود.معمولا چاپ اطلاعات با استفاده از تابع ()printf که در فایل stdio.h قرار دارد انجام میشود. این تابع به دو روش  استفاده میشود:

;(“<عبارت ۱ >“)printf

;(<عبارت ۲ > , “<عبارت ۱>“)printf

<عبارت ۱> شامل اطلاعات زیر میباشد:

  • اطلاعاتی که باید عینا در خروجی چاپ شوند
  • کاراکتر های تعیین کننده فرمت خروجی که با علامت % شروع میشوند
  • کاراکتر های کنترلی که با \ شروع میشوند

<عبارت ۲> اطلاعاتی است که باید به خروجی منتقل شوند که معمولا لیستی از متغیرها میباشند

۱-۱- کاراکترهای فرمت:

کاراکترهای فرمت ، کاراکترهای قالب جهت تعیین شکل خروجی و رشته های دیگری است که باید به خروجی منتقل شوند. “عبارت مورد نظر” شامل اطلاعاتی هستند که با فرمت مشخص شده درکاراکترهای فرمت، باید به خروجی منتقل شوند. کاراکترهایی که برای تعیین فرمت خروجی مورد استفاده قرار می گیرند با کاراکتر % شروع می شوند.

  کاراکترفرمت | نوع اطلاعات که باید به خروجی منتقل شود
  • %C :  یک کاراکتر
  • %d : اعداد صحیح دهدهی مثبت و منفی
  • %i  : اعداد صحیح دهدهی مثبت و منفی
  • %e : نمایش علمی عدد همراه با حرف
  • %E : نمایش علمی عدد همراه با حرف
  • %f : عدد اعشاری ممیز شناور
  • %g : اعداد اعشاری ممیز شناور
    %G : اعداد اعشاری ممیز شناور
  • %O : اعداد مبنای ۸ مثبت
  • %S : رشته ای از کاراکترها ( عبارت رشته ای )
  • %U : اعداد صحیح بدون علامت ( مثبت )
  • %x : اعداد مبنای ۱۶ مثبت با حروف کوچک
  • %X : اعداد مبنای ۱۶ مثبت با حروف بزرگ
  • %p : اشاره گر
  • %n : موجب میشود تا تعداد کاراکترهایی که تا قبل ازاین کاراکتر به خروجی منتقل شده اند شمارش شده و در پارامتر متناظر با آن قرار گیرد.
  • %% : علامت %
main()
 {
 int num ;
 printf("the address of num is:" );
 printf(" %p", &num );
 }
 در مثال فوق عبارت &num آدرس متغیر num را مشخص می کند که برای نوشتن آن از کاراکتر فرمت p% استفاده شده است. نمونه ای از خروجی مثال بصورت زیر است.
 
 the address of num is : 6A30:OFE4

۱-۲ کاراکترهای کنترلی:

کاراکترهای کنترلی که در تابع ()printf بکار میروند در زیر آمده است. بعضی از کاراکترهای کنترلی برای انتقال خروجی به یک محل معین از صفحه نمایش مورد استفاده قرار می گیرند .

  •  کاراکتر کنترلی | عملی که انجام می شود
  • f\  : موجب انتقال کنترل به صفحه جدید می شود
  • n\ : موجب انتقال کنترل به خط جدید می شود
  • t\  : انتقال به ۸ محل بعدی صفحه نمایش
  • “\  : چاپ دابل کوتیشن (“)
  • ‘\  : چاپ کوتیشن (‘)
  • V\ : انتقال کنترل به ۸ سطر بعدی
  • N\ : ثابت های مبنای ۸ ( Nعدد مبنای ۸ است )
  • xN\ : ثابت های مبنای ۱۶ ( N عدد مبنای ۱۶ است )
  چند دستور متوالی که شامل تابع ()print باشند، خروجی خود را بر روی یک سطر منتقل می کنند. مگر این که با پارامتر کنترلی n\ کنترل را به سطر بعدی منتقل شود.

۱-۳- طول میدان در تابع خروجی () printf

در تابع ( )printf میتوانیم طول میدان خروجی یا فرمت خروجی را مشخص کنیم. تعیین طول میدان برای رشته ها بصورت ns %که n طول میدان رو نشان می دهد. در حین انتقال اطلاعات توسط تابع ()printf میتوانیم طول میدان خروجی را مشخص کنیم. در این مورد می توانیم محل نقطه اعشار و تعداد ارقام اعشار را نیز تعیین کنیم. تعیین طول میدان در جدول بندی ها بسیار مفید است. طول میدان، بصورت w.d است که در اعداد اعشاری ممیز شناور ، w طول میدان و d تعداد ارقام اعشار را  مشخص می کند .

main()
{
printf("\n %8.1f %8.1f %8.1f\n" ,3.0,12.5,523.3 );
printf("\n %8.1f %8.1f %8.1f\n" ,300.0,1200.5,5300.3 );
}

خروجی حاصل از اجرای برنامه فوق بصورت زیر است :

۵۲۳٫۳   ۱۲٫۵   ۳٫۰

۵۳۰۰٫۳  ۱۲۰۰٫۵  ۳۰۰٫۰

همانطورکه مشاهده می گردد طول میدان برابر با ۸ و تعداد ارقام اعشار، برابر با یک که در منتها الیه سمت راست میدان قرار گرفته، منظور شده است.
اگر فرمت w.d که طول میدان را مشخص می کند در مورد رشته ها استفاده گردد ، w حداقل طول میدان و d حداکثر کاراکترهای قابل چاپ را مشخص می کند. اگر w.d در مورد اعداد صحیح بکار برده شود، w مشخص کننده حداقل طول میدان و d تعیین کننده حداکثر طول میدان است.

۲- تابع ورودی  ()scanf

الگوی این تابع در فایل stdio.h قرار دارد . این تابع تمام داده ها را میتواند از ورودی بخواند و آن ها را در حافظه ذخیره کند. در صورت اجرای موفقیت آمیز این تابع، تعداد متغیر هایی را که از ورودی خوانده است برمیگرداند و در صورت بروز خطا ، EOF توسط تابع برگردانده میشود. EOF مقداری است که بیانگر عدم اجرای صحیح تابع ()scanf میباشد. تابع ()scanf به صورت زیر مورد استفاده قرار میگیرد:

; (“<عبارت ۲>” , “<عبارت ۱>”)scanf

<عبارت ۲> آدرس متغیر هایی است که باید از ورودی خوانده شوند.

<عبارت ۱> مشخص میکند که مقادیر ورودی چگونه باید خوانده شوند و به چه ترتیبی در متغیر هایی که آدرس آن ها در <عبارت ۲> مشخص شده است قرار میگیرند: # کاراکتر های فرمت : تعیین میکند که چه اطلاعاتی باید از ورودی خوانده شوند و با % شروع میشوند ,مثل d% که برای خواندن اعداد صحیح از ورودی به کار میرود. # کاراکتر های فضای خالی  # کاراکتر هایی غیر از فضای خالی و فرمت.

وقتی دستور ()scanf اجرا میشود منتظر می ماند تا داده ها از صفحه کلید وارد شوند و در آخر کلید Enter را فشار میدهیم تا داده ها در متغیر های مربوطه قرار گیرند.به مثال زیر توجه فرمایید:

#include<stdio.h>
 main ()
 {
 float x=2.0 , y=3 ;
 printf(“%f %f %f %f %d”, x , y , x+y , x*y, x) ;
 }

 خروجی برنامه به صورت زیر خواهد بود.
۲٫۰۰۰۰۰۰    ۳٫۰۰۰۰۰۰    ۵٫۰۰۰۰۰۰    ۶٫۰۰۰۰۰۰ ۲
در اینجا آرگومانهای اول و دوم تک‌متغیرند. ولی آرگومانهای سوم و چهارم عبارات محاسباتی‌اند که اول مقدار آنها محاسبه می‌گردد و سپس نتیجه براساس کد فرمت مربوط چاپ می‌شود. آرگومان آخر به شکل عدد صحیح چاپ می‌شود.

#include<stdio.h>
main ()
{
int x =31 ;
float y =148.5 ;
char z[10] = {“sourceiran”};
printf(” %d %f %s ” , x , y , z) ;
}

اولی عدد صحیح دهدهی، دومی از نوع اعشاری و سومی رشته است که به ترتیب با فرمان فرمت %s ,%f , %d مشخص شده‌اند. خروجی دستور مزبور به صورت زیر خواهد بود.
۳۱ ۱۴۸٫۵ sourceiran
در برنامه مذکور به‌علت وجود یک محل خالی بین فرامین فرمت در رشته کنترل، بین مقادیر چاپ شده نیز فضای خالی ایجاد شده است.

۳- خواندن کاراکتر با تابع ()getchar :

همانند ()getche برای خواندن کاراکتر از صفحه کلید به کار میرود.این تابع در فایل stdio.h قرار دارد.نحوه کاربرد آن به صورت زیر است :

; ()getchar =متغیر

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

#include <stdio.h>
#include <conio.h>
void main()
{
char ch ;
printf("\n enter a character : ");
ch=getch();
printf("\n character is : ");
printf("%c-%d" , ch,ch);
getch();
}

فرض کنید در پاسخ به اجرای این برنامه کلید s را در پاسخ به تابع ()getch وارد کنیم. در این صورت خروجی حاصل از اجرای برنامه بصورت زیر خواهد بود :

enter a character : s
character is : s-115

اگر در مثال به تابع ()printf توجه کنید، متغیر ch را یکبار با فرمت c% و بار دیگر با فرمت d% نوشته ایم که در حالت اول حرف s و در حالت دوم عدد ۱۱۵ که کد اسکی s است چاپ شده است.

۴- نوشتن کاراکتر با توابع ()putch و ()putchar:

برای نوشتن یک کاراکتر در خروجی علاوه بر تابع ()printf ، دو تابع دیگر نیز معمولا مورد استفاده قرار میگیرند. قبل از بررسی آنها به مثالی درمورد ()print که منجر به چاپ یک کاراکتر در خروجی می گردد. این توابع می توانند یک کاراکتر یا یک متغیر کاراکتری را در صفحه نمایش چاپ کنند .تابع ()putch در فایل conio.h قرار دارد. تابع ()putchar در فایل stdio.h قرار دارد.

  • تابع ()putch  برای نوشتن یک کاراکتر در صفحه نمایش مورد استفاده قرار می گیرد.
  • تابع ()putchar این تابع همانند تابع ()putch برای نوشتن یک کاراکتر در صفحه نمایش به کار می رود

این دو تابع به صورت زیر به کار میروند.

;( متغیر )putch

;(‘کاراکتر’)putch

;(متغیر)putchar

;(‘کاراکتر’)putchar

#include <stdio.h>
#include <conio.h>
void main()
{
printf("example for character");
printf(": %c", 'a' );
getch();
}

خروجی حاصل از اجرای برنامه فوق ، حرف a است.                           

example for character : a

#include <stdio.h>
#include <conio.h>
void main()
{
char ch ;
printf("\n enter a character: ");
ch=getch();
printf("\n you typed the character:");
putch(ch);
getch();
}<span>

خروجی حاصل بصورت زیر است :

: enter a character
you typed the character : s

تابع getchar کاراکتر بعدی را از خط فرمان می خواند و آن را بعنوان integer بر می گرداند، تابع getchar در آن واحد فقط می تواند یک کاراکتر بخواند و می توانیم با قرار دادن آن در یک while بیشتر از یک کاراکتر را از ورودی بخوانیم.

تابع putchar برعکس تابع getchar کار می کند و یک کاراکتر را بصورت integer از ما می گیرد و در خروجی چاپ می کند و همان کاراکتر چاپ شده را در قالب integer بر میگرداند.

#include  <stdio.h>
#include <conio.h>
main(){
	
char ch;
printf("\n enter a character : ");
ch=getch();
printf("\n ascii=%d, character=%c", ch, ch);
}

در مثال بالا هر کلیدی از صفحه کلید رو وارد کنید، کد اسکی آن کاراکتر را به همراه خود کاراکتر روی صفحه چاپ می شود. به این دقت داشته باشید، که متغیر ch را در printf هم با c% و هم با %d نوشته شده است. در اولی خود حرف (کاراکتر) نوشته می شود، ولی در دومی کد اسکی کاراکتر چاپ میشود.

درباره نویسنده: administrator

ممکن است دوست داشته باشید

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

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