انتقال مکان نما در صفحه خروجی
گاهی ممکن است بخواهید مکان نما را در صفحه خروجی به محل خاصی منتقل کنید و اطلاعات را از آنجا دریافت و یا چاپ کنید برای این منظور از تابع gotoxy() استفاده می کنیم که در فایل conio.h قرار دارد و به صورت زیر است
Gotoxy(int x , int y);
کهx شماره ستون و y شماره سطر می باشد .
چاپ اعداد نوع short و long
برای چاپ اطلاعات عددی از نوع long و short از کاراکترهای خاصی استفاده می شود کاراکتر L به همراه d برای چاپ مقادیر long و کاراکتر h به همراه d برای چاپ مقادیر short به کار می رود البته شکلهای دیگری هم داره ولی همین بسه .
مثال :
#include <conio.h>
#include <stdio.h>
int main()
{
short int x = 15 ;
long int m = 35789 ;
clrscr() ;
gotoxy(20,10) ;
printf("\n x=%hd, m=%ld",x,m) ;
getch() ;
return 0 ;
}
تعیین طول میدان در تابع Printf()
با استفاده از امکانات دیگری که در تابع printf() وجود دارد ، می توان مشخص کرد که هر کدام از اطلاعاتی که به خروجی می رود چند بایتاز فضای خروجی را اشغال کنند . فضایی را که هر قلم اطلاعات اشغال می کند طول میدان خروجی می گویند .
طول میدان مقادیر صحیح به صورت %wd است که w طول میدان می باشد اگر طول میدان بیشتر از تعداد ارقام باشد عدد در سمت راست میدان قرار می گیرد و سمت چپ آن خالی می ماند و اگر طول میدان کمتر از تعداد ارقام باشد طول میدان نادیده گرفته می شود و تمام ارقام به خروج می رود .
طول مقادیر اعشاری به صورت %w.df است که در آن w طول کل میدان و d تعداد ارقام اعشار و البته نقطه هم یکی از تعداد طول میدن است . اگر تعداد ارقام اعشار از طول میدان اعشار بیشتر باشد قسمت اعشار گرد می شود یعنی اگر بزرگتر از 5 باشد یک رقم به قسمت اعشار اضافه می شود و اگر کمتر باشد رقم حذف می شود .
مثال :
#include <stdio.h>
#include <conio.h>
int main()
{
int x = 125 , y = 1468 ;
float m = 327.348, n = 4351.32 ;
clrscr() ;
printf(“x = %5d, y = %3d, sum = %d”,x,y,x+y) ;
printf(“\n m = %7.2f, n = %6.2f”,m,n) ;
printf(“\n%5.10s”,”this is a sample output.”) ;
getch() ;
return 0 ;
}
اگه خودتون این مثال و تست کنید بهتر می فهمید چه اتفاقی می افته .
اگر برای چاپ یک عدد صحیح ، از طول میدانی به شکل %w.dd استفاده شود ، d حداقل طول میدان را مشخص می کند . اگر طول میدان رشته ها به صورت %w.ds باشد ، w حداقل طول میدان و d حداکثر کاراکترهای قابل چاپ را مشخص می کند .
ورود اطلاعات توسط تابع scanf()
این تابع برای ورود اطلاعات از صفحه کلید مورد استفاده قرار می گیرد و یک تابع همه منظوره در ورود داده ها است .
الگوی این تابع در فایل stdio.h قرار دارد .این تابع ، تمام انواع داده ها را می تواند از ورودی بخواند و آنها را در حافظه ذخیره نماید . اگر این تابع با موفقیت اجرا شود ، تعداد متغیرهایی را که از ورودی خوانده است برمی گرداند و در صورت بروز خطا ، EOF توسط تابع برگردانده می شود . EOF مقداری است که بیانگر عدم اجرای صحیح تابع scanf() است . این تابع به صورت زیر به کار می رود :
;(< عبارت 2 > , "< عبارت 1 >" scanf
<عبارت 2> آدرس متغیرهایی است که باید از ورودی خوانده شوند و <عبارت 1> مشخص می کند که مقادیر ورودی چگونه باید خوانده شوند و در متغیرهایی که آدرس آنها در <عبارت 2> مشخص شده است قرار گیرند <عبارت 1> شامل سه نوع کاراکتر است :
1. کاراکترهای فرمت : این کاراکترها مشخص می کنند که چه نوع اطلاعاتی باید از ورودی خوانده شوند و با % شروع می شوند .
کاراکتر اطلاعاتی که خوانده می شوند
%c یک کاراکتر
%d اعداد صحیح دهدهی
%f اعداد اعشاری ممیز شناور
%s رشته ها
%p یک اشاره گر
%n مشخص کننده تعداد کاراکترهایی است که تا %n از ورودی خوانده شده اند
2. کاراکترهای فضای خالی : وجود فضای خالی در <عبارت 1> موجب می شود تا تابع scanf() از فضای خالی موجود در ابتدای اطلاعات ورودی صرفنظر کند . کاراکتر های جدول بندی (tap) ، خط جدید (new line) و رد کننده صفحه (form feed) نیز به عنوان فضای خالی محسوب می شوند .
3. کاراکترهای غیر از فضای خالی و فرمت : وجود چنین کاراکتری موجب می شود تا چنانچه همان کاراکتر در رشته ورودی و جود داشته باشد ، آن را خوانده از آن صرفنظر کند . به عنوان مثال ، “%d,%d” موجب می شود تا یک عدد صحیح خوانده شود ، سپس یک کاما خوانده و از آن صرفنظر شود و سپس عدد صحیح دیگری خوانده شود . اگر کاراکتر مشخص شده در <عبارت 1> در رشته ورودی وجود نداشته باشد ، تابع scanf() خاتمه می یابد . برای خواندن و سپس صرفنظر از علامت % باید %% را در <عبارت 1> به کار برد .
وقتی دستور scanf() اجرا می شود ، منتظر می ماند تا داده ها را از صفحه کلید دریافت نماید . هنگام وارد کردن داده ها ، هر یک از اقلام داده را با یک فاصله یا کاما از هم جدا کنید و پس از ورود داده ها ، کلید Enter را فشار دهید .
مثال :
#include <stdio.h>
#include <conio.h>
int main()
{
int x , y , area , p ;
clrscr() ;
printf(“Enter length and width :”) ;
scanf(“%d%d”, &x , &y) ;
area = x * y ;
p = (x + y) * 2 ;
printf(“ Area = %d, p = %d”, area , p) ;
getch() ;
return 0 ;
}
ورودی برنامه ، طول و عرض مستطیل اند که آنها را به ترتیب در x و y قرار می دهد .
عرض * طول = مساحت مستطیل ß که مقدار به دست آمده در متغیر area ذخیره می شود
2 * (عرض + طول ) = محیط مستطیل ß که مقدار به دست آمده در متغیر p ذخیره می شود
و حاصل توسط تابع printf() چاپ می شود .
مثال :
#include <stdio.h>
#include <conio.h>
int main()
{
int x , y , n ;
float ave ;
clrscr() ;
printf(“\nEnter three integers :”) ;
scanf(“%d%d%d”, &x , &y , &n) ;
ave = (float)( x + y + n) / 3 ;
printf(\nave = %6.2f” , ave) ;
getch() ;
return 0 ;
}
این مثال سه عدد از ورودی دریافت می کند و میانگین آنها را حساب می کند .
چون هر سه عدد از نوع صحیح هستند ، مجوع آنها نیز صحیح خواهد بود . پس از تقسیم شده مجموع بر عدد 3 حاصل نیز صحیح خواهد شد یعنی تقسیم یه صورت صحیح انجام می شود در حالی که انتظار داریم تقسیم به صورت اعشاری انجام شود و میانگین اعشاری چاپ شود . برای این منظور باید تبدیل نوع صورت گیرد . چون می خواهیم تقسیم به صورت اعشاری باشد ، قیل از تقسیم ، نوع اعشاری ، یعنی float را دز داخل پرانتز قرار می دهیم . این روش تبدیل نوع را type casting گویند .
مثال :
#include <conio.h>
#include <stdio.h>
int main()
{
int x , y ;
clrscr() ;
printf(“\n Enter two integers :”) ;
scanf(“%d%d”, &x , &y) ;
printf(“\n before change : x = %d , y = %d”,x , y) ;
x += y ;
y = x – y ;
x -= y ;
printf(“\n after change : x = %d , y = %d”, x , y) ;
getch() ;
return 0 ;