عبارات ورودی / خروجی - بخش 1 - printf
عبارات ورودی / خروجی :
توضیحات : برای بهتر دیدن مقاله فایل .rar رو که attach کردم، دانلود کنید.
بخش اول : (printf())
در C از دستور printf() برای چاپ خروجی بر روی صفحه نمایش استفاده میشود و همچنین از scanf() برای خواندن اطلاعات از ابزارهای ورودی مانند keyboard بهره گرفته میشود. اما در این بین نکاتی است که در این بخش به آنها اشاره میکنیم .
عبارات خروجی :
دستور printf() در تابع کتابخانه ای stdio.h قرار دارد. این تابع در صورت صحیح اجرا شدن تعداد کاراکترهای چاپ شده و در غیر این صورت عددی منفی را برمیگرداند. فرم کلی دستور printf() به صورت روبرو است :
Printf( "< 1 >" , < 2 >);
عبارت 1 : این بخش میتواند 3 حالت داشته باشد :
1. یک متن خالص باشد : printf("Iran is my country");
2. حاوی فرمت متغیرهایی باشد که در عبارت 2 آورده میشوند، مانند : printf("x=%d",x) . باید توجه داشت که فرمت های گوناگون که هر کدام با یک حرف (بعد از علامت % ) نشان داده میشوند، برای هر Data Type (مراجعه شود به پست انواع داده ها – نویسنده : aria ) فرق میکند. همگی فرمت ها با علامت % شروع میشوند . مثلا در مثال بالا %d بیان کننده ی data type عدد صحیح است (% نشان دهنده ی آغاز یک فرمت و d نماد اعداد صحیح است ). به جدول زیر توجه کنید :
%c : کاراکتر
%d : اعداد صحیح دهدهی + و -
%i : اعداد صحیح دهدهی + و -
%e : نمایش علمی عدد همراه حرف e
%E : نمایش علمی عدد همراه حرف E
%f : عدد اعشاری ممیز شناور
%g : اعداد اعشاری ممیز شناور
%G : اعداد اعشاری ممیز شناور
%o : اعداد مبنای 8 مثبت
%s :رشته ای از کاراکتر ها
%u : اعداد صحیح بدون علامت
%x : اعداد مبنای 16 مثبت با حروف کوچک
%X : اعداد مبنای 16 مثبت با حروف بزرگ
%p : Pointer (اشاره گر)
%n :موجب میگردد تا تعداد کاراکترهایی که تا قبل از این فرمت چاپ شده است در متغیر متناظر با آن قرار گیرد.
%% : علامت %
%hd : برای چاپ اعداد از نوع long
%ld : برای چاپ اعداد از نوع short
3. حاوی کاراکترهای کنترلی باشد. به این صورت که با این کاراکتر ها میتوان محل چاپ،چاپ در سطر بعدی و ... را تنظیم کرد. این کاراکنر ها با "\" شروع میشوند و بعد از آن شناسه ی دیگر آن می آید(مانند کاراکترهای فرمت). در زیر اطلاعات تفصیلی در این باره آمده است :
\f : موجب انتقال کنترل به صفحه ی جدید میشود.
\n : موجب انتقال کنترل به خط جدید میشود.
\t : انتقال به 8 محل بعدی صفحه نمایش.
\" : چاپ (")
\' : چاپ (')
\\ : back slash
\v : انتقال کنترل به 8 سطر بعدی
\N : ثابت های مبنای 8 (N عددی مبنای 8 است)
\xN : ثابت های مبنای 16 (N عددی مبنای 16 است)
خوب حالا وحشت نکنید، الان مثال حل میکنیم تا مطلب جا بیفته
قبل از هر چیز باید بگم عبارات و جمله هایی که در برنامه بعد از "//" قرار میگیرند توسط کامپایلر اجرا نمیشوند و تنها جهت توضیح و خوانایی برنامه است.
مثال 1: چاپ یک رشته ی معمولی با printf() :
کد:
[LEFT]
#include<stdio.h>// the library that printf is in that
int main()
{//Begin of program
printf("C is a language"); // printing the text on the screen
return 0; //waits for a key press after the program is finished & wont jump out of it
} //End of program
خروجی : C is a language
[/LEFT]
حالا اگر یک تغییرات کوچکی در برنامه ی بالا بدهیم و دو عبارت را چاپ کنیم :
کد:
[LEFT]
#include<stdio.h>
int main()
{
printf("C is a language");
printf("I like it"); //prints the second text
return 0;
}
خروجی : C is a languageI like it
[/LEFT]
به خروجی بالا دقت کنید. دقیقا عبارت دوم بعد از عبارت اول چاپ شده است و بسیار ناخوانا است. اینجاست که بحث حالت سوم پیش ماید. یعنی کاراکترهای کنترلی.
با نگاهی به این کاراکترها میبینیم که آنها میتوانند نیازهای ما را برطرف کنند. مثلا اگر من بخواهم جمله ی دوم من در خط بعدی چاپ شود، یا در 8 سطر بعدی چاپ شود، یا در 8 ستون بعدی(یک Tab) و ...
.....
Printf("C is a language/n"); // Control would be placed in next line
printf("I like it");
…..
خروجی :
C is a language
I like it
حال یک مثال دیگر :
کد:
[LEFT]
.....
printf("C is a language /t"); // Control would be placed in next Tab
printf("I like it");
…..
خروجی :
C is a language I like it
حال یک مثال دیگر :
.....
printf("/"Hello/"");
…..
خروجی :
"Hello"[/LEFT]
و بقیه نیز بر حسب کاربرد به اینگونه است ...
کاراکترهای فرمت :
خوب، با یک مثال شروع میکنیم. ما یک متغیر داریم که میخواهیم مقدار آن را در خروجی چاپ کنیم. نوع data type آن integer هستش و در هنگام تعریف کردن به آن مقدار اولیه 5 را داده ایم. خوب شروع میکنیم.
کد:
[LEFT]
#include<stdio.h>
int main()
{
int x=5;
printf("Our variable is called x & it is equal with %d",x);
return 0;
}
خروجی :
Our variable is called x & it is equal with 5
[/LEFT]
در مثال بالا دقت کنید . متن ها به صورت عینی چاپ میشوند و در جای %d عینا مقدار صحیح متناظر قرار میگیرد. به مثالی دیگر توجه کنید.
کد:
[LEFT]
#include<stdio.h>
int main()
{
int x=5;
float y=6.7;
printf("Our variables are called x=%d \tand\t y=%f",x,y);
return 0;
}
خروجی :
Our variable are called x=5 and y=6.7
[/LEFT]
بسیار خوب در این مثال ترکیبی از همه ی کارهای این بخش بود. \t ها باعث شد هنگام چاپ کنترل 8 کاراکتر به جلو بپرد و %d و %f هم که برای چاپ مقادیر صحیح و اعشاری int و float بودند.
حالا میرسیم به این مبحث که ما این همه نوشتیم ، حالا چه جوری پاکش کنیم ؟!؟! یا اینکه چه جوری تو یه جای خاص از صفحه بنویسیم ؟ مثلا سطر 10 و ستون 20 .برای این کارها 2 تابع موجود است که هردو در فایل conio.h قرار دارد.
تابعی که صفحه را پاک میکند clrscr() نام دارد. این تابع تمامی صفحه را پاک کرده و کنترل را به نقطه ی 0.0 منتقل میکند.
تابع gotoxy(a,b) مکان نما را به نقطه ی a,b منتقل میکند و از این پس نوشتن را در آن محل انجام میدهد. به مثال زیر توجه کنید :
کد:
[LEFT]....
gotoxy(10,20);
printf("C is a language");
…..
[/LEFT]
با اجرای این مثال جمله ی بالا در مختصات 10و20 صفحه چاپ میشود.
طول میدان :
برای اینکه به تابع printf() طول میدان بدیم تا هرکاری خواست در هنگام چاپ انجام نده باید در کاراکترهای فرمت تغییراتی رو ایجاد کنیم.
%5d
این دستور نشان دهنده ی یک کاراکتر فرمت صحیح با طول میدان 5 عدد صحیح است.
%5.3f
این دستور نشان دهنده ی یک کاراکتر فرمت اعشاری است با طول میدان 5 عدد صحیح و سه عدد اعشار.
پایان .
در انتها باید بگویم در C++ به جای printf() از تابعی با نام cout استفاده میشود . در این تابع کاراکتر های ورودی نقشی ندارند ولی از کاراکترهای کنترلی پشتیبانی میشود. روش استفاده از آن در مثال زیر نشان داده میشود:
کد:
[LEFT]#include<iostream.h>
int main()
{
int x=5;
cout<<"We are printing an integer variable : "<<x<<"\n";
cout<<"again we are printing : "<<x<<endl;
cout<<"Finished";
return 0;
}
خروجی :
We are printing an integer variable : 5
Again we are printing : 5
Finished
[/LEFT]
توجه کنید که endl (end line) همان کار \n را انجام میدهد.