مقدار شمارنده ی i در انتهای یک حلقه چقدر است؟

در کد ساده ی زیر، چه مقداری در خروجی برای شمارنده ی i چاپ خواهد شد؟

char ch;
int i;

cin >> ch;

for (i = 1; ch = cin.get() != '.' ; i++) ;

cout << i;

طبق درسی که به ما داده اند، اگر بعد از حلقۀ for علامت ; گذاشته شود، تا وقتی حلقه تمام نشود، برنامه اجرا میشود. پس دستور cout بعد از حلقه باید آخرین مقدارِ 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 چاپ میکند؟

1 Likes

حرف a قبل از حلقه for و در این خط خوانده می‌شود:

cin >> ch;

اگر خط بالا را کامنت کنید می‌بینید که نتیجه مورد انتظار ۶ در خروجی نمایش داده می‌شود چون در صورت وجود خط بالا، اولین حرف درون حلقه b است نه a. می‌توانید ch را نمایش دهید و نتیجه را ببینید:

for (i = 1; ch = cin.get() != '.' ; i++) cout << ch;
1 Likes

خیلی ممنون، دست شما درد نکنه

1 Likes