控件并没有停止获取输入,而是在无限循环中运行



在下面的程序中,我创建了两个文件,一个是导出模块,另一个是在switch情况下使用这些模块。我的目标是使用switch情况制作一个基本的计算器程序,允许用户多次输入,为此我使用了一个无限while循环,但问题出现在prompt.get((行,而(1(程序的控制并没有停止接受用户的输入,它一直在无限循环中进行。为了特别指出这句话,我在上面加了一条评论

math.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.Addn2.Substractn3.Dividen4.Multiplyn5.ExitnEnter 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;
}

While循环是在无限循环中进行的,因为传入的值总是true。对于您的需求,我建议使用递归。我正在下面粘贴工作代码。如果有效,请告诉我。

const math = require('./math');
const prompt = require('prompt');
prompt.start();
console.log("n1.Addn2.Substractn3.Dividen4.Multiplyn5.ExitnEnter 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
}

最新更新