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

كيف أتحكم بالمدخلات من قبل المستخدم

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

هذ ا برنامج class واضح من تصميمه مبدأ عمله وهو حساب مساحات ومحيط بعض الاشكال كل شكل في class دون استخدام التوارث في البرنامج...

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

بمعنى لو طلبت من المستخدم أدخال length الطول ثم أدخل حرف L فما يحدث هو أن يعلق البرنامج ....فما هو الحل من وجهت نظركم ...كيف اتحكم بمدخللات المستخدم ..

كيف أعمل الشرط .... مشكورين.؟؟؟

#include 
#include 


class  Rastingle
{

public:
	Rastingle () { }
	~Rastingle () { }
	void Menu();

    void Setlength ( float length ) { itslength = length; }
	float Getlength () { return  itslength; }
	void Setwigth ( float wigth ) { itswigth = wigth; }
	float Getwigth () { return  itswigth; }
	float  ComputArea () {  return  itslength*itswigth; } // ÏÇáÉ ÍÓÇÈ ÇáãÓÇÍÉ ááãÓÊØíá
	float ComputCircum () { return  ( 2*itslength ) + ( 2*itswigth ); } //ÏÇáÉ ÍÓÇÈ ÇáãÍíØ ááãÓÊØíá

private:
	float  itslength,itswigth;
};

class  Circle 
{
public :
	Circle () { }
	~Circle () { }

	void SetRadious ( float radious ) { itsradious = radious; }
	float GetRadious () { return  itsradious; }
	double  ComputArea () {  return  itsradious * itsradious * 3.14; } //ÏÇáÉ ÍÓÇÈ ãÓÇÍÉ ÇáÏÇÆÑÉ
	double  ComputCircum () { return  2 * itsradious * 3.14; } // ÏÇáÉ ÍÓÇÈ ãÍíØ ÇáÏÇÆÑÉ

private :
	float  itsradious; 
};

class  Squar 
{
public:
	Squar () { }
	~Squar () { }

	void Setlength ( float length ) { itslength = length; }
	float Getlength () { return  itslength; }
	float ComputArea () { return  itslength * itslength; } // ÏÇáÉ ÍÓÇÈ ãÓÇÍÉ ÇáãÑÈÚ
	float ComputCircum () { return  4 * itslength; } //ÏÇáÉ ÍÓÇÈ ãÍíØ ÇáãÑÈÚ

private:
	float itslength;
};

void  Rastingle::Menu ()
{
	int choce;
	char ch;
	float Rid,leng,wigh;

	Circle  C;
	Squar   S;


     while( ch!='n' )
	{

	cout <<"n********************Menu********************n";
	cout <<"n (1)- Rastingle Area : ";
	cout <<"n (2)- Rastingle Circum : ";
	cout <<"n (3)- Circle Area : ";
	cout <<"n (4)- Circle Circum : ";
	cout <<"n (5)- Squar Area : ";
	cout <<"n (6)- Squar Circum : ";
	cout <<"n Choce = ";
	cin >> choce;

	switch ( choce )
	{
	case 1:
		{

			cout <<"n Enter Length = ";
			cin >> leng;
			cout <<"n Enter Wigth = ";
			cin >> wigh;
			Setlength (leng);
			Setwigth(wigh);
			cout <<"n Area = " <<  ComputArea () <<"n";
			break;
		}
	case 2:
		{
			cout <<"n Enter Length = ";
			cin >> leng;
			cout <<"n Enter Wigth = ";
			cin >> wigh;
			Setlength (leng);
			Setwigth(wigh);
			cout <<"n Circum = " <<  ComputCircum() <<"n";
			 break;
		}
	case 3:
		{
			cout <<"n Enter Radious = ";
			cin >> Rid;
			C.SetRadious(Rid);
			cout <<"n Area = " << C.ComputArea () <<"n";
			break;
		}
	case 4:
		{
			cout <<"n Enter Radious = ";
			cin >> Rid;
			C.SetRadious(Rid);
			 cout <<"n Circum = " <<  C.ComputCircum() << "n";
			 break;
		}
	case 5:
		{
			cout <<"n Enter Length = ";
			cin >> leng;
			S.Setlength(leng);
			cout <<"n Area = " <<  S.ComputArea () <<"n";
			break;
		}
	case 6:
		{
			cout <<"n Enter Length = ";
			cin >> leng;
			S.Setlength(leng);
			cout <<"n Circum = " <<  S.ComputCircum() <<"n";
			 break;
		}
	default :
		{
			cout <<"n Error Enter Between 1 .... 6 n";
		}
	}
	cout <<"n Are you Continue (y/n)? ";
	cout <<"n ch = ";
	cin >> ch;
	}
}




