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

سؤال عن try و catch الاستثناءات

مغلق
بدأه السهم الناري في 14 سبتمبر 2003 · 4 رد · 624 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته:

سؤالي اليوم عن استخدام الاستثناءات في البرنامج، وبصيغة أوضح لقد وضعت مثال مبسط دالة تحسب مساحة مستطيل ونقوم بعمل استثناء لكل من:

1- كون الرقم بالسالب.

2- كون الرقم أكبر من الحد المسموح به للإدخال حتى لا يكون هنالك لف للرقم.

3- إذا أدخل حرف أو نص بدل رقم.

و إليكم البرنامج:

#include <iostream.h>

class RAR { };
class Rar { };

float  Area()
{
	float x,y;

	cout << " Enter Tow Numbers from 1 to 32767 : ";
	cout << "\n One Number = ";
	cin >> x;
	cout << "\n Tow Number = ";
	cin >> y;

	if( x<=0 || y<=0 )
	{
  throw RAR();
	}
	else if( x>=32767 || y>=32767 )
	{
  throw Rar();
	}

	return x*y;
}

int main()
{
	try
	{
  cout << " Area = " << Area() << endl;
	}
	catch(RAR)
	{
  cout << "\n Numbers <=0 " << endl;
	}
	catch(Rar)
	{
  cout << "\n Numbers >=32767 " << endl;
	}
	catch(...)
	{
  cout << "\n Input Error ";
	}

	return 0;
}

والسؤال أخواني الكرام هو عندما أقوم بإدخال حرف أو نص يصيد الاستثناء الأول وهو الأقل من الصفر وأنا أريده أن تصيده عبارة catch(…) الأخيرة ولكن لا فائدة لم أفلح بذلك فما هو الحل من وجهة نظركم؟؟؟؟؟؟؟

وأيضاً متى استخدم عبارة catch(…) إذا كان استخدامها في هذا البرنامج خطأ؟!؟!

وتقبلوا تحياتي.

اللهم علمنا ما ينفعنا وأنفعنا بما علمتنا أنك أنت العليم الحكيم

سبحان الله وبحمده سبحان الله العظيم

لاحول ولاقوة الا بالله( كنز من كنوز الجنة ).

#2

السلام عليكم,

مشكلتك يا أخي كلآتي :

حين تدخل حرف أو كتابة فإن X أو غيرها لا تأخد أي value والكومبايلر حين تكتب float x هو يعطيها أرقاما عشوائية غالبا ما تكون سالبة وصغيرة لدى تأخدها الكاتش الأولى.وللتأكد من دلك يمكنك كتابة x y على الشاشة بعد float x y وبعد أن تدخل الأعداد.

الأقتراح هو أن تأخد value ل x في a مثلا بعد flot x وبعد إدخال علامة x تقارنها مع a فإدا كانا نفس الشيء فإننا أدخلنا شيئا آخر غير عدد وتتجه إلى الكاتش اللي تريد.

هدا اقتراح ولكن لا أفهم لمادا تريد كل هدا فأنا أضن أن كاتش واحد يكفي ليدلنا على أنه هناك خطء ما في دخول الأرقام.

مع متمنياتي لك بالتوفيق.

إلى اللقاء.

#3

السلام عليكم :

شكرا أخي على الرد ولكن ممكن توضح كلامك أقصد قولك خذ قيمة لa وقارنها بقيمه لx واذا لم تكن فهو عدد؟؟؟؟؟

وأنا يوم وضعت أكثر من catch لأن هنالك أكثر من احتمال للخطأ العدد سالب أو العدد أكبر من مكان تخزينه أو أن يدخل المستخدم حرفا .

كذلك سؤال أخير ومعليش طولت عليك؟

متى تستخدم catch(...) الاخيرة؟؟؟؟؟

وشكرا والى اللقاء.

والله يجزاك خير

اللهم علمنا ما ينفعنا وأنفعنا بما علمتنا أنك أنت العليم الحكيم

سبحان الله وبحمده سبحان الله العظيم

لاحول ولاقوة الا بالله( كنز من كنوز الجنة ).

#4

السلام عليكم,

كما قلت حين نكتب float x فالبرنامج يعطيها رقما عشوائيا وإدا أدخلنا حرفا مثلا فالبرنامج لن يأخده بعين الإعتبار فستبقى x على حالتها .لو وضعنا مثلا :

float x,a

a=x

هنا تكون عندنا علامة x العشوائية ونعطي نفس القيمة ل a .

المستخدم سيدخل قيمة ل x . إدن إدا أدخل رقما فإن قيمة x ستتغير وتكون مختلفة على قيمة a :

if( a!=x) فقد أدخلنا رقما.

أما إدا أدخلنا كتابة فإن قيمة x لن تتغير وبالتالى ستكون نفس قيمة a الأولى.

if(a==x) أدخلنا شيئا آخر غير عدد. هده تعمل إلا إدا أدخل المستخدم نفس العدد العشوائي وهده لها احتمال يمكن أن نقول أنه منعدم.

مع متمنياتي لك بالتوفيق.

إلى اللقاء.

#5

السلام عليكم:

شكرا أخي الكريم على التوضيح الجميل وأشكر لك حسن الرد والتفاعل الجميل والى الأمام.

سأجرب ماقلت لي وأشوف أن شاء الله .

و أجرب كل الاحتمالات . وكل الاحتمالات لابد أن أخذها بعين الاعتبار .

شكرا والى اللقاء.

اللهم علمنا ما ينفعنا وأنفعنا بما علمتنا أنك أنت العليم الحكيم

سبحان الله وبحمده سبحان الله العظيم

لاحول ولاقوة الا بالله( كنز من كنوز الجنة ).

هذا الموضوع مغلق.

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