در کد ساده ی زیر، چه مقداری در خروجی برای شمارنده ی 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 چاپ میکند؟