int main()
{

	Rastingle R;
	R.Menu();

	return 0;

}

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

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

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

#2

الخطأ في التعليقات كونها كانت مكتوبة بالعربي .... خذ البرنامج بدون أي تعليق...وشكراً....

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

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

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

#3

استخدم الأدخال على هيئة []char ثم استخدم الدالة isdigit للأختبار ثم حول الحروف الى عدد

الدالة isdigit موجوده في المكتبه

اللهم انا نسألك علما نافعا ونعوذ بك من حماقة الجهلاء
#4

عفوا

isdigit تستقبل int

اللهم انا نسألك علما نافعا ونعوذ بك من حماقة الجهلاء
#6

بعد التحيه يأخواني كيف استخدم الدالة isdigit داخل البرنامج مع الشرط يعني ياليت تعطوني الصيغة العامه حقتها ( كيف استخدمها ) ماهي وسائطها وماهو مخرجها .

ثانياً اذا كانت الدالة تقبل حرف كما وضح الاخ الكريم اسماعيل فما فائد استخدامها أذن ...

أرجوا أن تجدو لهذه المشكلة حل والا لكان أكثر البرامج التي نكتبها تتوقف عن العمل بأدخال بينالت عشوائية لاتتوافق مع التعريف للمتغير..

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

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

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

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

#7

معظم البرامج لا تأخذ بعين الإعتبار وجود مستخدمين.................. وذلك بسبب وجود الكثير من الثغرات التي يمكن من خلالها إدخال مُدخلات خاطئة

مثلاً : أرقام سالبة كما في مسألتك - إدخال أرقام كبيرة جداً ( 2356667989043 )

على كل يمكنك بناء نظام أخطاء لمعالجة جميع الأخطاء الممكنة والتي قد تنتج عن الإستخدام السيئ للبرنامج ومن ثم تُظهر رسالة الخطأ المناسبة .

وبالنسبة لاقتراح الأخ khwlani أزيد عليه :

بعد أن حصلت على الدخل بشكل سلسلة نصية يمكنك أن تفحص كل حرف فإذا كان حرف هذا يعني خطأ وإذا لم تجد خطأ في الإدخال يجب أن تُحول السلسلة النصية إلى رقم باستخدام التابع atoi

char ch

cin >> ch

if (isdigit(ch))

{

   cout << "NUMBER";

}
#9

'input =' 234r4

#10
for (int i = 0; i < 6; i++)
//since /0 we do not want to count it
#11

for (int i = 0; i :o:o:o

#12

السلام عليكم ورحمة الله وبركاته .... الاخ الكريم اسماعيل لقد تعبتك معي بس اسمع مني بالنسبة :

1- للأرقام السالبة يمكن التغلب على هذه المشكلة بعمل شرط يجبر المستخدم على ادخال رقم أكبر من الصفر أو طباعة رسالة خطأ...

2- بالنسبة لارقام الكبيرة فليست مسؤليتي فأنا أرى مثلا أن float كافية لتمثيل الرقم وغيري يمكن يرى double ولكن المستخدم اذا ادخل رقم كبير أكبر من أن يمثلة النوع فسيظر نواتج غير متوقعه مثله مثل الكتابة خارج ححدود المصفوفة...

3- أحاول أفهم الطريقة التي شرحت وأحاول أن شاء الله أنفذها وأنما عندما كتبة هذا البرنامج فقط لاوضح أن غيره من البرامج المعقدة والمتعوب عليه سستوقف عن العمل اذا ظهرت بينات عشوائية..ز

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

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

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

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

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

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