زبان برنامه نویسی سی/دستور break
بشکن break
[ویرایش]دستور break به معنی شکستن و با دستور بشکن به کامپایلر تفهیم میکند که یک حلقه و یا دستور گزینشی switch را در هر مورد گزینش ( یعنی هر case ) بشکند . با نوشتن کلیدواژه break در داخل حلقه تکرار و یا در دستور گزینشی switch پس از هر case حلقه خواهد شکست . دقت کنید که فقط در داخل حلقههای تکرار while و do ... while و for و همچنین دستور گزینشی switch مجاز به نوشتن دستور و کلیدواژه break هستید . همچنین اگر چند حلفه تکرار و/یا دستور گزینشی تو در تو داشته باشید ؛ هر دستور break آن حلقه را میشکند و متوقف میکند ؛ بنابراین حلقهها و کدهای داخل آن حلقه بعد از break نادیده گرفته میشوند اما نه حلقه بیرونیتر . ضمن اینکه برای استفاده معقول از دستور break باید از دستورهای شرطی کمک بگیرید . بدین معنی که شرط یا شرایطی را مینویسید که اگر برقرار بودند حلقه بشکند و عمل تکرار یا ادامه بررسی ( در مورد switch ) متوقف شود . دقت کنید که دستور break همواره باید در انتهای خود یک سمیکالن ( ; ) داشته باشد و البته دستور شکستن بدین شکل نوشته میشود ;break یعنی پس از break تنها سمیکالن نوشته میشود و نمیتوانید دستور یا حکمهای دیگری بنویسید ، پیش از آن نیز تنها میتوانید از دستورهای شرطی استفاده کنید تا بر روی break اثر بگذارید و آن را شرطی کنید و دستورها و حکمهای دیگر بر روی آن اثری ندارند . با کمک if ها شما میتوانید شرایط را برای حلقه پیچیدهتر کنید . یعنی اگر شرط خاصی برقرار بود حلقه بشکند و اگر شرط دیگری برقرار بود عملیاتی انجام شده و با کمک حلقه ، تکرار شوند و اگر شرط دیگری برقرار بود عملیات دیگری انجام شده و تکرار شود و اگر هیچ کدام از شرطها برقرار نبودند عمل دیگری انجام شود و یا مثلاً باز هم حلقه بشکند
مثال :
#include<stdio.h>
int main()
{
int i=0, j=0;
int res;
while(i<=1000 && j<=1000)
{
scanf("%d%d", &i,&j);
res = i+j;
printf("Result : %d\n", res);
if((res%2)!=0)
break;
}
return 0;
}
در مثال بالا یک فایل سرآیند استاندارد زبان C یعنی stdio را ضمیمه برنامه خود نمودهایم تا بتوانیم از printf و scanf به ترتیب جهت نمایش در خروجی خطدستوری و گرفتن مقدار از کاربر به واسطه Keyboard ( صفحهکلید ) استفاده کنیم . تابع اصلی برنامه main را نوشتهایم و داخل آن دو متغیر صحیح را با نامهای i و j تعریف کردهایم تا مقدار آنها را کاربر تعیین کند . سپس یک متغیر صحیح با نام res اعلان نمودهایم تا مقدار حاصل جمع i و j را داخل آن ذخیره کنیم . سپس با کمک حلقه while تعیین کردهایم تا زمانی که i و j که کاربر آنها وارد میکند هر دو کوچکتر یا مساوی عدد ۱۰۰۰ باشند مرتباً از کاربر دو عدد گرفته شده و در i و j ذخیره شوند و با یکدیگر جمع شده و حاصل در res ذخیره و سپس توسط printf چاپ شود ( با کمک scanf نیز دو متغیر صحیح i و j را از صفحهکلید کاربر دریافت نمودهایم - که اگر از موضوع پیشین به یاد داشته باشید scanf در کامپایلر به کمک اشارهگر نوشته میشود که برای پاس دادن و فرستادن دادهها به عنوان آرگومان به آن باید از عملگر آدرسدهی استفاده نمائیم / در مباحث مربوطه مفصلاً این موضوعات را شرح خواهیم داد ) حلقه while که در سه مبحث بعدتر از مبحث فعلی شرح داده خواهد شد بلوک داخل خود را تا جایی که شرطها برقرار باشند ، اجرا و تکرار میکند اما با کمک دستور شرطی if شرط کردهایم که اگر مقدار حاصلجمع دو عدد گرفته شده فرد باشد ، حلقه بشکند . بدین شکل که res که حاصلجمع است اگر باقیمانده تقسیم آن بر ۲ عدد ۰ نشود ( با کمک عملگر باقی مانده - % - و عدم تساوی =! ) که یعنی فرد است حلقه بشکند ( 0=!(res%2) یعنی باقیمانده res تقسیم بر ۲ مساوی 0 نباشد ) . ضمن اینکه ما در دستور شرطی if تنها break را نوشتهایم ؛ در صورتی که بخواهیم بیش از یک حکم بنویسیم باید برای دستور if خود یک بلوک ایجاد کنیم ( رجوع شود به دستور if و else if و else ) بنابراین در موارد مذکور حلقه با شروط بیشتری کنترل میشود و در صورت عدم تطابق شروط خواهد شکست
مثال :
#include<stdio.h>
int main ()
{
int a=0, b, c , d, swap;
while(a<100)
{
printf("Enter a number greater than 9\n");
scanf("%d", &a);
if(a<10)
break;
b=a/10;
c=a-(10*b);
if(b>c)
{
d=(b-c)*9;
swap=a-d;
}
else if(c>b)
{
d=(c-b)*9;
swap=a+d;
}
else
{
d=0;
swap=a+d;
}
printf("Result : %d\n\n", swap);
}
return 0;
}
در مثال بالا از کاربر یک عدد بزرگتر از ۹ و کوچکتر از ۱۰۰ دریافت میشود و عدد بر عکس شده و در خروجی خطدستوری چاپ میشود . ما با حلفه while بررسی میکنیم که تا زمانی که عدد ورودی و دریافتی کوچکتر از ۱۰۰ است حلقه ، تکرار شود . در خروجی خط دستوری چاپ میکنیم که کاربر عددی بزرگتر از ۹ وارد کند و سپس یک عدد صحیح از کاربر دریافت میکنیم که متغیر صحیح a است . اگر a کوچکتر از ۱۰ باشد حلقه میشکند . متغیر b عدد دهگان از عدد دریافتی است ( که با کمک تقسیم عدد ، بر ۱۰ که توسط int گرد میشود و بخش اعشاری آن نادیده گرفته میشود به دست میآید ) و متغیر c عدد یکان از عدد دریافتی است ( که با کمک کم کردن ضرب عدد متغیر b در ۱۰ از عدد دریافتی یعنی a به دست میآید ) . سپس اگر b بزرگتر از c بود ؛ یعنی عدد دهگان بزرگتر از عدد یکان بود ، c را از b کم میکنیم و در ۹ ضرب میکنیم و در d ذخیره میکنیم ، سپس d را از a کم میکنیم تا اعدادی که دهگانشان بزرگتر از یکانشان است برعکس شوند . اما اگر c بزرگتر از b بود ؛ یعنی عدد یکان بزرگتر از عدد دهگان بود ، b را از c کم میکنیم و در ۹ ضرب کرده و در d ذخیره کرده و سپس a که عدد دریافتی است را منهای d میکنیم تا اعدادی که یکانشان بزرگتر از دهگان است برعکس شوند . و اگر هر چیزی جز این بود که یعنی b و c برابر هستند ( عدد یکان و دهگان یکسان هستند ؛ مثل ۵۵ یا ۳۳ ) d برابر با ۰ ذخیره میشود و فرقی نمیکند که a را منهای ۰ کنیم یا به علاوه ۰ ؛ ولی ما جمع کردهایم . در انتها با کمک تابع کتابخانهای printf برعکس عدد دریافتی و ورودی را در خروجی خط دستوری چاپ کردهایم . و تابع main عدد 0 را بازمیگرداند که یعنی تابع اصلی با موفقیت به پایان رسیده است