input - ¿Cómo leer una entrada entera del usuario en Rust 1.0?
integer user-input (4)
parse
es más o menos el mismo; es read_line
desagradable ahora.
use std::io;
fn main() {
let mut s = String::new();
io::stdin().read_line(&mut s).unwrap();
match s.trim_right().parse::<i32>() {
Ok(i) => println!("{} + 5 = {}", i, i + 5),
Err(_) => println!("Invalid number."),
}
}
Las respuestas existentes que he encontrado están todas basadas en from_str
(como leer en la entrada del usuario desde la consola una vez de manera eficiente ), pero aparentemente from_str(x)
ha cambiado a x.parse()
en Rust 1.0. Como novato, no es obvio cómo se debe adaptar la solución original teniendo en cuenta este cambio.
A partir de Rust 1.0, ¿cuál es la forma más fácil de obtener una entrada de enteros del usuario?
Probablemente la parte más fácil sería usar text_io y escribir:
// read until a whitespace and try to convert what was read into an i32
let i: i32 = read!();
Nota: Sin embargo, si necesita leer más de un valor simultáneamente, es posible que necesite oxidar todas las noches.
Y aquí una versión con todas las anotaciones de tipos opcionales y manejo de errores que quizás sea útil para principiantes (como yo):
use std::io;
fn main() {
let mut input_text = String::new();
io::stdin()
.read_line(&mut input_text)
.expect("failed to read from stdin");
let trimmed = input_text.trim();
match trimmed.parse::<u32>() {
Ok(i) => println!("your integer input: {}", i),
Err(..) => println!("this was not an integer: {}", trimmed)
};
}
Aquí hay algunas posibilidades (Rust 1.7):
use std::io;
fn main() {
let mut n = String::new();
io::stdin()
.read_line(&mut n)
.expect("failed to read input.");
let n: i32 = n.trim().parse().expect("invalid input");
println!("{:?}", n);
let mut n = String::new();
io::stdin()
.read_line(&mut n)
.expect("failed to read input.");
let n = n.trim().parse::<i32>().expect("invalid input");
println!("{:?}", n);
let mut n = String::new();
io::stdin()
.read_line(&mut n)
.expect("failed to read input.");
if let Ok(n) = n.trim().parse::<i32>() {
println!("{:?}", n);
}
}
Estos le ahorran la ceremonia de coincidencia de patrones sin depender de bibliotecas adicionales.