Rust 輸入
單一輸入
利用rust的標準輸入法輸入一行字串,std::io::stdin()
1 2 3 4 5
| fn main() { let mut s = String::new(); std::io::stdin().read_line(&mut s).expect("err read"); println!("{}", s); }
|
如果使用一個loop在這裡輸入時你會發現你的輸入會一直連續下去,跟其他語言不同他並不會取代掉原本的輸入,只要不重新new原本的變數的話輸入是會一直連續下去的,因此輸入後可以對字串進行切割等處理。
1 2 3 4 5 6 7 8 9
| fn main() { let mut s = String::new();
loop{ std::io::stdin().read_line(&mut s).expect("err read"); println!("{}", s); }
}
|
重新產生避免連續
又或者我們可以寫成一個函式讓他每次都重新產生一次。
1 2 3 4 5 6 7 8 9 10
| fn main() { let input = single_input(); println!("{}", input); }
fn single_input() -> String { let mut s = String::new(); std::io::stdin().read_line(&mut s).expect("err read"); return s; }
|
輸入型態轉換
接著我們來將依行輸入轉成其他的型態,由下面來看關鍵的就是我們將上面return的String
改成i32
,接著最重要的一行就是我們將字串轉成其他的型態s.trim().parse::<i32>().unwrap();
,我們來將它分解開來逐一介紹。
trim()
的意思是會把字串前後不重要的符號都移除 (例如空白跟換行符號)。
parse::<T>()
是可以解析成其他的型態,只要在角括號裡改成想要的型態就可以了。
unwrap()
很多情況下 function 吐回來的東西是 Result,Result 的意思是他除了是你想要的東西之外,也有可能是一個錯誤一般情況下應該要處理這個錯誤,如果對 Result 做 unwrap() 代表忽略錯誤的情況真的發生錯誤時就直接讓程式終止。
1 2 3 4 5 6 7 8 9 10
| fn main() { let input: i32 = single_input(); println!("Output: {}", input); }
fn single_input() -> i32 { let mut s = String::new(); std::io::stdin().read_line(&mut s).expect("err read"); return s.trim().parse::<i32>().unwrap(); }
|
輸入後存進vector
如果你的輸入是輸入一個換一行的話,你可以將每次的輸入都push
進一個vec內,這樣所有的值都可以存在你所創的vec內。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| fn main() { let mut vec = Vec::new(); for i in 0..3 { let input: i32 = single_input(); vec.push(input); } for i in vec { println!("{}", i); } }
fn single_input() -> i32 { let mut s = String::new(); std::io::stdin().read_line(&mut s).expect("err read"); return s.trim().parse::<i32>().unwrap(); }
|