为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

浮云间 2023-07-06 10:06:41
在下面的程序中,我创建了两个文件,一个是导出模块,另一个文件是在 switch case 中使用该模块,我的目标是使用 switch case 制作一个基本的计算器程序,其中允许用户输入超过有一次,为了做到这一点,我使用了一个无限的 while 循环,但问题是在 while(1) 之后的 Prompt.get() 行,程序的控制没有停止从用户那里获取输入,并且它继续无限循环。为了具体指出该行,我对其发表了评论。数学.jsmodule.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;                }            })        });
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

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

}



查看完整回答
反对 回复 2023-07-06
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信