arash مدير بخش سي
Joined: 27 Nov 2004 Posts: 1232 Location: www.parsx.com
|
Posted: Fri Aug 05, 2005 5:32 pm Post subject: کم کردن یک خطای بزرگ ( گرفتن عداد بدون خطا ) |
|
|
وقتی با اعداد کار می کنید مشاهد کردید که گاهی وقتها به مشکل بر می خورید . مخصوصا اگر کابر به جای تایپ اعداد از حروف استفاده کنه .
و اما در این صورت با یک خطای 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 باشد )
نکته :
در صورتی که در اول رشته کاراکتر 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);
|
خروجی مثال بالا به شکل زیر می باشد
|
|