• 0
  • مالي خلق
  • أتهاوش
  • متضايق
  • مريض
  • مستانس
  • مستغرب
  • مشتط
  • أسولف
  • مغرم
  • معصب
  • منحرج
  • آكل
  • ابكي
  • ارقص
  • اصلي
  • استهبل
  • اضحك
  • اضحك  2
  • تعجبني
  • بضبطلك
  • رايق
  • زعلان
  • عبقري
  • نايم
  • طبيعي
  • كشخة
  • النتائج 1 إلى 3 من 3

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

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

      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
      المواضيع
      76
      شكر / اعجاب مشاركة

      رد: 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
      المواضيع
      1537
      شكر / اعجاب مشاركة

      رد: cin.get and EOF

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

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

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

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

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