首先明确摄氏温度与华氏温度的转换规则
华氏度=摄氏度*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结尾"),
}
}