نقل قول نوشته شده توسط the king مشاهده تاپیک
اینکه خود کد رو درج می کردید خیلی بهتر موضوع رو شرح میداد تا اینکه روال کد رو توصیف کنید. اندیس ها با مقدار 0 شروع میشه، نه یک، به همین جهت اگر رشته 6 کاراکتر طول داشته باشه، اون کاراکتر ششم در خانه شماره 5 قرار داره، نه شماره 6
جدول اولویت عملگر ها رو اینجا ببینید، هر چقدر عملگر بالاتر باشه اولویت بیشتری داره و زودتر محاسبه میشه :
https://en.cppreference.com/w/cpp/la...tor_precedence
عملگر ++ نسبت به عملگر * اولویت داره، پس اول باید ++a محاسبه بشه و بعد نتیجه اش در a ضرب بشه. ++a که نباید با a++ اشتباه گرفته بشه، مقدار a رو یک واحد افزایش میده ولی مقداری که برمیگردونه قبل از افزایش ئه، یعنی a رو 3 می کنه ولی مقدار 2 رو بر میگردونه. بنابر این نتیجه محاسبه ++a عدد 2 میشه، ولی مقدار a رو به 3 تغییر میده.
در ادامه اون 2 حاصل از ++a در مقدار a (که 3 شده) ضرب میشه، یعنی 2 * 3
اگر بجای ++b = a * a کد b = a * ++a اجرا میشد، حاصل 9 بود، چون a++ مقدار a رو افزایش میده و همون مقدار افزایش یافته رو هم برمیگردونه، نه مقدار قبل از افزایش.
خیلی ممنون از راهنماییتون;طبق درسی که به ما داده اند، بعد از حلقۀ for اگز ; باشد، و پایین آن دستور cout داده باشند که i را چاپ بکند، آن i چاپ میشه که به ازای آن i شرط داخل حلقه نقض میشه. با همین برنامه، استاد ما یک .abcde داد که i برابر 5 چاپ شد. حالا پرسش من اینه که وقتی به ازای i=1 حرف a داخل ch میرود، چون می بیند نقطه نیست، یک واحد به i اضافه میشه و کلمۀ بعدی را می خواند و ... تا وقتی که i=5 میشه، حرف e داخل ch میرود و چون حرف e نقطه نبوده، یک واحد بدان اضافه میشه، i=6 میشه، وچون به نقطه میرسه، شرط داخل حلقه نقض میشه. پس داخل حلقه i از 1 تا 5 هست و به ازای i=6 حلقه نقض میشود. پس cout باید 6 را چاپ کند.
با توجه به توضیحاتی که به ما داده اند، باید i=6 بشود، اما چرا برنامه، i را مساوی 5 چاپ میکند.