Rust官方真正提供的读入函数只有一个stdin().read_line
这对于oier们是很麻烦的
所以,我提供以下函数和宏
macro_rules! scan {
( $( $x:ty ),+ ) => {{
let mut string = String::new();
stdin().read_line(&mut string).unwrap();
let mut iter = string.split_whitespace();
($(iter.next().and_then(|word| word.parse::<$x>().ok()).unwrap(),)*)
}}
}
fn read() -> Vec<i64> {
let mut s = String::new();
stdin().read_line(&mut s).unwrap();
let v = s.split_whitespace().collect::<Vec<&str>>();
v.iter().map(|i| i.parse::<i64>().unwrap()).collect()
}
注意事项
scan宏返回的是一个tuple,所以只读入一个函数的时候需要处理
read函数返回值的长度是可变的,所以说如果你输入了额外的数据也不会出现错误
使用的时候记得use std::io::stdin;
use std::io::stdin;
macro_rules! scan {
( $( $x:ty ),+ ) => {{
let mut string = String::new();
stdin().read_line(&mut string).unwrap();
let mut iter = string.split_whitespace();
($(iter.next().and_then(|word| word.parse::<$x>().ok()).unwrap(),)*)
}}
}
fn read() -> Vec<i64> {
let mut s = String::new();
stdin().read_line(&mut s).unwrap();
let v = s.split_whitespace().collect::<Vec<&str>>();
v.iter().map(|i| i.parse::<i64>().unwrap()).collect()
}
fn main() {
let n = scan!(i32).0;
let s = read();
println!("数组的长度 : {} , 是否等于n {}",s.len(),s.len() == (n as usize));
println!("{:?}",s);
}
测试数据: 输入
5
1 2 3 4 5
源代码非常的简单,只需要知道迭代器即可