اذهب إلى المحتوى

السؤال

نشر

سلام عليكم

في الكود التالي:

let questions = [
    ['Find X if 2X + 4 = 10', ['4', '3', '1', '5'], '3'],
    ['Find X if 5X + 4 = 24', ['4', '3', '1', '5'], '4'],
    [`What's the value of 12*3+4*2`, ['80', '168', '132', '20'], '20'],
    ['IF Y = 2X and X+Y = 6 Find X-Y', ['0', '4', '-2', '2'], '-2'],
    ['IF the area of square = 16 What is the length of its chord', ['4.33', '3.5', '5.65', '5.1'], '5.65']
]
function main(){
    let userAnswer, userRes = 0;
    for(let i in questions){
        do{
            userAnswer = prompt(showQuestions(questions[i][0], Number(i)+1));
            
            if(userAnswer === null){
                if(confirm('Exit Quiz')){
                    if(confirm('Show Your Result')) alert(`You Got ${userRes}/${questions.length}`);
                    return null;
                }
                else continue;
            }else if(userAnswer === ""){ continue;}
            else if(userAnswer === "h" || userAnswer === "H"){
                // IDK
            }

        }while(isValidAnswer(userAnswer));

        if(userAnswer == questions[i][2]){
            alert("Right"); userRes++; continue;
        }alert("Wrong");
    }
    alert(`You Got ${userRes}/${questions.length}`);
}


function showQuestions(ques, quesNum){
    // let display = '';
    // display += `${ques}\n`;

    // for(let i=1; i<=4; i++){
    //     display += `- ${answers[i-1]}\n`;
    // }

    return (`${quesNum}) ${ques}\n Enter h for help`);
}

function isValidAnswer(usrAns){
    if(isNaN(Number(usrAns))){
        alert("VALID INPUT")
        return 1;
    }return 0;
}

main();

أريد أن يظهر اجابات الأربعه الموجوده في الindex الثاني لكل سؤال اذا أدخل المستخدم h او H اختصارا ل help. حاولت لكن فشلت.

و به خطأ لا أستطيع تنقيحه و هو أن المستخدم اذا أدخل نص فارغ عند الأجابه علي السؤال, يحتسبها خطأ بأعتبار أن undefined لا تساوي الindex الثالث للسؤال في المصفوفه.

Recommended Posts

  • 0
نشر

المشكلة هنا تكمن في التعامل الخاطئ مع حالتين خاصتين داخل حلقة do-while والتي تتحكم بدورها في إدخال إجابة المستخدم.

فأولا عند إدخالك ل "h" أو "H" للمساعدة فالكود كان يحتوي على تعليق // IDK فقط دون أي تنفيذ فعلي لعرض الخيارات المتاحة من المصفوفة:

questions[i][1]

مما يعني أن طلب المساعدة كان يتم تجاهله تماما وثانيا المشكلة الأكبر كانت في منطق دالة isValidAnswer() وتفاعلها مع شرط الحلقة، حيث أن هذه الدالة كانت ترجع 0 (false) للنص الفارغ، مما يجعل شرط:

while(isValidAnswer(userAnswer))

يتوقف ويخرج من الحلقة، فيتم تمرير النص الفارغ " " إلى مقارنة الإجابة:

if(userAnswer == questions[i][2])

حيث يُعتبر إجابة خاطئة حتماً.

ولحل المشكلة سيتطلب إعادة هيكلة منطق التحقق بحيث تصبح دالة isValidAnswer() ترجع true لجميع الحالات التي تتطلب البقاء في الحلقة (النص الفارغ، المساعدة، الإدخال غير الصالح) و false فقط للإجابات الصالحة القابلة للتقييم، مع إضافة دالة showHelp() لعرض الخيارات من questions[i][1] عند طلب المساعدة، وإضافة continue بعد كل حالة خاصة للعودة إلى بداية الحلقة دون الخروج إلى فحص صحة الإجابة، بهذا الشكل يتم ضمان أن المستخدم لا يخرج من حلقة السؤال إلا بإدخال إجابة صالحة أو اختيار الخروج من الاختبار كالتالي:

else if(userAnswer === "h" || userAnswer === "H"){
    alert(`Options:\n1) ${questions[i][1][0]}\n2) ${questions[i][1][1]}\n3) ${questions[i][1][2]}\n4) ${questions[i][1][3]}`);
    continue;
}

function isValidAnswer(usrAns){
    if(usrAns === "" || usrAns === "h" || usrAns === "H"){
        return 1;
    }
    if(isNaN(Number(usrAns))){
        alert("VALID INPUT")
        return 1;
    }
    return 0;
}

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...