Tenho uma duvida, mesmo digitando um texto, numero ou mesmo apertando "enter" não consigo entrar no "else" da linha 14 e imprimir a msg no console, implementei algo errado ?
![]( )
Tenho uma duvida, mesmo digitando um texto, numero ou mesmo apertando "enter" não consigo entrar no "else" da linha 14 e imprimir a msg no console, implementei algo errado ?
![]( )
Olá, Augusto, tudo bem com você?
O problema está na forma como você está verificando se a entrada é nula ou não. No Dart, stdin.readLineSync()
retorna null apenas se houver um erro de entrada/saída ou se a entrada for fechada. Caso contrário, ele retorna uma string vazia se o usuário pressionar apenas Enter.
Já para com a situação em que o usuário digita uma letra, você pode usar a função double.tryParse()
para tentar converter a entrada em um número de ponto flutuante. Se a conversão for bem-sucedida, isso significa que o usuário digitou um número. Se não for bem-sucedida, isso significa que o usuário digitou uma letra ou algum outro caractere que não pode ser convertido em um número.
Código com as modificações:
import 'dart:io';
void main() {
String nome = 'Laranja';
double peso = 1.06;
int diasDesdeColheita = 30;
int diasParaMadura = 20;
bool isMadura = true;
print("Insira um número");
String? input = stdin.readLineSync();
if (input != null && input.isNotEmpty) {
double? numero = double.tryParse(input);
if (numero != null) {
print(
"A $nome pesa $peso! Ela foi colhida há $diasDesdeColheita dias e precisa de, em média, $diasParaMadura dias para amadurecer, logo, a $nome ${isMadura ? 'está' : 'não está'} madura!");
} else {
print("Erro: Você digitou uma letra em vez de um número.\n");
}
} else {
print("Erro: Entrada vazia.\n");
}
}
Resultado:
Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!
Muito obrigado, revi a aula sobre funções e entendi melhor.