You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确使用Rust的text_io crate?按文档编写代码触发panic

问题原因与解决方法

你的问题出在对text_io库中read!宏的用法误解上:

read!宏的格式化字符串不是用来输出提示文本的,而是用来匹配输入内容的结构的。你写的read!("Insert Celsius: {}!")相当于告诉宏:必须读取完全符合Insert Celsius: [数值]!格式的输入(比如你得输入Insert Celsius: 6!才会匹配),但你实际只输入了6,宏找不到预期的前缀文本,直接解析失败触发panic。

修正后的正确写法

如果你需要先输出提示再读取数值,有两种标准方式:

方式1:保持提示与读取分离(和你正常运行的代码一致)

fn main() {
    println!("Celsius to farenheit");
    print!("Insert Celsius: ");
    let celsius: f32 = read!();
    println!("Celsius to Farenheit is: {}", cel_to_far(celsius));
}

方式2:正确使用read!的格式匹配(仅当输入包含固定文本时用)

比如如果要求用户输入格式必须是C: 25这样的内容,才需要用带格式的read!:

fn main() {
    println!("Celsius to farenheit");
    print!("Insert Celsius (format: C: [number]): ");
    let celsius: f32 = read!("C: {}");
    println!("Celsius to Farenheit is: {}", cel_to_far(celsius));
}

此时用户输入C: 6就能正常解析出数值6。

关于报错信息的解释

UnexpectedValue(73, Some(54))里的数字是ASCII码:

  • 73对应字符I(你写的格式字符串开头是Insert)
  • 54对应字符6(你实际输入的内容)
    宏预期输入的第一个字符是I,但收到的是6,因此抛出不匹配错误。

内容的提问来源于stack exchange,提问作者Andres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 12:52:22