Cpp-04-03 - بررسی حلقه‌ها (While)

بازدید : 25

0

اشتراک

Cpp-04-03 - بررسی حلقه‌ها (While)

توضیحات :

درسی که اینجا پوشش دادید دربارهٔ حلقهٔ while بود؛ این پاسخ یک خلاصهٔ منظم، خوانا و مناسب سئو از همان مطلب است — شامل تعریف، زمان استفاده، مثال کد (C++)، نکات احتیاطی و بهترین روش‌ها.


چی هست و چطور نوشته می‌شود؟

while ساختاری برای تکرارِ «تا وقتی که یک شرط برقرار است» است.

قالب کلی (C++):

while (شرط) { // بدنهٔ حلقه — این دستورات هر بار اجرا می‌شوند }

توضیح ساده: تا وقتی شرط نتیجه‌اش true باشد، بدنهٔ حلقه تکرار می‌شود. وقتی شرط false شد، اجرا از ادامهٔ برنامه (خط بعد از حلقه) ادامه پیدا می‌کند.


کی از while استفاده کنیم و کی از for؟

  • از for استفاده کن وقتی «تعداد گردش‌ها» را می‌دانید یا یک شمارش‌گر واضح دارید (مثلاً ۱۰ بار، یا تا اندازهٔ مجموعه‌ای از پیش معلوم).
    مثال: پیمایش بر اساس اندیس از 0 تا N-1.

  • از while استفاده کن وقتی «نمی‌دانی چند بار باید بچرخد»، اما می‌دانی شرط تداوم چیست.
    مثال: منتظر دریافت ورودی مشخص از کاربر، یا دریافت داده تا رسیدن به وضعیت پایان.

نکته: هر دو قابل‌معادل‌اند؛ ولی for برای شمارش روشن‌تر و compact است، while برای شرایط مبتنی بر وضعیت مناسب‌تر است.


مثال عملی (C++)

دو مثال کوتاه: یکی که خطا دارد (حلقهٔ بی‌نهایت)، و یکی صحیح.

مثال نادرست — حلقهٔ بی‌نهایت (فراموش کردن گام):

int a = 0; while (a < 10) { std::cout << "tabsmedia.com\n"; // فراموش شده: a++; => نتیجه: حلقه بی‌نهایت }

اگر مقدار a تغییر نکند، شرط همیشه true باقی می‌ماند → CPU درگیر و برنامه قفل می‌شود.

مثال صحیح — کنترل گام درون حلقه:

#include <iostream> int main() { int a = 0; while (a < 10) { std::cout << "tabsmedia.com\n"; a++; // گام: افزایش a؛ در غیر این صورت حلقه بی‌نهایت می‌شود } return 0; }

این حلقه دقیقاً ۱۰ بار اجرا می‌شود (a از 0 تا 9).


نکات ایمنی و تله‌های رایج

  • فراموش کردن بروزرسانی متغیر کنترلی → حلقهٔ بی‌نهایت. همیشه مطمئن شو شرط در جایی تغییر می‌کند.

  • شرط اولیه باید بررسی شود: اگر مقدار اولیه طوری باشد که شرط از ابتدا false باشد، حلقه یک‌بار هم اجرا نمی‌شود.

  • موقع تعریف متغیر کنترلی: در while معمولاً متغیر را بیرون حلقه تعریف می‌کنیم (برعکس for که داخل پرانتز می‌شود).

  • گام متفاوت از ۱: می‌توانی a += 5 یا a -= 2 و غیره بزنی؛ منطق همان است.

  • پایداری شرط با ورودی‌های دینامیک: اگر شرط متکی به ورودی کاربر یا دیتابیس است، حتماً ورودی‌ها را اعتبارسنجی کن تا حلقه نامتناهی یا غیرقابل‌اتکا نشود.

  • استفاده از شرط‌های مرکب: می‌توان از عملگرهای منطقی (&&, ||, !) برای شروط پیچیده‌تر استفاده کرد.


بهترین شیوه‌ها (Best Practices)

  1. همیشه گام را مشخص کن (اضافه/کاهش متغیر) یا از شرطی استفاده کن که در بدنه امکان خروج فراهم باشد.

  2. از مقداردهی اولیهٔ واضح استفاده کن تا رفتار قابل‌پیش‌بینی باشد (int a = 0;).

  3. ورودی‌ها را اعتبارسنجی کن (مثلاً از کاربر عدد می‌پذیریم؛ اگر منفی یا ۰ می‌تواند مشکل‌ساز باشد، چک کن).

  4. برای حلقه‌هایی که ممکن است طولانی شوند، شرایط خروج اضطراری در نظر بگیر (مثلاً شمارندهٔ محدودیت یا timeout).

  5. در کد آموزشی یا مثال‌ها از newline (\n) یا std::endl استفاده کن تا خروجی خواناتر باشد.

  6. اگر حلقه حالت پیچیده‌ای دارد، مستند و کامنت‌گذاری کن تا خودت یا دیگران در آینده راحت‌تر اشکال‌زدایی کنند.


جمع‌بندی

  • while برای تکرار بر پایهٔ شرط است؛ for بیشتر برای تکرار بر پایهٔ شمارش.

  • اصلی‌ترین خطر while، حلقهٔ بی‌نهایت است (وقتی شرط هرگز false نمی‌شود).

  • برای نوشتن حلقهٔ while ایمن: مقداردهی اولیه، شرط معقول و به‌روزرسانی گام را فراموش نکن.

لطفا برای گذاشتن نظرات خود وارد شوید

نظرات شما عزیزان