gpt4 book ai didi

rust - 如何解决 rust 中的 “value: ParseIntError”?

转载 作者:行者123 更新时间:2023-12-03 11:49:07 26 4
gpt4 key购买 nike

我正在尝试在Rust中构建华氏度到摄氏度的转换器。

我编译成功,但是我不知道运行时出了什么问题。这是因为转换了吗?

这是我的代码:

use std::io;

fn main(){
println!("Please select\n 1.CELSIUS to FAHRENHEIT\n 2.FAHRENHEIT to CELSIUS");

const CEL_FAH: f64 = 32.00;
const FAH_CEL: f64 = -17.22;

let mut select = String::new();

io::stdin().read_line(&mut select)
.expect("Please select the appropriate options");

let select: i32 = select.parse().unwrap();

//control flow

if select == 1 {
println!("1. CELSIUS - FAHRENHEIT: ");

let cels = String::new();

let cels: f64 = cels.parse().unwrap();

let ans1 = cels * CEL_FAH;

println!("Conversions: {}", ans1);
} else if select == 2 {

println!("2. FAHRENHEIT - CELSIUS: ");

let fahs = String::new();

let fahs: f64 = fahs.parse().unwrap();

let ans2 = fahs * FAH_CEL;

println! ("Conversions: {}", ans2);
}else {

println!("Select the options please.");
}


}

这是我的输出和错误:
   Compiling converter v0.1.0 (D:\Program Files\Rust Projects\converter)
Finished dev [unoptimized + debuginfo] target(s) in 2.46s
Running `target\debug\converter.exe`
Please select
1.CELSIUS to FAHRENHEIT
2.FAHRENHEIT to CELSIUS
2
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: ParseIntError { kind: InvalidDigit }', src\main.rs:19:23
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: process didn't exit successfully: `target\debug\converter.exe` (exit code: 101)```

最佳答案

在您的代码中,存在三个错误:

  • 当您使用stdin()方法获取输入并想将其解析为另一种类型时,必须放入.trim(),因为stdin()在输入中添加了空格,因此您需要修剪那些不需要的空格。
  • 每次输入时,都必须使用io::stdin()方法和read_line方法,以便编译器保留用户输入的内容。
  • 您使用了错误的公式进行转换。

  • 我已经在您的代码中进行了更正,现在可以正常工作了,以下是代码段:
    use std::io;

    fn main() {
    println!("Please select\n 1.CELSIUS to FAHRENHEIT\n 2.FAHRENHEIT to CELSIUS");

    const CEL_FAH: f64 = 32.00;
    const FAH_CEL: f64 = 1.8; //changed

    let mut select = String::new();

    io::stdin()
    .read_line(&mut select)
    .expect("Please select the appropriate options");

    let select: i32 = select.trim().parse().unwrap(); // .trim() method requires when taking input

    //control flow

    if select == 1 {
    println!("1. CELSIUS - FAHRENHEIT: ");

    let mut cels = String::new();
    io::stdin()
    .read_line(&mut cels)
    .expect("Please input a temperature in degrees"); // when you're taking input from user you have to use stdin()

    let cels: f64 = cels.trim().parse().unwrap();

    let ans1 = (cels * FAH_CEL) + CEL_FAH; //this the correct formula to convert from celsius to fahrenheit

    println!("Conversions: {}", ans1);
    } else if select == 2 {
    println!("2. FAHRENHEIT - CELSIUS: ");

    let mut fahs = String::new();
    io::stdin()
    .read_line(&mut fahs)
    .expect("Please input a temperature in degrees"); //when you're taking input from user you have to use stdin()

    let fahs: f64 = fahs.trim().parse().unwrap();

    let ans2 = (fahs - CEL_FAH) * 5. / 9.; //this the correct formula to convert from fahrenheit to celsius

    println!("Conversions: {}", ans2);
    } else {
    println!("Select the options please.");
    }
    }

    您也可以引用此存储库。 Temperature converter rust

    关于rust - 如何解决 rust 中的 “value: ParseIntError”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61168269/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com