首页 > 解决方案 > 控制不会停止接受输入,而是在无限循环中运行

问题描述

在下面的程序中,我创建了两个文件,一个用于导出模块,另一个文件在开关盒中使用此模块,我的目标是使用开关盒制作一个基本的计算器程序,允许用户提供超过曾经,为了做到这一点,我使用了无限循环,但问题出在 prompt.get() 行,就在 while(1) 程序控制没有停止从用户那里获取输入之后,它一直在无限循环中进行. 为了特别指出那条线,我对它发表了评论。

数学.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;
                }
            })
        });
        } 
    function onErr(err)
    {
        console.log(err);
        return 1;
    }

标签: javascriptnode.js

解决方案


While 循环进入无限循环,因为传入的值始终为真。根据您的要求,我建议使用递归。我在下面粘贴工作代码。让我知道它是否有效。

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
}

推荐阅读