J'essaie de construire une simple calculatrice dans node.js qui devrait également valider les entrées. Ci-dessous le code suivant
process.stdout.write('A simple calculator created using node.js \n');
var inputs = ['Please enter your first number','Please enter the second number','Please enter the operator'];
var output1 = [];
function ask(i) {
process.stdout.write(`${inputs[i]}`);
process.stdout.write(" : ");
}
ask(0);
process.stdin.on('data',(data)=> {
if(typeof data != "number"){
console.log(ask(0));
} else {
output1.push(data);
console.log('The given input is ' + output1);
}
}
);
Je voudrais que la console revienne à la fonction ask() si mon entrée n'est pas un nombre. Ci-dessous devrait être la sortie idéale
Sortie : Veuillez entrer votre premier numéro : p Veuillez entrer votre premier numéro : 1 L'entrée donnée est 1
Je sais qu'il y a des défauts dans mon code, mais je ne sais pas comment les corriger. S'il vous plaît aider.
1 réponse
Le rappel à process.stdin.on
recevra l'objet Buffer
comme argument.
process.stdin.on('data', data => {
/** data will be buffer. */
});
Vous devrez convertir le Buffer
en String
en utilisant la méthode toString()
. Une fois que vous avez le String
, vous pouvez essayer d'analyser la chaîne en un nombre (Int ou Float) en utilisant les méthodes de la classe Number
( Number.parseInt
ou Number.parseFloat
). Vous pouvez ensuite vérifier si le numéro que vous avez analysé était un numéro valide ou non en utilisant la méthode Number.isNaN
.
Voici à quoi ressemblerait le code :
process.stdin.on('data', data => {
var string = data.toString();
var number = Number.parseFloat(string);
if (Number.isNaN(number)) {
ask(0);
} else {
output1.push(number);
console.log('The given input is ' + output1);
}
});
Pour vous donner un indice sur la façon de terminer l'ensemble de la calculatrice, je créerais un indexOfInput
et le maintiendrais sur les entrées :
var indexOfInput = 0;
ask(indexOfInput);
process.stdin.on('data', data => {
var string = data.toString();
var number = Number.parseFloat(string);
if (Number.isNaN(number)) {
ask(indexOfInput);
} else {
output1.push(number);
console.log('The given input is ' + output1);
// Current input taken successfully. Let's take the next input
indexOfInput++;
ask(indexOfInput);
}
});
Vous devrez ajouter des modifications supplémentaires pour que cela fonctionne complètement. Vous aurez besoin de quelque chose comme ça quelque part dans votre code.
if (indexOfInput <= 1) {
/** expecting number */
} else if (indexOfInput === 2) {
/** expecting an operator */
} else {
/** all the inputs taken. process the inputs array */
}
J'espère que cela t'aides! :)
Questions connexes
De nouvelles questions
javascript
Pour des questions concernant la programmation dans ECMAScript (JavaScript / JS) et ses divers dialectes / implémentations (hors ActionScript). Veuillez inclure toutes les balises pertinentes dans votre question; par exemple, [node.js], [jquery], [json], etc.