الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]مشكلة عند تعريف دالة تأخذ وسيط float في C

بدأه bahbah في 23 نوفمبر 2013 · 8 رد · 856 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لدي سؤال .. ولو أن لدي الكثير من الأسئلة  :lol:  ..

 

كيف يمكنني تعريف دالة في الـC .. بنوع float ..

float function(float x) { return 5.5; }

تحياتي  ^_^

تم تعديل هذه المشاركة بواسطة bahbah في 23 نوفمبر 2013 في 20:08

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

#3

هههههه  :lol:  ..

 

تكتب الدالة بهذا الشكل ..

int function(void){    return 0;}

أنا أريد بدل أن تقوم الدالة بإرجاع قيمة رقمية من نوع int ..

 

أريدها ترجع قيمة بالفاصلة كا 4.5 ..

float function(void){    return 4.5;}

ولكن هذا يعتبر خطأ في نوع الدالة لا أعلم ما السبب

 

تحياتي  ^_^

تم تعديل هذه المشاركة بواسطة bahbah في 23 نوفمبر 2013 في 20:16

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

#4

الدالة صحيحة، مانوع الكومبايلر الذي تستخدمه، وأين يحدث الخطأ بالضبط

#include <stdio.h>

float func (void)
{
	return 4.9;
}

int main (void)
{
	printf("%.1f\n", func());

	return 0;
}
#5

اه الدالة صحيحة فعلاً  :lol:  ..

 

الخطأ يظهر عندي في كومبايلر GNU GCC .. عندما أريد أن تأخذ الدالة قيمة أي بدل  void --> float num

 

تحياتي  ^_^

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

#6

@bahbah

الخطأ كما يلي :

أنت تعرف الدالة :

float function(float x) { return 5.5; }

ثم عند الاستدعاء تكتب :

function();

فقط بدون تمرير وسيط .. والخطأ الذي يظهر عندك (على ما أظن )

X.c: In function `main':
X.c:4: too few arguments to function `function'

وهو يقول : عدد أقل من اللازم من الوسطاء تم تمريرها إلى الدالة function

في المرات المقبلة أرفق نص الخطأ إن ظهر لك أخطاء :)

بالتوفيق

#7

لا أخي مصطفى ..

 

لا أظن أن هذه المشكلة فالرسالة التي تظهر مختلفة .. 

 

هذه هي الرسالة ..

 

post-219398-0-02471300-1385240831_thumb.

 

وهذا أمر الإستدعاء ..

 

post-219398-0-13298100-1385240898.png

 

المشكلة ليست في الإستدعاء بل المشكلة أنه لا يتعرف على نوع الدالة ..

 

تحياتي  ^_^

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

#8

اكتشفت الخطأ  .. ( أو بالأحرى وجدته )

بدايةً :

عندما نواجه مشكلة لا يجب التركيز على موضع واحد وافتراض أن الخطأ فيه .. يجب إرفاق الكود كاملاً ( أقصر كود يمكنه التسبب بالمشكلة )

والحمد لله وجدت المشكلة هنا .. (دائماً استخدم google :) )

int main()
{
    funct(5.5);
    return 0;
}
float funct(float x){return 5.5;}

المهم ..

في لغة C يجب تعريف الدوال قبل استخدامها ..

إن لم ترغب بكتابة جسم الدالة فوراً .. فعليك تعريف الـprototype .. يعني نفس اسم الدالة والقيمة المعادة وانواع الوسطاء ولكن بدون أقواس {} ونضع فاصلة منقوطة ..

المهم ... كما في الرابط السابق

عند استدعاء دالة غير معروفة يفترض المترجم أنها تعيد int .. وعندما يكتشف انها معرفة بحيث تعيد float فسيحدث تضارب ..

يمكنك حل المشكلة بعدة طريق منها :

1-وضع جسم الدالة قبل االدالة التي استدعتها :

float funct(float x){return 5.5;}
int main(){    funct(5.5);    return 0;}

2- استخدام prototype

float funct(float );
int main(){    funct(5.5);    return 0;}
float funct(float x){return 5.5;}

هل تمت الإجابة :)

بالتوفيق :)

1
#9

نعم قد حلت المشكلة  :)   .. كانت المشكلة في التضارب كما قلت .. شكراً لك  :lol:

 

باقي الدوال التي عندي كلها من نوع int .. وكانت تعمل بشكل ممتاز ..

 

ولكن عندما جربت أن أغير نوعها إلى float حدثت المشكلة !!

 

تحياتي  ^_^

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

مواضيع مشابهة