Kodax

حلقة while — أساسيات C++

حلقتا while و do-while

while

تكرر طالما الشرط صحيح، وتفحصه قبل كل دورة (قد لا تُنفَّذ أبداً):

int balance = 1000, years = 0;
while (balance < 2000) {
    balance = balance * 107 / 100;
    years++;
}

استخدمها عندما لا تعرف عدد التكرارات مسبقاً.

do-while

تنفذ الكتلة مرة واحدة على الأقل، ثم تفحص الشرط:

int choice;
do {
    cout << "1) تشغيل  0) خروج: ";
    if (!(cin >> choice)) break;   // إدخال فاشل: اخرج
    // ...
} while (choice != 0);

مناسبة للقوائم وطلب الإدخال حتى يكون صحيحاً. لاحظ الفاصلة المنقوطة بعد while (...).

⚠️ القوائم التفاعلية والإدخال الفاشل

إذا فشلت cin (المستخدم كتب حرفاً أو لا يوجد إدخال)، تبقى في حالة فشل، والحلقة التي تنتظر قيمة معينة تدور للأبد. لهذا يجب أن تفحص نجاح القراءة داخل أي حلقة إدخال، كما في المثال أعلاه.

الحلقة اللانهائية المقصودة

while (true) { ... if (done) break; } شائعة ومقبولة، بشرط وجود break يمكن الوصول إليه.

for أم while؟

| for | while |

|---|---|

| عدد مرات معروف أو المرور على مجموعة | التكرار حتى يتحقق شرط |

| العدّاد جزء من الحلقة | الحالة تتغير داخل الجسم بطرق مختلفة |

تمرين

اكتب برنامجاً يقرأ أرقاماً حتى يُدخل المستخدم 0 أو يفشل الإدخال، ثم يطبع مجموعها وأكبرها. ثم اكتب حلقة تحسب عدد خانات رقم صحيح (بالقسمة على 10 حتى يصبح 0).

#include <iostream>
using namespace std;

int main() {
    // while: عدد التكرارات غير معروف مسبقاً
    int balance = 1000;
    int years = 0;
    while (balance < 2000) {
        balance = balance * 107 / 100;   // فائدة 7% سنوياً
        years++;
    }
    cout << "يتضاعف المبلغ بعد " << years << " سنة" << endl;

    // عدد خانات رقم
    int number = 90817;
    int digits = 0;
    do {
        number /= 10;
        digits++;
    } while (number != 0);
    cout << "عدد الخانات: " << digits << endl;

    // قراءة أرقام حتى 0 أو فشل الإدخال (آمنة بدون إدخال)
    int value;
    int sum = 0;
    int count = 0;
    cout << "أدخل أرقاماً (0 للإنهاء): ";
    while (cin >> value && value != 0) {
        sum += value;
        count++;
    }
    cout << "\nقرأت " << count << " أرقام، مجموعها " << sum << endl;

    // قائمة تفاعلية تتوقف عند فشل الإدخال
    int choice = 0;
    do {
        cout << "1) تحية  2) وقت  0) خروج: ";
        if (!(cin >> choice)) {
            cout << "\nلا يوجد إدخال صالح، إنهاء القائمة" << endl;
            break;
        }
        switch (choice) {
            case 1: cout << "مرحباً!" << endl; break;
            case 2: cout << "حان وقت البرمجة" << endl; break;
            case 0: cout << "إلى اللقاء" << endl; break;
            default: cout << "خيار غير معروف" << endl;
        }
    } while (choice != 0);

    return 0;
}
اختبر فهمك