控制不会停止接受输入,并且正在无限循环中运行

在下面的程序中,我创建了两个文件,一个是导出模块,另一个文件是在 switch case 中使用该模块,我的目标是使用 switch case 制作一个基本的计算器程序,其中允许用户输入超过有一次,为了做到这一点,我使用了一个无限的 while 循环,但问题是在 while(1) 之后的 Prompt.get() 行,程序的控制没有停止从用户那里获取输入,并且它继续无限循环。为了具体指出该行,我对其发表了评论。


数学.js


module.exports={

    add:function(a,b)

    {

        return a+b;

    },

    sub: (a,b)=> a-b,

    divide: (a,b) => a/b,

    multiply: (a,b) => a*b

}



'another js file.'        


    const math=require('./math');

    const prompt=require('prompt');

    prompt.start();

console.log("\n1.Add\n2.Substract\n3.Divide\n4.Multiply\n5.Exit\nEnter your choice (1-5):\n");

    while(1)

    {

      //here control of program is not stopping to take input and it continuously going on in a infinite loop

        prompt.get([{

            name: 'firstNumber',

            type: 'number'

        },{

            name: 'secondNumber',

            type: 'number'

        }],function(err,result){

            if(err) {onErr(err);}

            prompt.get({

                name:'choice',

                type: 'number'

            },function(err,result){

                if(err){ onErr(err)}

                switch(result.choice)

                {

                    case 1: 

             console.log("sum is "+math.add(result.firstNumber,result.secondNumber));

                    break;

                    case 2:                       

             console.log(`Substraction is ${math.sub(result.firstNumber,result.secondNumber)}`);

                    break;

                    case 3:                        

             console.log(`Division is ${math.divide(result.firstNumber,result.secondNumber)}`);

                    break;

                    case 4: 

      console.log(`multiplication is ${math.multiply(result.firstNumber,result.secondNumber)}`)

                    break;

                    case 5: process.exit(0);

                    default: console.log("You had entered invalid choice.");

                    break;

                }

            })

        });



浮云间
浏览 67回答 1
1回答

倚天杖

While 循环进入无限循环,因为传入的值始终为 true。根据您的要求,我建议使用递归。我在下面粘贴工作代码。让我知道它是否有效。const math = require('./math');const prompt = require('prompt');prompt.start();console.log("\n1.Add\n2.Substract\n3.Divide\n4.Multiply\n5.Exit\nEnter your choice (1-5):\n");takeInputs()function takeInputs () {  prompt.get([{    name: 'firstNumber',    type: 'number'  }, {    name: 'secondNumber',    type: 'number'  }], function (err, result) {    if (err) { onErr(err); }    prompt.get({      name: 'choice',      type: 'number'    }, function (err, data) {      if (err) { onErr(err) }      switch (data.choice) {        case 1:          console.log("sum is " + math.add(result.firstNumber, result.secondNumber));          return takeInputs()        case 2:          console.log(`Substraction is ${math.sub(result.firstNumber, result.secondNumber)}`);          return takeInputs()        case 3:          console.log(`Division is ${math.divide(result.firstNumber, result.secondNumber)}`);          return takeInputs()        case 4:          console.log(`multiplication is ${math.multiply(result.firstNumber, result.secondNumber)}`)          return takeInputs()        case 5: process.exit(0);        default: console.log("You had entered invalid choice.");          return takeInputs()      }    })  });}function onErr (err) {  console.log(err);  return 1}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript