زبان برنامه نویسی سی/دستور break

ویکی‎کتاب، کتابخانهٔ آزاد
پرش به ناوبری پرش به جستجو
Gnome-go-last.svg Gnome-go-first.svg

بشکن
break
[ویرایش]

دستور break به معنی شکستن و با دستور بشکن به کامپایلر تفهیم می‌کند که یک حلقه و یا دستور گزینشی switch را در هر مورد گزینش ( یعنی هر case ) بشکند . با نوشتن کلیدواژه break در داخل حلقه تکرار و یا در حلقه گزینشی switch پس از هر case حلقه خواهد شکست . دقت کنید که فقط در داخل حلقه‌های تکرار while و do ... while و for و همچنین حلقه گزینشی switch مجاز به نوشتن دستور و کلیدواژه break هستید . همچنین اگر چند حلفه تکرار و/یا گزینشی تو در تو داشته باشید ؛ هر دستور break آن حلقه را می‌شکند و متوقف می‌کند ؛ بنابراین حلقه‌ها و کدهای داخل آن حلقه بعد از break نادیده گرفته می‌شوند اما نه حلقه بیرونی‌تر . ضمن اینکه برای استفاده معقول از دستور break باید از دستورهای شرطی کمک بگیرید . بدین معنی که شرط یا شرایطی را می‌نویسید که اگر برقرار بودند حلقه بشکند و عمل تکرار متوقف شود . دقت کنید که دستور 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 را بازمی‌گرداند که یعنی خروجی ندارد و تابع مقداری را باز نمی‌گرداند