1
resposta

Tanto no meu código quanto no fornecido na aula quando digitamos uma opção inválida, ao invés dele retornar para o menú ele está saindo do programa.

import 'dart:io';

void main() {
 
 List<String> notas = <String>[];
 programaNotas(notas); 
 
}

String capturaComando(){
  List<String> comandos = <String>["1", "2", "3"];
  String? entrada = "";  
  print("Digite 1 para Adicionar Nota | Digite 2 para Consultar Notas | Digite 3 para Sair");
  entrada = stdin.readLineSync();
  if(entrada == null || !comandos.contains(entrada)){
    print("Comando inválido. Tente novamente.");
    capturaComando();
  }
  return entrada!; 
}

List<String> adicionaNota(List<String> notas){
  String? nota = "";
  print("Digite a nota que quer armazenar.");
  nota = stdin.readLineSync();  
  if(nota == null || nota.isEmpty){
    print("A nota não pode ser vazia. Por favor, digite a nota que quer armazenar.");
    adicionaNota(notas);
  }
  notas.add(nota!);
  return notas;
}

void consultaNotas(List<String> notas){
  for(var i = 0; i < notas.length; i++){
    print(notas[i]);
  }
}

void programaNotas(List<String> notas){
  String comando = capturaComando();

  switch(comando){
    case "1":
    adicionaNota(notas);
    programaNotas(notas);
    break;

    case "2":
    consultaNotas(notas);
    programaNotas(notas);
    break;

    case "3":
    print("Até logo!");
    break;
  }
}

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta

Olá, estudante, como vai?

O comportamento que você descreveu ocorre porque na função capturaComando a chamada recursiva não retorna o valor para a execução original da função. Isso faz com que, mesmo depois de inserir um valor válido, o programa finalize ao voltar ao menu.

Para resolver, basta retornar o resultado da nova chamada. Por exemplo, em capturaComando, use return capturaComando(); dentro do if, assim o valor correto é devolvido à função principal.

if (entrada == null || !comandos.contains(entrada)) {
  print("Comando inválido. Tente novamente.");
  return capturaComando();
}

Com essa alteração, o programa continuará funcionando normalmente e retornará ao menu quando o usuário inserir um valor inválido.

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