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

هذا البرنامج حيرني أريد المساعدة في كشف الغموض

مغلق
بدأه n_2008 في 16 أغسطس 2001 · 5 رد · 550 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لقد حيرني هذا البرنامج لقد كتبته في++c borland و++vc

وكانت النتائج مختلفة

#include 
#include
main()
{
cout<< "how are you";
getch();
retrun 0;
}

وكانت vc++ مختلفة حيث قدم أمرgetch() على أمر الطباعة ولكن الborland قدم أمر الطباعة على أمرgetch() أريد توضيح سبب التقديم والتأخير في هذين النسختين من c++ وشكرا ولكم تحياتي

#2

ياريت تضع الكود هذا و تجربه .........

 #include

#include

main()

{

cout:) :) :)

#3

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

#4

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

ياخي ليه المبالغة أنا مجرد مبتدئ زي زيك ، الأستذة :); خلينها لأهلها .......هاني ......عادل.....نيو

و لذلك أنا ليست لدي خبرة كافية في عالم Console (الشاشة السوداء) ولكن ما أعرفه سوف أقوله لك .....

أولا :- هناك فرق بين "n" و هي تعني (New Line) و endl و هي تعني End Line حيث أن الأولى تكمن مهمتها في الانتقال إلى سطر جديد فقط . أما الثانية و تسمى بمتحكم المجرى (manipulator stream) و تقوم بإفراغ مخزن الخرج (output buffer) و من ثم طباعتها على الشاشة .

طبعا عملية الطباعة تحتاج إلى عناء كبير قد لا تلاحظه أنت لأنك تتعامل معها من مستوى عالي (high-level) فأنت عندما تتعمال مع cout سوف تلاحظ أنه لا يتم الخرج إلا عندما يتجمع في مخزن الخرج ما يكفي لكي يتحمل العناء بطبعاتها على الشاشة . أو ينتهي تنفيذ البرنامج أو يتم وضع endl . (ليست في جميع المصرفات)

ثانيا :- ستلاحظ أهمية endl عندما تستخدم مكتبات سي++ مع سي فمثلا عندما تستخدم printf مع cout ، فالأولى تطبع أول بأول و أما الثانية لا تطبع إلا عندما تفرغ مخزن الخرج .

جرب البرنامج التالي .... و راقبه خطوه خطوه عن طريق debug .....

 #include 
#include
void main () 
{
   cout << "this syntax by cout with endl will appear immediately" << endl;
   printf ("this syntax by printf will appear immediatelyn");
   cout << "this bay! by cout without endln";
   printf ("this bay! by printf!n");
}

على فكره أنا شغال على فيجوال سي يعني أنا لا أدري عن المصرفات الأخرى .

على كل حال جرب هذا الكود و هاتعرف الفرق .

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

#5

كلامك عسل أخي Smart star :)

و تفسيرك منطقي

الله يعطيك العافية و يقويك:)

#6

لا يوجد زيادة على ماقاله الأخ سمارت ويمكنك مراجعة ال MSDN لترى أن endl تقوم بافراغ الbuffer عن طريق التابع streambuf::sync من بعد أن تطبع n على كل إذا أحببت افراغ الbuffer من غير أن تنتقل إلى سطر جديد يمكنك أن تستخدم flush كالتالي :

main()

{

cout :)

Coding on the Cloud and for the Cloud!

My Blog

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

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