البرمجة

تحسين كود البرمجة في C للتفاعل مع المدخلات بشكل أفضل

السياق البرمجي الذي قدمته يعتبر شيئًا شائعًا في لغة البرمجة C، ولكن المشكلة التي واجهتك تتعلق بالمدخلات من المستخدم وكيف يتعامل البرنامج معها. لنقم بتحليل الكود وفهم السبب وراء ظهور الناتج الذي واجهته.

في البداية، يقوم البرنامج بطباعة رسالة تطلب من المستخدم إدخال حرف. ثم يستخدم حلقة while لقراءة الحرف المدخل من المستخدم باستخدام scanf ويقوم بالتحقق إذا كان الحرف هو ‘b’ أو ‘r’ أو ‘k’. إذا كان الحرف ‘b’، يتم طباعة “B”، وإذا كان ‘r’، يتم طباعة “R”، وهكذا. ولكن إذا لم يكن الحرف هو أحد هذه الحروف، يتم طباعة “Game over” ويتم تعيين قيمة validSecret إلى 1، مما يؤدي إلى انتهاء الحلقة.

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

فيما يلي تعديل لجزء من الكود لتجنب هذه المشكلة:

c
while(validSecret == 0){ scanf(" %c", &secretLetter); // أضفت مسافة بيضاء هنا لتجاوز الأحرف الزائدة if(secretLetter == 'b'){ printf("B\n"); } else if (secretLetter == 'r'){ printf("R\n"); } else if (secretLetter == 'k'){ printf("K\n"); } else { printf("Game over\n"); validSecret = 1; } }

بإضافة المسافة بيضاء في scanf(" %c", &secretLetter)، يجب أن يتم التعامل بشكل أفضل مع الأحرف الزائدة، ويجب أن تلاحظ أن هذا التعديل قد يؤثر على كيفية التعامل مع المدخلات المستقبلية في البرنامج.

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

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

أولًا وقبل كل شيء، يبدو أن الكود يعمل بشكل أساسي على تحقيق هدفه، وهو قراءة حرف من المستخدم وطباعة رسائل مختلفة وفقًا للحرف المدخل. ومع ذلك، يُلاحظ أنه عند إدخال حرف يفي بالشروط، يتم طباعة الرسالة الصحيحة وفورا يتم طباعة “Game over”. قد تكون هذه السلوكية المرغوبة، ولكن إذا كنت ترغب في تغيير هذا السلوك، يمكنك إعادة النظر في كيفية التحكم في انتهاء البرنامج بناءً على إدخال المستخدم.

ثانيًا، يمكن أيضًا إضافة بعض التحسينات الهيكلية والتنظيمية إلى الكود. على سبيل المثال، يمكن تعريف مصفوفة للأحرف والرسائل المقابلة لها، مما يجعل الكود أكثر قابلية للصيانة والتوسيع في المستقبل. على سبيل المثال:

c
#include int main() { printf("----------------CALC--------------\n"); printf("(1) Type in a letter to get a secret message: "); char validLetters[] = {'b', 'r', 'k'}; char secretMessages[][10] = {"B", "R", "K"}; char secretLetter; scanf(" %c", &secretLetter); int isValid = 0; for (int i = 0; i < sizeof(validLetters) / sizeof(validLetters[0]); ++i) { if (secretLetter == validLetters[i]) { printf("%s\n", secretMessages[i]); isValid = 1; break; } } if (!isValid) { printf("Game over\n"); } return 0; }

في هذا المثال، يتم استخدام مصفوفة لتخزين الأحرف الصالحة ومصفوفة أخرى لتخزين الرسائل المرتبطة بها. ثم يتم استخدام حلقة for للبحث عن الحرف المدخل داخل المصفوفة وطباعة الرسالة المقابلة إذا تم العثور على تطابق.

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

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

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!