2015-05-20 40 views

回答

19

在這裏,所有的可選類型的註釋和錯誤處理一個版本,這是對初學者也許有用的(比如我):

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) 
    }; 
} 
6

也許最簡單的部分是使用text_io寫:

// read until a whitespace and try to convert what was read into an i32 
    let i: i32 = read!(); 

注:但是,如果你需要不止一個值同時讀取,您可能需要防鏽夜間。

+0

我認爲它運行穩定,如果你只需要一次讀取一個值。 –

+0

'text_io' dev here。 @VladimirMatveev是對的,如果你沒有讀取元組,但是'read!()'調用只有一個值,'text_io'運行穩定。它實際上每晚都需要多個值。我會更新github描述。 –

4

parse或多或少是一樣的;它現在是不愉快的read_line

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."), 
    } 
} 
3

這裏有幾個可能性(鏽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); 
    } 
} 

這些備用模式匹配儀式不依賴於額外的庫。

+0

來吧,它明顯不同,完整的答案使讀者更容易。 – qed

+0

對我來說,它與[接受的答案](http://stackoverflow.com/a/30355925/155423)看起來很相似。 – Shepmaster

+0

是的,你必須從用戶那裏獲取一個字符串並將其存儲在一個變量中,該部分是相同的。解析部分更簡潔,正如我的答案中所解釋的。 – qed