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

مشكلة في الاغلاق ؟؟

مغلق
بدأه عبدالرحمن في 8 أكتوبر 2001 · 11 رد · 4,377 مشاهدة · في قسم المواضيع الهامة في قسم السي /سي++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سويت برنامج بسيط يحسب مساحة المثلث . وهو على Win32 console

المشكلة انني عندما اشغل البرنامج من الويندوز يعني عندما ااضغط على ايقونته يستقبل المدخلات وكل شيء ولكن في النهاية يغلق البرنامج قبل ما يعرض النتيجة وهذا هو الكود :-

#include

double base,height,area;

int main()

{

cout << " Enter Height of The Traingle ";

cin >> height;

cout << " Enter Base Of The Traingle ";

cin >> base;

area = ((0.5 * base) * height);

cout << "The Area is : " << area << "n" ;

return 0 ;

}

المطلوب : انني لا اريد ان يغلق البرنامج نفسه قبل ان يعرض النتيجة .

ارجوكم ساعدوني وجزاكم الله خيرا .

#2

السلام عليكم.

أخي عبد الرحمن يكفي أن تستخدم التابع getch() و الذي يقوم يضع البرنامج في حالة انتظار لضغطة مفتاح بدون أن يظهره ( وهو المطلوب ) و بالتالي يصبح البرنامج كالتالي :

#include 
#include 
main() 
{ 
   double base,height,area;
   cout << " Enter Height of The Traingle "; 
   cin >> height; 
   cout << " Enter Base Of The Traingle "; 
   cin >> base; 
   area = ((0.5 * base) * height); 
   cout << "The Area is : " << area << "n"<   getch();
}

و كما تلاحظ فقد وضعت التابع في آخر تابع ال main .

و هناك ملاحظة على برنامجك و هي وضعك للمتحولات التي تستخدمها خارج بلوك ال main و هي ليست خاطئة و لكن طالما أن المتحولات لا تلزمك على المستوى العام فيفضل التصريح عنها قبل استخدامها و لذلك عدلت برنامجك ووضعت التصريح عن المتحولات ضمن ال main.

مع التحيات.

#3

اشكرك يا اخ عادل على الفائدة الجميلة .

لكني لسه ما جربت الكود اللي وضعته . ان شاء الله اجربه وارد لك خبر ..

بس في مشكلة اوجهها وهي حجم البرنامج . اتخيل انه حجم الربنامج هذا 200 كيلو بايت . ما ادري ويش السبب مع ان الكود قصير جدا . ولغة السي ++ تتميز بقلة حجم برامجها . فارجو ان تفيدوني جزاكم الله خير.

#4

أشكرك يا اخ عادل مليون شكر . نجحت الطريقة .(ادري انك كنت عارف انها راح تنجح ولكن لزيادة المعنويات)

لكن بقي مشكلة حجم البرنامج. معقولة حجم برنامج زي هذا 200 كيلو بايت ؟

ياليت تعطوني الحل ..

#5

السلام عليكم.

أخي عبد الرحمن سبب كبر حجم الملف التنفيذي هو أن النسخة التي تعمل عليها هي نسخة Debug و هي نسخة التطوير أما نسخة ال Release فتكون ذات حجم أقل بكثير حيث يتم إزالة أي شيء يتعلق بعملية ال Debug .

جرب أن تحول نسخة البرنامج إلى Release و شوف النتيجة:)

مع التحيات.

#6

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

كتبت برنامجا شبيها بالبرنامج السابق (اعني في السطرين الاخيرين....

cout<<"press any key to continue";

getch();

و كان المفترض ان يكون الناتج ان تظهر هذه العبارة ثم يتوقف البرنامج في انتظار ان اضغط على اي زر....

نجحت في تنفيذ ذلك للمرة الاولى..

و لكن بعد ذلك اصبح البرنامج يتوقف قبل سطر cout ثم اذا ضغطت اي زر يكتب البرنامج press any key to continue و يغلق نفسه تلقائيا.... ما السبب يا ترى؟؟؟؟؟

لي ملاحظة على هذا المنتدى وهي كثرة الاخطاء الاملائية حتى في الرسالة التي ترسل الى المشترك بل ربما في كل صفحة فالرجاء تدارك هذا الامر...

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

أخوكم...

dr.okaz

#7

اخ دكتور عكاظ ..

السر في الدالة endl . على حسب تجربتي .

ولكن الدالة endl محيرتني لاني ماني عارف ويش فائدتها .

ياليت الاخوان يوضحون فائدة الدالة endl .

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

نقص الحجم الى الربع . 54 كيلو بايت .

بس صراحة ما كنت اتوقعه بهذا الحجم . يعني المفروض اقصى حد لهذا البرنامج 20 كيلو بايت . والله ما ادري ويش السر ؟؟

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

#8

السلام عليكم.

كلام الأخ عبد الرحمن صحيح فالسر هو في endl و السبب هو أن endl تجبر النظام على طباعة جميع الرموز التي تم تجهيزهافي ال Buffer و هذه العملية تسمى ( flush ).

مع التحيات.

#9

والله ادري اني تعبتك معاي ولكن اقسم بالله مالي الا الله ثم انتم وذا الكتاب اللي اشتريته في لغة السي ++ .

سؤال : ماهو ال Buffer ? كتبت معناها في المترجم وكتبلي معناها الحاجز بين شيئين . فلم استطع ان اوفق بين معناها في المترجم ومعناها اللي انت تقصده . ياليت توضحها لي .

سؤال 2: عملت برنامج بالفيجوال بيسك حوالي 30 سطر ثم نفذته وطلع حجمه 36 كيلوبايت .

هذا البرنامج اللي ازعجتكم فيه طلع حجمه 54 كيلوبايت. لماذا؟

هل برامج الدوس كبيرة الحجم . ام برامج السي ++ كبيرة الحجم؟

والسلام عليكم ...

#10

إجابة السؤال الاول:

الـ Buffer هو مخزن مؤقت فى الذاكرة يتم وضع القيم والبيانات به إلى أن تقوم أنت عن طريق البرنامج بإلغائة

أو ينتهى بإنتهاء البرنامج هذا ما أعلمه

إجابة السؤال الثانى :

حجم الملف فى فيجول بيسك ليس حقيقى فكل برامج فيجول بيسك تستخدم ملفات وقت التشغيل RunTime Files لأنها تستدعى أوامر كثيرة

من هذه الملفات ولذلك فالحجم الذى ظهر لك ليس حجم برنامجك وإنما حجم الجزء الذى برمجته أنت

هذا والله أعلى وأعلم

#11

جزاك الله خير اخي رمضان .

#12

بالنسبة للمشكلة التي ذكرتها

يبدو نا الامر متعلق ب cout نفسها ....

فقد بقيت المشكلة موجودة بدون وجود endl.....

و لكن عندما استبدلت cout ب printf سار كل شيء على ما يرام..

و الله الموفق

أخوكم في العقيدة

محمد

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

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