Nessa versão, Number(input) trataria entradas vazias como 0, então precisei verificar manualmente se a entrada veio vazia.
import { createInterface } from "readline";
const rl = createInterface({
input: process.stdin,
output: process.stdout,
});
const perguntar = (pergunta) => {
return new Promise((resolve) => {
rl.question(pergunta, resolve);
});
};
const validarNum = (input) => {
const num = Number(input);
if (input.trim() === "" || Number.isNaN(num) || num < 0) return null;
return num;
};
// O exercício solicita especificamente o uso de for
const somarDespesas = (listaDespesas) => {
let soma = 0;
for (let i = 0; i < listaDespesas.length; i++) {
soma += listaDespesas[i];
}
return soma;
};
const main = async () => {
try {
console.log("CALCULADORA DE DESPESAS");
console.log("Insira o valor das despesas. ['fim' para encerrar]");
const listaDespesas = [];
while (true) {
const input = await perguntar("> R$");
if (input.trim().toLowerCase() === "fim") break;
const despesa = validarNum(input);
if (despesa === null) {
console.log("Use apenas números ou finalize com 'fim'");
continue;
}
listaDespesas.push(despesa);
}
console.log(listaDespesas);
console.log(
`Total de despesas: R$${somarDespesas(listaDespesas).toFixed(2)}`,
);
} catch (error) {
console.log("Algo deu errado. Reinicie a aplicação");
} finally {
rl.close();
}
};
main();