ParsX.com
پذیرش پروژه از دانشجویی ... تا سازمانی 09376225339
 
   ProfileProfile   Log in to check your private messagesLog in to check your private messages  |  FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups Log inLog in   RegisterRegister 

کم کردن یک خطای بزرگ ( گرفتن عداد بدون خطا )

 
Post new topic   Reply to topic    ParsX.com Forum Index -> C/C++ Programming
View previous topic :: View next topic  
Author Message
arash
مدير بخش سي
مدير بخش سي


Joined: 27 Nov 2004
Posts: 1232
Location: www.parsx.com

PostPosted: Fri Aug 05, 2005 5:32 pm    Post subject: کم کردن یک خطای بزرگ ( گرفتن عداد بدون خطا ) Reply with quote

وقتی با اعداد کار می کنید مشاهد کردید که گاهی وقتها به مشکل بر می خورید . مخصوصا اگر کابر به جای تایپ اعداد از حروف استفاده کنه .
و اما در این صورت با یک خطای Run time مواجه شدید که تا پایان کار راه خلاصی ندارید و دیگر عدد نمی توانید عدد از کاربر دریافت کنید فقط می توانید در صورت وجود رشته دریافت کنید
برای جلو گیری از این مشکل کافیست به جای عدد از کاربر رشته دریافت کرده ( معمولا رشته کمتر دچار اشکال میشود ) سپس با استفاده از توابع زیر از درون رشته عدد را استخراج کنید .
برای گرفتن عدد صحیح از تابع زیر :

Long int strtol(char *start,char **end,int radix)

برای گرفتن عدد اعشار از تابع زیر :

Double strtod(char *start ,char **end)

برای گرفتن عدد صحیح بدون علامت از تابع زیر :

Unsigned long strtoul (const char *start , char **end , int radix)

در توابع بالا منظور از start یک متغییر رشته ای است که مقدار عددی در آن قرار دارد . وقتی که این توابع به یک متغییر غیر مجاز بر خورد کنند آدرس کاراکتر غیر مجاز در end قرار می گیرد . منظور از radix مبنای عدد می باشد . و در صورت صفر بودن مبنا از خود عدد نتیجه می شود ( مبنا می تواند بین عدد 2 تا 36 باشد )
نکته Exclamation:
در صورتی که در اول رشته کاراکتر blank باشد این توابع آنها را حذف خواهند کرد .
مثال :

int a=0,b;
char str[10],*end;
float f=0;
strcpy(str,"122");
a= strtol(str, &end , 10);
strcpy(str," 12.16");
f= strtod(str , &end);
b=strtoul (str , &end , 10);
printf("a=%d, b=%d ,f=%2.2f", a, b, f);


خروجی مثال بالا به شکل زیر می باشد

   a=122, b=12 ,f=12.16
Back to top
Display posts from previous:   
Post new topic   Reply to topic    ParsX.com Forum Index -> C/C++ Programming All times are GMT + 3.5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum