لماذا النتائج هكذا.. والمفروض ان تكون هكذا.. (++c)

السلام عليكم اخواني انا ابرمج بلغة c++ ولكن واجهني سؤال ;int a=10

;cout<<a++<<endl

;cout<<a<<endl

;cout<<--a<<endl

;cout<<++a<<endl

اذا ترجمنا هذا الكود سيكون الناتج 10,11,10,11

لكن اذا ترجمنا كل سطر على حده سيكون الناتج 11,10,9,11

لماذا النتيجه الولى تختلف عن الثانيه ؟؟؟؟؟؟


التعليق السابق

اخي طب المفروض من كلامك ان الناتج يطلع ١١.١٠.٩.١١ ،،،، طيب لماذا يكون الناتج الاول 10 مع اني طالب من المترجم في اول امر طباعه بأنه يزود a بمقدار واحد فلماذا كتبهابنفس قيمتها (١٠) ولم يزد واحد ويكتب(١١) ؟؟!

hereismhtm أضف ردا

أنظر جيدا لهذه الجملة cout<<a++<<endl;

رتبها بثلاث أشياء: أمر الطباعة ثم المتغير a ثم معامل الزيادة، حسنا...

أمر الطباعة يطبع مايليه وهو المتغير وقيمته 10 ، لذلك تخرج لنا بالشاشة رقم 10 وهنا إنتهى عمل جملة الطباعة، لم ننتهي بعد، هنالك معامل زيادة، إذا ستقوم اللغة بزيادة المتغير a بواحد ويصبح قيمته الجديدة 11، لكنها لن تطبع فأمر الطباعة cout انتهى عمله سابقا بطباعة الرقم 10.

الآن إذا نفذت الجملة التالية cout<<a; فماذا سيكون الخرج، سيكون الرقم 11

مع اني طالب من المترجم في اول امر طباعه بأنه يزود a بمقدار واحد

لطلب ذلك (زيادة قيمة المتغير ثم طباعته) اجعل معامل الزيادة قبل المتغير وليس بعده هكذا:

cout<<++a<<endl; وسيخرج لك على الشاشة الرقم 11، والعكس إن جعلت معامل الزيادة بعد المتغير فسيطبع على الشاشة الرقم 10.

أتمنى أن تكون الفكرة واضحة :)

شكرا جزيلا اخي انا فهمتك ولله الحمد ثم لك بس اخي اخر سؤال ...... ليش لو انا كتبت الجمله

;++cout<<a لحالها بدون وضع اي جمل طباعه بعدها يكون الناتج 11 مش عشره كما فهمتني ؟؟

القيمة الأولية للمتغير تساوي 10

الجملة التي ذكرتها إن نفذتها للمرة الأولى فسيكون المخرج 10، وفي الذاكرة 11

إن نفذت الجملة مرة ثانية سيكون المخرج 11،وفي الذاكرة 12

وهكذا والعكس صحيح

شكرا جزيلا اخي وفيت وسددت واصبت