2015-07-05 118 views
0

我一直在試圖找到一種簡單的方法來讀取Rust中的變量,但迄今爲止還沒有任何運氣。 Rust書中的所有例子都處理字符串AFAIK,但是我找不到任何關於可以工作的整數或浮點數的東西。從輸入中讀取一個整數並將其分配給一個變量

+0

[The Rust Programming Language,chapter 3.1 - Guessing game](http://doc.rust-lang.org/stable/book/guessing-game.html):* The'對字符串的parse()方法將字符串解析爲某種數字* – Shepmaster

回答

3

我沒有這個機器上的鏽編譯器,但部分基於this answer來接近,你希望是這樣......

let user_val = match input_string.parse::<i32>() { 
    Ok(x) => x, 
    Err(_) => -1, 
}; 

或者,如在評論中指出,

let user_val = input_string.parse::<i32>().unwrap_or(-1); 

...雖然你選擇在整數尺寸和默認值可能明顯是不同的,你並不總是需要一個類型修飾符(::<i32>)爲parse()其中類型可以從分配中推斷出來。

+2

您不需要爲這樣的事情安裝編譯器 - [Rust圍欄](https://play.rust-lang.org/)你覆蓋。 – Shepmaster

+1

在這裏使用['unwrap_or'](http://doc.rust-lang.org/std/result/enum.Result.html#method.unwrap_or)會更習慣用法:'input_string.parse :: ()。 unwrap_or(-1)'。你也可以用這個來指定整數類型:'input_string.parse()。unwrap_or(-1i32)'。 – Shepmaster

+0

@Shepmaster,非常有趣,謝謝! 'unwrap_or'對我來說似乎不那麼習慣,但如果社區搖擺不定,這對我來說就很有用。 –

4

要閱讀用戶輸入,你總是讀一組字節。有時,您可以將這些字節解釋爲UTF-8字符串。然後,您可以進一步將字符串解釋爲整數或浮點數(或許多其他事物,如IP地址)。

下面是讀取輸入的一行,並解析它作爲一個32位有符號整數一個完整的例子:

use std::io; 

fn main() { 
    let mut input = String::new(); 
    io::stdin().read_line(&mut input).unwrap(); 
    let input_num: i32 = input.trim().parse().unwrap(); 
    println!("Your number plus one is {}", input_num + 1); 
} 

注意,沒有人性化的錯誤處理正在發生。如果讀取輸入或解析失敗,程序會驚慌失措。運行該程序產生:

$ ./input 
41 
Your number plus one is 42 
相關問題