بر خلاف دستور شرطی که شرط خود را تنها یک بار چک میکند و اگر برقرار باشد دستورات بلو ک خود را اجرا میکند، حلقههای شرطی به این صورت عمل میکنند که شرط داخل خود را بررسی میکنند و تا زمانی که شرطشان برقرار باشد دستورات داخل بلوکشان اجرا خواهند شد. این حلقه ها از دو نوع هستند که در زیر به توضیح آن ها میپردازیم.
تکه کد زیر را که صورت کلی این نوع حلقه است، در نظر بگیرید.
while (condition) { //statement }
عملکرد این حلقه شرطی به این صورت است: ابتدا شرط حلقه چک میشود، اگر شرط آن برقرار باشد داخل حلقه شده و دستورات آن اجرا میشود. بعد از اجرای دستورات دوباره شرط حلقه چک میشود و اگر برقرار باشد باز هم داخل حلقه شده و دستورات آن را اجرا میکند و این روند تا زمانی که شرط حلقه برقرار باشد ادامه مییابد.
این نوع حلقه شرطی هم همانند حلقه شرط while است با این تفاوت که دستورات داخل بلوک آن حداقل یک بار اجرا میشوند. برای درک این مسعله صورت کلی آن را در نظر بگیرید.
do { //statement } while(condition);
همان طور که از صورت کلی این حلقه هم نمایان است، زمانی که برنامه به این قسمت میرسد وارد حلقه شده و دستورات را انجام میدهد و سپس شرط حلقه را چک میکند. بنابراین واضح است که در این حالت دستورات حداقل یک بار اجرا میشوند. به علامت نقطه ویرگول(semicolon) بعد از پرانتز دقت کنید. این نقطه ویرگول اجباری است و در صورت نگذاشتن آن با syntax error مواجه میشوید.
int i = 0; while(i < 0) { if( i == 0 ) i= -10; cout<<i<<endl; i++; }
int i = 0; do { if ( i == 0 ) i = -10; cout<<i<<endl; i++; } while (i<0) ;
در کد اول چون شرط حلقه برقرار نیست بنابراین برنامه وارد حلقه نشده و هیچ چیزی چاپ نمی کند. در کد دوم ابتدا وارد حلقه میشویم و چون مقدار i برابر 0 است پس وارد بلوک if شده و مقدار i برابر 10- میشود. بعد از چاپ شدن i، شرط حلقه چک میشود و چون برقرار است، به اول بلوک حلقه بر میگردد. با کمی دقت مشاهده میکنیم که در این حلقه اعداد 10- تا 1- چاپ میشوند و سپس از حلقه خارج میشویم.
دستور پرکاربردی که در حلقهها کاربرد دارد، دستور break است. هر زمان که در طی اجرای حلقه، به این دستور برسیم اجرای دستورات حلقه متوقف شده و از حلقه خارج میشویم.
فرض کنید در مثال قبل میخواهیم،تنها اعداد 10- تا 5- چاپ شوند. این کار را میتوان به صورت زیر انجام داد.
int i = 0; do { if (i == 0) i = -10; if (i == -4) break; cout<<i<<endl; i++; } while (i<0) ;
دستور دیگری که در حلقهها کاربرد دارد، continue است. تفاوتی که این دستور با دستور break دارد،آن است که با رسیدن به این دستور ادامهی اجرای دستورات حلقه متوقف شده و برنامه به ابتدای حلقه باز میگردد و از حلقه خارج نمیشود.
فرض کنید در همان مثال قصد داریم اعداد 10- تا 1- را چاپ کنیم با این تفاوت که عدد 4- چاپ نشود. این کار به صورت زیر امکانپذیر است.
int i = 0; do { if (i == 0) i = -10; if (i == -4) continue; cout<<i<<endl; i++; } while (i<0) ;