النتائج 1 إلى 3 من 3

الموضوع: cin.get and EOF

  1. #1
    التسجيل
    28-08-2001
    الدولة
    <=^=^==^=^=>
    المشاركات
    7,688

    cin.get and EOF

    السلام عليكم ورحمة الله وبركاته
    عمل البرنامج:
    يولد الرنامج عددين (1-9) ويطلب من المستخدم إدخال ناتج ضربهما.
    يعرض رسالة مختارة عشوائيا من ثلاث رسائل. (تختلف هذه الرسائل تبعا لصحة الإجابة).
    بعد عشرة أسئلة يعرض نسبة مئوية لأداء المستخدم.
    يتوقف البرنامج في حالة إدخال رمز EOF :
    (Ctrl+Z).

    المشاكل:
    1-البرنامج لا يتوقف بإدخال EOF، بل يخرج باستمرار وبلا نهاية إحدى الرسائل الثلاث الخاصة بالإجابة الخطأ.
    2-عند استعمال in=cin.get البرنامج لا يقرأ القيمة المدخلة بواسطة المستخدم.
    كود PHP:
    # include <iostream>
    # include <cstdlib>
    # include <ctime>

    using namespace std;

    void main()
    {
        
    int n1,n2;
        
    int res;
        
    int in;
        
    int countGlob 1;
        
    int countWrong 0;
        
    int test;
        
    int rcase;
        
    bool clear false;

        
    srand(time(0));

        
    n1 = (rand()%9)+1;
        
    n2 = (rand()%9)+1;
        
    res n1*n2;

        
    cout << "How much is " << n1 << " times " << n2 << endl;
        
    cin >> in;


        while ((
    in)!=EOF)
        {
            
    rcase = (rand()%3)+1;

            if (
    in==res)
            {
                
    test=1;
            }
            else
            {
                
    test=2;
            }

            switch(
    test)
            {
                case 
    1:

                    
                    if (
    rcase==1)
                    {
                        
    cout << "Great job, keep it up." << endl;
                    }
                    else
                        if (
    rcase==2)
                        {
                            
    cout << "Correct!!" << endl;
                        }
                        else
                        {
                            
    cout << "Right, keep up the good work." << endl;
                        }

                    if (
    countGlob==10)
                    {
                        
    cout << "Your percentage is " 
                                                                      
    << (static_cast<double>(10-countWrong)/countGlob)*100 << "%."<< endl;
                        
                        
    countWrong 0;
                        
    countGlob 0;
                    }
                        
                    
    n1 = (rand()%9)+1;
                    
    n2 = (rand()%9)+1;
                    
    res n1*n2;

                    
    cout << "How much is " << n1 << " times " << n2 << endl;
                    
    cin >> in;
                    
                    
    clear false;

                    
    countGlob++;

                    break;

                case 
    2:
                    if (
    rcase==1)
                    {
                        
    cout << "Wrong, try again." << endl;
                    }
                    else
                        if (
    rcase==2)
                        {
                            
    cout << "Too bad, give it another shot." << endl;
                        }
                        else
                        {
                            
    cout << "No, don't give up!" << endl;
                        }
                        
                    if (!
    clear)
                    {
                        
    countWrong++;
                        
    clear true;
                    }
                    
                    
    cin >> in;


                    break;

            }
        }

    كود PHP:
    # include <iostream>
    # include <cstdlib>
    # include <ctime>

    using namespace std;

    void main()
    {
        
    int n1,n2;
        
    int res;
        
    int in;
        
    int countGlob 1;
        
    int countWrong 0;
        
    int test;
        
    int rcase;
        
    bool clear false;

        
    srand(time(0));

        
    n1 = (rand()%9)+1;
        
    n2 = (rand()%9)+1;
        
    res n1*n2;

        
    cout << "How much is " << n1 << " times " << n2 << endl;


        while ((
    in=cin.get())!=EOF)
        {
            
    rcase = (rand()%3)+1;

            if (
    in==res)
            {
                
    test=1;
            }
            else
            {
                
    test=2;
            }

            switch(
    test)
            {
                case 
    1:

                    
                    if (
    rcase==1)
                    {
                        
    cout << "Great job, keep it up." << endl;
                    }
                    else
                        if (
    rcase==2)
                        {
                            
    cout << "Correct!!" << endl;
                        }
                        else
                        {
                            
    cout << "Right, keep up the good work." << endl;
                        }

                    if (
    countGlob==10)
                    {
                        
    cout << "Your percentage is " 
                             
    << (static_cast<double>(10-countWrong)/countGlob)*100 << "%."<< endl;
                        
                        
    countWrong 0;
                        
    countGlob 0;
                    }
                        
                    
    n1 = (rand()%9)+1;
                    
    n2 = (rand()%9)+1;
                    
    res n1*n2;

                    
    cout << "How much is " << n1 << " times " << n2 << endl;

                    
                    
    clear false;

                    
    countGlob++;

                    break;

                case 
    2:
                    if (
    rcase==1)
                    {
                        
    cout << "Wrong, try again." << endl;
                    }
                    else
                        if (
    rcase==2)
                        {
                            
    cout << "Too bad, give it another shot." << endl;
                        }
                        else
                        {
                            
    cout << "No, don't give up!" << endl;
                        }
                        
                    if (!
    clear)
                    {
                        
    countWrong++;
                        
    clear true;
                    }
                    


                    break;

            }
        }

    الكود الأول يتعرض للمشكلة الأولى، والثاني للثانية، والاختلاف بينهما في استعمال cin.get

  2. #2
    التسجيل
    11-04-2002
    الدولة
    سوريا
    المشاركات
    760

    رد: cin.get and EOF

    السلام عليكم

    أخي الكريم -Cheetah-

    لقد حللت بعض المشاكل الموجودة في البرنامج و كانت كالتالي :

    1 – يجب عليك أن تضع أوامر إخراج المعدل بعد اختبار قيمة المتغير test أي بعد switch .. بالإضافة إلى ضرورة أيضاً طلب النتيجة التالية لضرب عددين قبل انتهاء while .

    2 – قمت بإضافة متغير عام لأجل عدد الأسئلة و سنزيد هذا العداد في كل مرة نطرح سؤال و ذلك أيضاً بعد switch .. و القيمة الابتدائية لهذا العداد هي الواحد لأننا طلبنا أول سؤال قبل الحلقة while .

    3 – من أجل حساب المعدل قمت بتغيير المعادلة بحيث أصبحت عدد الأجوبة الصحيحة ( countGlob ) مع تقسيمها على عدد الأسئلة و هو count – 1 لأننا سنزيد العداد ثم سنختبره و لأننا نريد 10 أسئلة فستكون قيمة count لذلك تساوي 11 .

    4 – قمت بترتيب بسيط لطباعة النصوص و وضع سطر من أجل عملية إدخال العشرة أرقام التالية مع إضافة رقم السؤال عند طرحه .

    5 – من أجل انهاء البرنامج .. لاحظ أن EOF هي ثابت له القيمة ( 1- ) و بالتالي فور ادخال هذه القيمة سينتهي البرنامج .. و إذا كنت تريد كتابة المعدل بعد إدخال ( 1- ) و قبل انتهاء البرنامج و الخروج منه فأضف أوامر حساب المعدل بعد نهاية الحلقة while و لكن مع الانتباه إلى عدم التقسيم على count – 1 بل على 10 .

    هذا هو البرنامج :

    كود PHP:
    # include <iostream> 
    # include <cstdlib> 
    # include <ctime> 
     
    using namespace std
     
    void main() 

        
    int n1,n2
        
    int res
        
    int in
        
    int count 1;
        
    int countGlob 0
        
    int countWrong 0
        
    int test
        
    int rcase
        
    bool clear false
     
        
    srand(unsignedtime(0) )); 
        
    n1 = (rand()%9)+1
        
    n2 = (rand()%9)+1
        
    res n1*n2
     
        
    cout << count << ". How much is " << n1 << " times " << n2 << endl
        
    cin >> in
     
        while ( 
    in != EOF 
        { 
            
    rcase = (rand()%3)+1
            if (
    in==res
            { 
                
    test=1
            } 
            else 
            { 
                
    test=2
            } 
            switch(
    test
            { 
                case 
    1
     
                    if (
    rcase==1
                    { 
                        
    cout << "Great job, keep it up.\n" << endl
                    } 
                    else 
                    {
                        if (
    rcase==2
                        { 
                            
    cout << "Correct!!\n" << endl
                        } 
                        else 
                        { 
                            
    cout << "Right, keep up the good work.\n" << endl
                        } 
                    }
     
                    
    clear false
                    
    countGlob++; 
                    break; 
                case 
    2
                    if (
    rcase==1
                    { 
                        
    cout << "Wrong, try again.\n" << endl
                    } 
                    else 
                        if (
    rcase==2
                        { 
                            
    cout << "Too bad, give it another shot.\n" << endl
                        } 
                        else 
                        { 
                            
    cout << "No, don't give up!\n" << endl
                        } 
     
                    if (!
    clear
                    { 
                        
    countWrong++; 
                        
    clear true
                    } 
                    break; 
            } 
     
            
    count++;
     
            if (
    count==11
            { 
                
    cout << "Your percentage is "  
                     
    << (static_cast<double>(countGlob) / (count-1) ) * 100 << "%."<< endl
         
    << "==================================\n"
     
                
    countWrong 0
                
    countGlob 0
                 
    count 1;
            } 
     
            
    n1 = (rand()%9)+1
            
    n2 = (rand()%9)+1
            
    res n1*n2
            
    cout << count << ". How much is " << n1 << " times " << n2 << endl;
            
    cin >> in
     
        } 


    هذا حل سريع لمشكلة البرنامج .. بالتوفيق
    لا إله إلا الله
    مشروع لتعليم أساسيات لغة الـ ++C :
    -
    موضوع لتعليم الفيجوال بيسك 6 :

  3. #3
    التسجيل
    28-08-2001
    الدولة
    <=^=^==^=^=>
    المشاركات
    7,688

    رد: cin.get and EOF

    شكرا جزيلا أخي الكريم على الجهد والمساعدة.
    إخراج تلك الأجزاء من الكود إلى خارج بناء switvh شكل فارقا كبيرا وسهل الكثير.

    انتبهت الآن إلى أن -1 هو EOF.

    شكرا جزيلا مرة أخرى.

ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •