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.

0
Arun Elangovan 22 sept. 2018 à 09:26

1 réponse

Meilleure 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! :)

1
Anand Undavia 22 sept. 2018 à 10:03