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

مشكلة صغيرة بين int و char

مغلق
بدأه زيد العمري في 19 فبراير 2005 · 5 رد · 652 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي مشكلة صغيرة مع int و char

لو كان لدينا متغير من نوع int داخل البرنامج والمطلوب ادخال هذا المتغير وقت التنفيذ

int a;
cin>>a;

ولو قام المستخدم بإدخال رمز ( أي char ) بدل رقم سوف يحدث خطأ في البرنامج ويتوقف ( يخربط )

كيف من الممكن أن أقوم بالسيطرة على هذه الحالة وعند إدخال رمز ( char ) بدل int ممكن ان أطبع رسالة خطأ أو أوقف البرنامج طبيعياً

أي كيف من الممكن برمجياً عمل التالي

 
int a;
cin>>a;

if a = char //               يعني القيمة التي ستدخل على شاشة التنفيذ  
 { 
cout<<”Error “;  exit(0); }

لقد حاولت بأكثر من طريقة ولكن دون جدوى ولقد قيل لي بأن هذه الحالة لا علاج لها في سي ++ ولا يوجد شيء تسيطر بواسطته على الادخال ( كما في لغة باسكال )

و لقد لاحظتُ هذه الحالة في اكثر من برنامج ولم يقم أحد بمعالجتها ( طبعاً من الممكن تحويل int إلى char داخل البرنامج للسيطرة على هذه الحالة إذا كان البرنامج فيه خيارات ويطلب من المستخدم اختيار أحدها كما فعل الأخ البارودي في برنامج المليون )

ولكن ألا يوجد طريقة أخرى ..

أرجو من السادة الأعضاء ومن لديه أي معلومة الإجابة ..

وبارك الله في الجميع ..

برامج في ال C#

إذا اشتكى مسلم في الهند أرقني -- وإن بكى مسلم في الصين بكاني

ومصر ريحانتي والشام نرجستي -- وفي الجزيرة تاريخي و عنواني

وفي العراق أكف المجد ترفعني -- إلى بساتين عز ذات أفنانِ

أرى بخارى بلادي وهي نائية -- وأستريح إلى ذكرى خراسانِ

#2

يمكن فعل ذلك بإستخدام معالجة الإستثناءات فقط مباشرة بكتابة الأمر الذي قد تكون فيه مشكلة في block try وكتابة بلوك catch لتعالج الخطأ بطريقتك الخاصة :

try
{

int q;
cin>>q;

//if (q==charachter)
//throw int();

}

catch(...)
{

write your exeption catch code here  ...
}

تم تعديل هذه المشاركة بواسطة HGB في 19 فبراير 2005 في 15:03

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#3

السلام عليكم

فقط اريد ايضا ان اسال .

فعلا البرامج التي نكتب كثيرا منها ندخل المتغيرات ونطبقونفرح بالنتائج ولكن مثل ما قال اخي السائل لو دخلنا char بدل int لحدث اقل شيء انيعلق البرنامج او يعطي ناتج غريب او لايعمل في اقل الاحوال.

اخي HGB كلامك سليم وفي محله وحقيقة كتل try & catch تحل المشكلة ولكن هل بالضرورة عمل ذلك لكل متغير ؟

أسهل عليك كي تفهمني لنفرض عندي 5 متغيرات انواعها مختلفة فهل أحدد كتلة try لكل نوع واختبرها ماذا لو كانت مصفوفة من 100 عنصر وهكذا؟

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

الموضوع حقيقة يحتاج لنقاش جدي وصريح وحان الاوان لذلك؟!!!

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

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

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

#4

السهم الناري كلامك سليم وكانت توجد عمليات إستثناءات لدخل iostream قرأته في بداية عهدي بالسي++ ولاأذكرها الآن والكتاب ضاع !!

المهم يكفي أن تحلها بكتابة دالة تستخدمها للإدخال وتعيد القيمة المدخلة , ولو إضطريت إكتبها ب template لتأخذ كل الإحتمالات .

هذه الدالة إكتب كودها في كتلة try وضع كتلة ال catch لحل المشكلة .

الآن كل مرة ترغب فيها من المستخدم أن يدخل شيئا , إستدعي هذه الدالة فقط وخذ قيمة ال return لتستخدمها وتأكد من أنها سليمة :)

الشيء الآخر دخل السي++ لايستخدم كثيرا إلا في التدريب الأولي للسي++ فقط وعملية الإدخال والإخراج في البرامج الحقيقية تتم عن طريق إدخال قيم في textbox أو أي نوع تحكم , ويخضع لعمليات رقابة كبيرة ويمكن التحكم في مدخلاته بشكل كبير .

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#5

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

بالتوفيق.

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

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

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

#6

السلام عليكم

شكراً على المرور

أن هذه المشكلة مع int و char واجهتني في سؤال مصفرفات كما قال الاخ السهم الناري .. حيث المستخدم يقوم بأدخال الحجم ثم بعد ذلك يدخل العناصر ( بأستخدام pointer طبعاً ) وعندما يقوم المستخدم بأدخال بدل الحجم رمز سوف يحدث خطأ ولعلاج هذه المشكلة قمت بالتعامل مع المتغيرات على أنها char وداخل البرنامج قمتُ بتحويلها الى int ( بطرح 48 من الاسكي التابع للرمز أو باستخدام دالة atoi ) ولكن ظهرت لي مشكلة جديدة كما يحدث في برنامج المليون للاخ الكريم .. البارودي .

الأخ HGB شكرا جزيلا على مرورك وعلى أجابتك ودائما نتعلم منك الله يعطيك العافية انت وجميع أعضاء المنتدى ..

بصراحة أنا مازلت مبتدئ جدا في لغة سي++ ولم أفهم ما قلته ولكن المهم انت مسكتني اول الطريق ( واذا لايحدث حرج عليك ، هل من الممكن ان توضح أكثر ) .. بالمناسبة أخ HGB اني اريد ان اشكرك جدا على دروس الـ OOP فهي رائعة بالفعل ولقد استفدتُ منها كثيرا ..واتمنى أن تستمر بها وأن شاء الله ( اذا سمح لي الوقت ) وبعد أذنك سوف اقوم انا أيضا بأضافة بعض الدروس في الـ OPP وخاصة في الوراثة وأنواعها وعن الدوال الصديقة .

على فكرة .. إن البرنامج الذي اعمل عليه الان هو باستخدام classes و inheritance وهو على المصفوفات وواجهتني مشكلة عويصة مع المهدم ولم أجد حل لها الا بحذف المهدم واستخدام دالة عادية لكي استدعيها وقت ما اشاء . عندما انتهي منه سأقوم بوضعهِ هنا .. وحينها ساطرح عليك هذه المشكلة يا اخ هيثم لعلي اجد ضالتي عندك ( وارجو ان يتسع صدرك لي ولأسئلتي ).

وشكرا للجميع .

برامج في ال C#

إذا اشتكى مسلم في الهند أرقني -- وإن بكى مسلم في الصين بكاني

ومصر ريحانتي والشام نرجستي -- وفي الجزيرة تاريخي و عنواني

وفي العراق أكف المجد ترفعني -- إلى بساتين عز ذات أفنانِ

أرى بخارى بلادي وهي نائية -- وأستريح إلى ذكرى خراسانِ

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

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