• توجه: در صورتی که از کاربران قدیمی ایران انجمن هستید و امکان ورود به سایت را ندارید، میتوانید با آیدی altin_admin@ در تلگرام تماس حاصل نمایید.

انتقال مکان نما در صفحه خروجی

Reza

متخصص بخش اسکریپت
انتقال مکان نما در صفحه خروجی

گاهی ممکن است بخواهید مکان نما را در صفحه خروجی به محل خاصی منتقل کنید و اطلاعات را از آنجا دریافت و یا چاپ کنید برای این منظور از تابع 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 ;
 
بالا