background codoloper

Break و Continue

گاهی لازم است از یک حلقه خارج شویم بدون اینکه منتظر بررسی شرط در ابتدا یا انتهای آن باشیم.
دستور break این امکان را فراهم می‌کند و خروج زودهنگام از حلقه‌های for، while یا do (و همین‌طور از switch) را ممکن می‌سازد.
وقتی break اجرا می‌شود، بلافاصله از داخلی‌ترین حلقه یا switch خارج می‌شویم.

تابع زیر، trim، فاصله‌ها، تب‌ها و خطوط جدید انتهای رشته را حذف می‌کند و از break برای خروج از حلقه زمانی که آخرین کاراکتر غیر فاصله‌ای پیدا شود استفاده می‌کند:

 
/* trim: remove trailing blanks, tabs, newlines */
int trim(char s[])
{
    int n;
    for (n = strlen(s) - 1; n >= 0; n--)
        if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n')
            break;
    s[n + 1] = '\0';
    return n;
}

تابع strlen طول رشته را برمی‌گرداند.
حلقه‌ی for از انتهای رشته شروع می‌کند و به عقب می‌رود تا اولین کاراکتری را پیدا کند که نه فاصله است، نه تب، و نه خط جدید.
وقتی چنین کاراکتری پیدا شود، حلقه شکسته می‌شود.
اگر هیچ‌کدام پیدا نشود و n منفی شود، یعنی کل رشته از فضای خالی تشکیل شده است.
حتی در صورتی که رشته خالی باشد یا فقط شامل فاصله‌ها باشد، این رفتار درست کار می‌کند.

دستور continue هم شبیه break است اما کمتر استفاده می‌شود.
این دستور باعث می‌شود اجرای حلقه به تکرار بعدی برود.

در حلقه‌های while و do، این یعنی فوراً به قسمت بررسی شرط برمی‌گردیم،
اما در حلقه‌ی for، کنترل به بخش افزایش (increment) منتقل می‌شود.
continue فقط برای حلقه‌ها کاربرد دارد، نه برای switch.
اگر درون یک switch که داخل حلقه قرار دارد از continue استفاده کنید، باعث می‌شود حلقه از تکرار بعدی شروع شود.

به‌عنوان مثال، در قطعه‌کد زیر فقط عناصر غیرمنفی آرایه‌ی a پردازش می‌شوند و مقادیر منفی نادیده گرفته می‌شوند:

 
for (i = 0; i < n; i++)
    if (a[i] < 0) /* پرش از عناصر منفی */
        continue;
    ... /* پردازش عناصر مثبت */

دستور continue معمولاً زمانی به کار می‌رود که بخش بعد از آن در حلقه پیچیده است و برعکس کردن شرط و افزودن یک سطح تورفتگی اضافی باعث شود کد بیش از حد تو در تو و ناخوانا شود.