1
resposta

Está chamando os dois valores ao mesmo tempo e não puxa operaçãoo.

Não sei o motivo de estar ainda chamando os dois valores juntos. E ainda não aparecer a operação.

import 'dart:io';

void main() {
  double numeroUm = 0;
  double numeroDois = 0;
  String operacao = "";
  List<String> operacoes = <String>["+,-,/,*"];
  String? entrada = stdin.readLineSync();

  void soma() => print("Resultado: ${numeroUm + numeroDois}");
  void subtracao() => print("Resultado: ${numeroUm - numeroDois}");
  void divisao() => print("Resultado: ${numeroUm / numeroDois}");
  void multiplicacao() => print("Resultado: ${numeroUm * numeroDois}");

  void calcular() {
    switch (operacao) {
      case "+":
        soma();
        break;
      case "-":
        subtracao();
        break;
      case "*":
        multiplicacao();
        break;
      case "/":
        divisao();
        break;
      default:
        print("Operação inválida");
    }
  }

  void getOperacao() {
    print("Digite uma operação");
    entrada = stdin.readLineSync();
    if (entrada != null) {
      if (operacoes.contains((entrada))) {
        operacao = entrada!;
      }
    }
  }

  print("Digite o primeiro valor:");

  if (entrada != null && entrada != "") {
    numeroUm = double.parse(entrada!);
  }

  print("Digite o segundo valor:");
  entrada = stdin.readLineSync();
  if (entrada != null && entrada != "") {
    numeroDois = double.parse(entrada!);
  }

  
  calcular();
}

1 resposta

Olá, Bruna, como vai?

Seu código tem alguns pontos que precisam de ajuste para funcionar como esperado. Vamos por partes para entender o que está acontecendo e como corrigir.

Na linha 8, a lista operacoes está sendo criada com uma única string que contém todos os operadores juntos, como "+ , - , / , *", em vez de uma lista com quatro strings separadas. Por isso, a validação para saber se a operação existe não funciona, pois ela busca uma string que seja exatamente igual a uma das opções, e nesse caso a sua única opção é a string inteira. O correto é separar cada operador entre aspas duplas, por exemplo, List<String> operacoes = ["+", "-", "/", "*"].

Na linha 9, a variável entrada está sendo declarada e ao mesmo tempo está esperando o valor vindo do readLineSync, por isso os outros dois prints estão sendo chamado ao mesmo tempo. Você pode fazer a declaração dessa variável passando uma string vazia como valor, por exemplo, String? entrada = "";.

Após o print() da linha 44, não há a atualização da variável entrada recebendo o valor do readLineSync. Você pode ajustar assim:

  print("Digite o primeiro valor:");
  entrada = stdin.readLineSync();
  
  if (entrada != null && entrada != "") {
    numeroUm = double.parse(entrada!);
  }

Entre essas duas entradas, faltou chamar a função getOperacao() para receber o operador:

  print("Digite o primeiro valor:");
  entrada = stdin.readLineSync();
  
  if (entrada != null && entrada != "") {
    numeroUm = double.parse(entrada!);
  }
  
  getOperacao();  //  Falta essa chamada da função

  print("Digite o segundo valor:");
  entrada = stdin.readLineSync();
  if (entrada != null && entrada != "") {
    numeroDois = double.parse(entrada!);
  }

Com esses ajustes, o seu código deve voltar a funcionar corretamente.

Espero ter ajudado.

Siga firme nos seus estudos e conte com o fórum sempre que precisar.

Abraços :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado