البرمجة

تعامل برمجي مع دخل المستخدم

السبب في نجاح هذا البرنامج يعود إلى الطريقة التي يتعامل بها مع دخل المستخدم وكيفية تفاعله معه. دعني أشرح لك العملية خطوة بخطوة.

أولاً وقبل كل شيء، يقوم البرنامج بتضمين المكتبات اللازمة للعمليات القياسية في لغة البرمجة C، وهي stdio.h و stdlib.h.

ثم يبدأ التنفيذ الفعلي للبرنامج في الدالة main().

يتم إنشاء متغيرات لتخزين قيم المداخلات والمخرجات، حيث dend تمثل القسمة، dsor تمثل المقسوم عليه، وهناك متغيران آخران لتخزين الناتج والباقي على التوالي.

ثم يأتي دور الحلقة while التي تستمر في التكرار ما لم يتم إدخال حرف “n” كجواب على السؤال “continue? (y/n)”.

في كل دورة من الحلقة، يُطلب من المستخدم إدخال القسمة والمقسوم عليه. يتم ذلك باستخدام دالة scanf() التي تقوم بقراءة الإدخال من المستخدم وتخزينه في المتغيرات dend و dsor.

بعد ذلك، يتم حساب القسمة والباقي باستخدام العمليات الرياضية المناسبة وتخزينها في المتغيرات q و r على التوالي.

ثم يُطلب من المستخدم مرة أخرى مواصلة التشغيل عن طريق طباعة الرسالة “continue? (y/n)” وقراءة الإجابة باستخدام دالة scanf().

هنا يأتي الجزء الذي يسبب القلق بالنسبة لك. لقد لاحظت أنه تم استخدام دالة scanf() مرتين متتاليتين لقراءة الإجابة عن السؤال. هذا لأن دالة scanf() تترك محارف جديدة في ذاكرة التخزين المؤقتة (الـ buffer) بعد قراءة القيم العددية، وهذا يؤثر على القراءة التالية للمحرف. للتغلب على هذه المشكلة، يتم إضافة مساحة بيضاء (whitespace) في النمط القريب من المعروف باسم “trick”. وبهذه الطريقة، يتم قراءة المحرف بشكل صحيح.

أخيرًا، يتم إيقاف التنفيذ عن طريق استدعاء دالة system(“PAUSE”)، والتي تعرض رسالة وتنتظر استجابة من المستخدم قبل إغلاق النافذة.

إذا كان لديك مزيد من الأسئلة حول كيفية عمل هذا البرنامج أو أي جانب آخر من البرمجة، فلا تتردد في طرحها!

المزيد من المعلومات

بالطبع، دعني أكمل المقال لتوضيح بعض النقاط الإضافية وتوجيه بعض النصائح.

من المهم أن نفهم كيف يتفاعل البرنامج مع المدخلات التي يقدمها المستخدم. عندما يتم استدعاء دالة scanf() لقراءة الأرقام الصحيحة، فإنها تنتظر إدخال المستخدم وتخزين القيمة في المتغيرات المحددة. ومع ذلك، عندما تقرأ scanf() المحرف الموجود في ذاكرة التخزين المؤقتة بعد ذلك، فإنها تأخذ المحرف الفارغ الذي تم تركه في ذاكرة التخزين المؤقتة من القراءة السابقة للرقم. هذا يعني أن البرنامج قد يتخطى السؤال الثاني “continue? (y/n)” بدون إعطاء المستخدم فرصة للإجابة.

لتجنب هذه المشكلة، يمكن استخدام دالة getchar() بدلاً من scanf() لقراءة المحرف. تعمل getchar() على قراءة حرف واحد فقط من الإدخال، بدون ترك أي محارف في ذاكرة التخزين المؤقتة. لذلك، يمكن استخدامها لقراءة الحرف المتبقي بعد استخدام scanf() للأرقام.

هذا هو الكود المعدل بشكل بسيط باستخدام getchar():

c
#include #include int main() { int dend, dsor, q, r; char c; while(c != 'n') { printf("enter dividend: "); scanf("%d", &dend); printf("enter divisor: "); scanf("%d", &dsor); q = dend / dsor; r = dend % dsor; printf("quotient is %d\n", q); printf("remainder is %d\n", r); getchar(); // Consume newline character printf("continue? (y/n)\n"); c = getchar(); } system("PAUSE"); return 0; }

باستخدام getchar()، يتم قراءة المحرف المتبقي بشكل صحيح دون ترك أي محارف غير مرغوب فيها في ذاكرة التخزين المؤقتة.

في النهاية، يمكن توسيع فهمك ومهاراتك في البرمجة عبر القراءة والتجربة. حاول تحليل وتعديل البرنامج بنفسك، واستكشاف كيفية تحسينه وتطويره بمزيد من الميزات والتعلم.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر