دستور goto در برنامه نویسی C
در این آموزش با دستور goto در برنامه نویسی C آشنا خواهید شد و یاد خواهید گرفت که چه زمانی از این دستور استفاده کنید. دستور goto این امکان را فراهم می کند تا بتوانید کنترل برنامه را به یک label (برچسب) مشخص منتقل کنید.
وقتی برنامه به دستور goto می رسد، کنترل برنامه به شناسه نوشته شده بعد از goto پرش می کند.
ساختار دستور goto:
goto label;
… .. …
… .. …
label:
statement;
label یک شناسه است و با اجرای دستور goto، کنترل برنامه به :label می رود و اجرای کد از آنجا شروع می شود.
دستور goto چگونه کار می کند؟
مثال: دستور goto
// برنامه محاسبه مجموع و میانگین اعداد مثبت
// با ورود عدد منفی توسط کاربر، مجموع و میانگین نمایش داده می شود
#include <stdio.h>
int main() {
const int maxInput = 100;
int i;
double number, average, sum = 0.0;
for (i = 1; i <= maxInput; ++i) {
printf(“%d. Enter a number: “, i);
scanf(“%lf”, &number);
// پرش می کند jump اگر کاربر عدد منفی وارد کند برنامه به برچسب با شناسه
if (number < 0.0) {
goto jump;
}
sum += number;
}
jump:
average = sum / (i – 1);
printf(“Sum = %.2fn”, sum);
printf(“Average = %.2f”, average);
return 0;
}
خروجی
۱٫ Enter a number: 3
۲٫ Enter a number: 4.3
۳٫ Enter a number: 9.3
۴٫ Enter a number: -2.9
Sum = 16.60
Average = 5.53
دلایل عدم استفاده از دستور goto
استفاده از دستور goto ممکن است منجر به باگ در کد شود و به سختی قابل پیگیری است. مثال،
one:
for (i = 0; i < number; ++i)
{
test += i;
goto two;
}
two:
if (test > 5) {
goto three;
}
… .. …
علاوه بر این دستور goto امکان انجام کارهای نامناسب مانند پرش از محدوده را نیز فراهم می کند.
همانطور که گفته شد، در بعضی اوقات goto می تواند مفید باشد. به عنوان مثال: شکست و خروج از حلقه های تو در تو.
آیا باید از goto استفاده کنید؟
اگر فکر می کنید استفاده از دستور goto منجر به ساده شدن برنامه می شود، می توانید از آن استفاده کنید. به ندرت استفاده از دستور goto می تواند مفید باشد و هر برنامه ای در زبان C را می توانید بدون استفاده از آن هم بنویسید.
به قول بجارن استروستروپ (Bjarne Stroustrup) خالق C++: “این واقعیت که”goto”می تواند هر کاری انجام دهد دقیقاً دلیل استفاده نکردن از آن است.”
سلام ممنون از پست مفیدتون
پاسخاگه روش پرش به حلقه رو بدون استفاده از goto هم ذکر میکردید خیلی بهتر بود
ممنون