Para capturar palavras ou valores digitados pelos usuários, Rust fornece a função nativa
read_line que pertence à biblioteca std::io.
Sintaxe
use std::io
Sintaxe
read_line(<buf>: &mut String) -> Result<usize>
A conversão da informação digitada não é feita automaticamente por essa função, sendo
necessário utilizar funções para conversão de dados. Além dessas, outros tratamentos
como remoção de espaço devem ser feitos.
Sintaxe
variavel_string.parse()
Como o usuário pode inserir uma valor que não seja possível a conversão, o tratamento dessas s
ituações deve ser feito. Mais sobre tratamento de erros será visto em Rust: Tratando Erros.
No exemplo abaixo vamos utilizar o construtor String::new para criar um string. O método
unwrap recupera o valor contido no retorno(Result) do método parse que faz a
"conversão" da entrada.
O método trim é usado para remover espaços em branco do início e fim da string que
armazena o valor capturado por read_line.
O comando match é um comando de escolha semelhante ao switch de outras linguagens.
No exemplo abaixo, o match é usado para verificar o retorno do método parse.
Exemplo 5
use std::io;
fn main()
{
let mut nome: String = String::new();
println!("Digite uma string:");
let _ = io::stdin().read_line(&mut nome); //sem tratamento de erro
println!("{}",nome);
println!("{}","Digite um número inteiro:");
let mut inum: String = String::new();
let _ = io::stdin().read_line(&mut inum);
//Result
match inum.trim().parse::<i32>() {
Ok(n) => println!("{}", n),
Err(e) => println!("Erro: {}", e),
}
println!("{}","Digite um número float:");
let mut fnum: String = String::new();
let _ = io::stdin().read_line(&mut fnum);
//Sem Result
let vfloat: f64 = fnum.trim().parse().unwrap();
println!("{}",vfloat);
/*
}
Entrada
Rust
10
1.9
Saída
Digite uma string
Rust
Digite um inteiro
10
Digite um float
1.9