تو آموزش های قبلی مقدمات زبان C رو یاد گرفتیم حالا بهتره با ساختار برنامه ها و شیوه های ورودی و خروجی داده ها آشنا بشیم تا بتونیم برنامه های ساده رو بنویسیم. خوب بدون مقدمه میریم سراغ اموزش :
نگاه کنید دوستان بدنه ی اصلی یه برنامه تابع ()main است یعنی هیج برنامه ای تو زبان C تا اونجایی که من دیدم نمی تونه بدون این تابع باشه ... به نظر شما برنامه از کجا شروع میشه ؟؟؟ خوب این معلومه دیگه از تابع
main شروع میشه از اسمشم میشه فهمید . حالا اجازه بدید ساختار اونو بهتون بگم :
کد:
int main()
{
دستورات اجرایی
return 0;
}
* اگر هنگام نوشتن تابع از int استفاده کنیم در آخر باید return 0; رو بنویسیم. یعنی اگر دستورات داخل تابع main بدون اشکالی اجرا شد در آخر صفر رو که به معنی اجرای بدون خطا بوده است رو به تابع برمی گردونه ! حالا اگر خواستیم صفر برگشت داده نشه باید تابع رو به صورت Void بنویسیم. مثال :
کد:
void main ()
{
دستورات
}
پس در صورتی که با void تعریف شود نیازی به return ندارد . (به نظر من با int تعریف بشه بهتره !)
بازم نفهمیدید غصه نخورید چون تو آموزش های بعدی به نوشتن تابع می پردازم و بیشتر توضیح میدم.
فراخوانی تابع های C
وقتی کامپایلر زبان C رو دریافت کردید مثل : Turbo C یه پوشه ای به نام INCLUDE داخلشه و پسوند فایل های آن h. هست . زبان c مثل ویبی نیست که بدون نیاز تعریف، دستور Print رو بنویسید و ازش استفاده کنید. یعنی تو c باید این توابع رو ضمیمه برنامه ی خودمون کنیم (تعریف کنیم) که اینکار با دستور include# صورت می گیره (در آخر اون هم ; نمی خواد! و باید در اول برنامه نوشته بشه قبل از تابع ها ، تو ویژوال بیسیک بخش General هست) . یه مثال میزنم تا بیشتر متوجه بشید:
خوب در این مثال فایل
stdio.h رو include می کنیم . حالا در هر جای برنامه که خواستیم می تونیم از توابع داخل این فایل استفاده کنیم (مثلا دستور چاپ)
ورودی - خروجی داده
دو تابع تو C هست که سعی کنید به صورت کامل یاد بگیرید ساده هم است. یکی واسه چاپ (printf) و دیگری دریافت داده از کاربر (scanf) ...
چاپ اطلاعات با استفاده از دستور printf
همان طور که گفتم برای استفاده از این دستور ها باید اونا فراخوانی کنیم. این دستور در فایل stdio.h قرار داره. اگر تابع بدون خطا اجرا بشه تعداد کاراکترهایی که به خروجی ارسال میکنه رو برمیگردونه و در صورت بروز خطا یک عدد منفی بر می گردونه. اگر خواستید تست کنید اول یه متغیر تعریف کنید بعد برابر با دستور printf کنید اگر درست اجرا بشه تعداد کاراکتر هایی که تو خروجی چاپ شده رو تو متغیر میریزه و ....
عبارت 1 همون متنی هست که تو خروجی چاپ میشه ! عبارت 2 هم اجباری نیست . نمی دونم چه جوری توضیح بدم که بفهمید. نگاه کنید ما تو عبارت 1 میتونیم از دستور هایی استفاده کنیم مثلا بگیم enter کن برو خط بد . چند تا فاصله بنداز و از این حرفا. حالا من اول این دستورات رو اینجا می زارم بعد چند تا مثال می زارم تا بهتر متوجه بشید.
کاراکترهای فرمت :
کاراکترهای کنترلی :
درسته قیافشون وحشتناکه اما اگر به درستی به مثال و توضیحی که میدم توجه کنید خیلی خیلی آسون میشه !
خوب ما که دوست نداریم همیشه یه متن ثابت دو چاپ کنیم (مثلا salam) اگر این کارو خواسته باشیم بکنیم نیازی به هیچ یک از این دو تصویر نداریم. اما به نظر من بهتر نیست اول برنامه اسم کاربر رو بگیریم بریزیم تو یک متغیر و بعد salam user که user نام کاربر است رو چاپ کنیم؟ به نظر من اینجوری بهتره ! خوب واسه اینکار نیاز به کاراکتر های فرمت (تصویر اولی) داریم . خوب من چندتا مثال می زنم تا بهنر متوجه بشید.
مثال 1 :
کد:
char mychar = 'a';
printf("character is : %c",a);
خروجی : character is a
توضیح : متغیر mychar رو از کاراکتر تعریف کردیم و به صورت پیش فرض کاراکتر a رو داخش قرار دادم. در دستور بعدی (printf) متن : character is رو نوشتم این متن عینا در خروجی چاپ میشه بعد از دونقطه نوشتم c% (تو تصویری که قرار دادم توضیح دادم که معادل یک کاراکتر است) زبان c متوجه میشه که باید یه کاراکتر رو اینجا قرار بده برای بدست اوردن اون کاراکتر به عبارت 2 رجوع میکنه و a رو میخونه و قرارش میده بعد از 2نقطه ! پس به تعداد کاراکتر های فرمت باید در عبارت 2 داده باشه واسه جداسازی اونا هم باید از کاما ( , ) استفاده کرد. یه مثال دیگه
مثال 2 :
کد:
char x = 'A';
printf("character is : %c and ascii is : %d",x,x);
خروجی: character is A and ascii is 65
توضیح :تو این مثال یکم به قدرت زبان C پی میبرید. مثلا تو ویبی باید از دستور asc یا char استفاده کنیم اما اینجا خیلی خیلی راحت با استفاده از کاراکترهای فرمت می تونیم این کارو انجام بدیم .
c% چون اولین فرمت است x اولی رو برمیداره و d% چون 2ومین فرمت است x دومی رو به فرمت دلخواه نشن میده !
حالا بریم سراغ کاراکتر های کنترلی :
از نظر نوشتن دستور هیج فرقی با کاراکترهای فرمت نداره یعنی به همون صورت به کار میره ! یه مثال :
خروجی : hi c بعدشم enter میخوره.
*هر متنی که به خروجی با استفاده از دستور printf میره سر هم نوشته میشه یعنی تو یه خط پس از کاراکتر های کنترلی واسه enter دادن استفاده کنید
من دیگه بهتر از این نمی تونم توضیح بدم . بهتر خواستید برید معلم خصوصی بگیرید "-: .
* اگر تا حالا از دستور چاپ استفاده کرده باشید میبینید بعد از اجرا هیچی چاپ نمیشه و از برنامه خارج میشه! جالب نیست به نظر شما؟؟؟
خوب دستور اجرا میشه چاپ هم میکنه اما چون زبان c دستور دیگه ای رو نمیبینه به return 0 میرسه و برنامه تموم میشه ! در اصل دستورات بدون خطا اجرا اما شما نمی تونید ببینید ! یه دستور داریم که تو فایل conio.h هست که اگر اونو قبل از return 0 بزارید مشکل حل میشه !
استفاده از دستور getch()
البته کار اصلی این دستور رو بعدا به صورت مختصر میگم فعلا بدونید که باید آخر دستورات نوشته بشه تا بتونید خروجی رو مشاهده کنید.
مثال :
کد:
#include <conio.h>
int main () {
دستورات
getch();
return 0;
}
یه بار ازش استفاده کنید می فهمید چیه !
* یه دستور دیگه هم که باید مثل getch یاد بگیرید پاک کردن صفحه نمایش است . اگر تا به حال برنامه نوشته باشید میبینید که متن هایی که قبلا هم به خروجی رفتن سر جاشون هستن. خوب برای پاک کردن از دستوز clrscr استفاده می کنیم. که در فایل conio.h قرار داره . خوب مثال بالا رو نگاه کنید اگر قبل از
دستورات از این دستور استفاده کنیم به نظرم مشکل حل بشه !
مثال :
کد:
#include <conio.h>
int main () {
clrscr();
دستورات
getch();
return 0;
{
چاپ اعداد نوع logn و short
مثال :
کد:
#include <stdio.h>;
#include <conio.h>;
int main(){
short int x= 15;
login int m = 35769;
clrscr();
printf("\n x is : %hd and m is %ld",x,m);
getch();
return 0;
}
برای نمایش اعداد کوتاه و یا بلند باید کاراکترهای فرمت رو یه ذره تغییر بدیم با کاراگتر های دیگری ترکیب کنیم تا به همون صورت در خروجی چاپ بشه !
واسه long باید l(ال)رو به صورت ld% بنویسیم و واسه کوتاه hd%
فکر نکنم نیازی به توضیح بیشتری داشته باشه !
دریافت اطلاعات با استفاده از دستور scanf
scanf مثل printf هست و به اندازه ی اون کاربرد داره . با یه مثال میتونید یاد بگیرید :
مثال :
کد:
#include <stdio.h>;
#include <conio.h>;
int main(){
int x,y,sumxoy;
clrscr();
scanf("%d%d",&x,&y):
sumxoy=x+y;
printf("\n sum of x and y is : %d",sumxoy);
getch();
return 0;
}
اگر توضیحات printf رو یاد گرفته باشید این مثال رو هم می فهمید . "%d%d" بدین معنی است که باید 2 عدد صحیح رو دریافت کنی و اولی رو در متغیر در x و دومی رو در y قرار میده ! تنها چیزی که منم نفهمیدم اینه که چرا باید کاراکتر & رو قبل از متغیر x یا y بزاریم؟ ؟-: فقط میدونم که باید بزاریم وگرنه مقداری که دریافت میشه غیر از اونیه که تو کیبود وارد کرده ایم . بگذاریم .
یه سری دستورات هست که بهتون کمک میکنه ، یاد بگیرید بد نیست. اونا رو مینویسم و یه توضیح مختصری هم میدم.
خواندن کاراکتر با استفاده از دو دستور getche() و getch()
همین طور که قبلا گفتم این دو دستور در فایل conio.h موجود می باشد.
این دو دستورات کاراکتری رو در یک متغیر قرار میدن میشه گفت شبیه Scanf هست اما با این تفاوت که scanf میتونه یه رشته رو بگیره اما این دو دستور تنها یک حرف یا یک کاراکتر رو.
وقتی برنامه این 2 دستور میرسه منتظر میمونه تا کلیدی از صفحه کلید فشار داده شود دراین صورت کاراکتر معادل اونو در متغیر ذخیره میکنه .
مثال :
کد:
#include <conio.h>
char x;
x= getche();
تنها فرقی که getche با getch داره اینه که کاراکتری رو که وارد میکنیم روی صفحه نمایش چاپ میشه همین !
خواندن کاراکتر با تابع getchar()
در فایل stdio.h قرار داره. پس از ورود کاراکتر کلید enter رو باید فشار داد.
نوشتن کاراکتر با استفاده از دستور putch() و putchar()
ختم جلسه
دیگه خسته شدم دقیقا 3 ساعت دارم اینو می نویسم . نه اینکه سرعت تایپم کم باشه همش دارم فک میکنم چه جوری توضیح بدم که دوستان بفهمند. به هرحال با چند تا تشکر مشکل حل میشه "-: . بهتر از این هم نمی تونم توضیح بدم.
تو جلسه ی بعدی درباره ی حلقه ای تکرار و ساختار های تصمیم بحث می کنم. به نظر خودم هرچی میریم جلوتر آسون تر میشه. شاید شما هم اینو احساس کرده باشید. البته این نظر شخص بنده هست .
از مدیران محترم خواهش میکنم که این موضوع رو به قسمت important ارسال کنند.
ممنون
موفق باشید.