Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Lista de exercícios - Aula 1 - Exercício 3

Os dois primeiros exercícios foram resolvidos conforme mostrado na Opinião do Instrutor. Porém, ao resolver o exercício número 3 (Solicitando a idade do usuário), surgiu a dúvida: O problema foi resolvido pelo intrutor usando duas variáveis do tipo String$. Por que não funciona com uma variável do tipo int ?

Este código funciona:

import 'dart:io';

void main() {
  print('Por favor, informe seu primeiro nome: ');
  String? nome = stdin.readLineSync();
  print('Agora, informe sua idade: ');
  String? idade = stdin.readLineSync();


  print('Olá, $nome! Você tem $idade anos de idade.');

}

Este não funciona:

import 'dart:io';

void main() {
  print('Por favor, informe seu primeiro nome: ');
  String? nome = stdin.readLineSync();
  print('Agora, informe sua idade: ');
  int idade = stdin.readLineSync();


  print('Olá, $nome! Você tem $idade anos de idade.');

}

Agora, alterando-se o método da função stdin funciona, porém, mostra valor da idade divergente do informado pelo usuário (também gostaria de uma explicação pra isso):

import 'dart:io';

void main() {
  print('Por favor, informe seu primeiro nome: ');
  String? nome = stdin.readLineSync();
  print('Agora, informe sua idade: ');
  int idade = stdin.readByteSync();


  print('Olá, $nome! Você tem $idade anos de idade.');

}

Resultado:

PS C:\Users\barru\Documents\dart\meu_app> dart run
Building package executable...
Por favor, informe seu primeiro nome:
Antonio
Agora, informe sua idade:
54
Olá, Antonio! Você tem 53 anos de idade.
1 resposta
solução!

Olá, Antonio! Tudo bem?

Entendo sua dúvida e vou tentar ajudar. Quando você usa stdin.readLineSync(), o Dart está lendo a entrada como uma String. Para armazenar essa entrada como um int, você precisa converter a String para um int usando o método int.parse(). É por isso que o seu segundo exemplo não funciona, pois está tentando atribuir diretamente uma String a uma variável int.

Você pode corrigir o código para funcionar com uma variável do tipo int da seguinte forma:

import 'dart:io';

void main() {
  print('Por favor, informe seu primeiro nome: ');
  String? nome = stdin.readLineSync();
  print('Agora, informe sua idade: ');
  String? idadeStr = stdin.readLineSync();
  int idade = int.parse(idadeStr!);

  print('Olá, $nome! Você tem $idade anos de idade.');
}

No código acima, a entrada da idade é lida como uma String e depois convertida para um int usando int.parse().

Sobre o uso de stdin.readByteSync(), ele lê um único byte da entrada padrão, o que não é adequado para capturar a entrada de um número inteiro como idade. Por isso, ele não lê o valor correto e apresenta um número divergente.

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