PDA

View Full Version : سوال: مشکل در تخصیص دهی dynamic مقادیر double با استفاده از تابع malloc



pckho0r
چهارشنبه 29 مهر 1388, 13:17 عصر
حقیقتآ هر چی فکر کردم نتونستم راه حل درستی برای این مشکل پیدا کنم :

برنامه زیر رو نگاه کنید :


#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main()
{
int i;
double *p = (double *) malloc (sizeof(double) * 3);

for(i=0; i<3; i++)
scanf_s("%g,",&p[i]);
for(i=0; i<3; i++)
printf("%g\n",*(p+i));

system("pause");
return 0;
}

ورودی :

1,2,3

خروجی:

-6.27744e+066
-6.27744e+066
-6.27744e+066

اما زمانی که در کد برنامه به جای مقادیر double از مقادیر int , char ,float استفاده می کنم برنامه به درستی کار می کنه اما زمانی که از نوع double استفاده می کنم خروجی برنامه به همین شکلی میشه که می بینید !

تقریبآ هر روشی رو که بلد بودم روی این سورس کد پیاده کردم اما نتیجه یکیه ، کم کم دارم به این نتیجه می رسم که تابع malloc با مقادیر double مشکل داره !

کامپایلری هم که ازش استفاده می کنم visual C++‎ 2008 SP1 هست.

ضمنآ ایا روشی غیر از استفاده از scanf برای خواندن مقادیر عددی از ورودی وجود داره ؟(استاندارد یا غیر استاندارد)

سوال دیگه ای که داشتم اینه بود که چرا گاهی اوقات با اینکه سرفایل تابع مورد نظر رو در برنامه ذکر نکردیم میتونیم از برخی از توابع اون سرفایل استفاده کنیم ؟ ایا برخی توابع در چندین سرفایل تعریف شده اند ؟

ممنون و موفق باشید

SamaPic
چهارشنبه 29 مهر 1388, 18:06 عصر
با سلام .


در مورد مشكل شما ، مدتي پيش براي يكي از دوستانم چنين مشكل پيش آمد كه در انتها متوجه شديم مشكل از بازه ي قابل قبول اين دو نوع داده اي مي باشد . اصولا سي نسبت به ساير زبان ها بسيار سختگير تر مي باشد و كوچكترين اشتباهي ، بزرگترين پيامد ها را به دنبال دارد .




ضمنآ ایا روشی غیر از استفاده از scanf برای خواندن مقادیر عددی از ورودی وجود داره ؟(استاندارد یا غیر استاندارد)


من چون زياد با سي كار نكردم نمي دانم كه آيا اين دستور كار خاصي انجام مي دهد ( غير از دريافت ورودي ) يا خير . ولي توابع براي دريافت ورودي زياد است . كافي است كمي جستجو كنيد تا حداقل 10 تا كه بطور مستقيم با آنها سرو كار داريد را پيدا نماييد .




سوال دیگه ای که داشتم اینه بود که چرا گاهی اوقات با اینکه سرفایل تابع مورد نظر رو در برنامه ذکر نکردیم میتونیم از برخی از توابع اون سرفایل استفاده کنیم ؟ ایا برخی توابع در چندین سرفایل تعریف شده اند ؟



استفاده از دستورات ( تقريبا همه ) بدون استفاده از سر فايل ها غير ممكن است . با اين وجود بنده تا كنون برنامه هاي زيادي نوشته ام كه در آنها حتي از يك سر فايل هم استفاده نكرده ام .
مي توانيد امتحان كنيد .

موفق پيروز باشيد .

pckho0r
چهارشنبه 29 مهر 1388, 18:26 عصر
در مورد مشكل شما ، مدتي پيش براي يكي از دوستانم چنين مشكل پيش آمد كه در انتها متوجه شديم مشكل از بازه ي قابل قبول اين دو نوع داده اي مي باشد . اصولا سي نسبت به ساير زبان ها بسيار سختگير تر مي باشد و كوچكترين اشتباهي ، بزرگترين پيامد ها را به دنبال دارد .

متاسفانه منظورتون رو درست متوجه نشدم. در حال حاضر برای رفع این مشکل باید چیکار کنم ؟!

pckho0r
چهارشنبه 29 مهر 1388, 21:06 عصر
خواهشآ اگر کسی جواب این مشکل رو میدونه ، دریغ نفرمایند !

اصولآ وقتی به مشکلی برمیخورم تا وقتی حلش نکردم سراغ موضوع بعدی نمی رم !

اما این یکی دیگه خیلی اعصابمو ریخته به هم ، مجبور شدم چند تا رفرنس رو جستجو کنم اما متاسفانه جوابی برای سوالم پیدا نکردم !

PC2st
چهارشنبه 29 مهر 1388, 22:51 عصر
g% ها را به lg% تغییر دهید ;)

pckho0r
پنج شنبه 30 مهر 1388, 08:38 صبح
g% ها را به lg% تغییر دهید ;)

:تشویق:

مشکل از همین جا بود و خوشبختانه برطرف شد.

هیچ وقت معنی این جمله رو که در اکثر کتابها درباره سی گفته می شه رو درک نمی کردم :

در این زبان کنترل همه چیز بر عهده برنامه نویس است !

اخه من از همون ابتدا با سی شروع کردم ! اما الان به خوبی متوجه شدم که جمله بالا یعنی چی !
بیخود نیست که کسی دل خوشی از این زبان نداره ، چک نکردن درست یک مقدار خروجی یا ورودی میتونه کارکد صحیح هزاران خط کد رو به اشتباه بندازه و بیچاره کسی که با این زبان کار می کنه !

یاد ضرب المثل معروفی افتادم که میگه :

یک سر و هزار سودا !

حقیقتآ این مثل به خوبی در مورد برنامه نویسان سی صدق می کنه !