input integer rust user-input

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.