Rust摄氏温度与华氏温度转换

首先明确摄氏温度与华氏温度的转换规则

华氏度=摄氏度*1.8+32

摄氏度=(华氏度-32)/1.8

然后就可以开始编码,首先要引入标准库中的io模块,因为我们要让用户输入一个温度,
当用户输入后,我们潜规则默认后缀带C为摄氏度,带F为华氏度
以下为编程注意点:
  一、stdin().read_line()会带入回车符,先用trim()去掉。
  二、用户输入可能不会区分大小写,先to_uppercase()转为大写,再去判断。
  三、截取掉最后一位最好不用字符串索引去处理,采用chars()方法更优。
  四、chars.next_back()是按码位进行迭代的。
  五、最后温度转换的判断用了if和match两种写法分别实现,看起来还是match更加简洁易读。
完整代码如下,期望大家批评指正。

use std::io;
fn main() {
    println!("请输入温度(以C或者F结尾):");
    let mut s = String::new();
    match io::stdin().read_line(&mut s) {
        Ok(_) => s = s.trim().to_uppercase().to_string(),
        Err(e) => println!("error:{}", e),
    }

    let mut chars = s.chars();
    chars.next_back();
    let temperature: f64 = match chars.as_str().parse() {
        Ok(num) => num,
        _ => {
            println!("请输入数字");
            return;
        }
    };

    if s.chars().last() == Some('C') {
        println!("您输入的是摄氏度:{}", temperature);
        println!("转换为华氏度是:{}", temperature* 1.8 + 32.0);
    } else if s.chars().last() == Some('F') {
        println!("您输入的是华氏度:{}", temperature);
        println!("转换为华氏度是:{}", (temperature- 32.0) / 1.8);
    } else {
        println!("请以C或者F结尾")
    }

    match s.chars().last() {
        Some('C') => {
            println!("您输入的是摄氏度:{}", temperature);
            println!("转换为华氏度是:{}", temperature* 1.8 + 32.0);
        }
        Some('F') => {
            println!("您输入的是华氏度:{}", temperature);
            println!("转换为华氏度是:{}", (temperature- 32.0) / 1.8);
        }
        _ => println!("请以C或者F结尾"),
    }
}
posted @ 2021-03-02 21:00  诡局  阅读(481)  评论(0编辑  收藏  举报