use std::io;
fn main()
{
println!("=========섭씨 화씨 변환 프로그램===========");
//ctrl + c를 입력할때까지 무한 반복
while true{
println!("기호화 함께 온도를 입력해주세요(ex : 32f, 32c");
//사용자로부터 온도를 입력받음
let mut s_temper = String::new();
match io::stdin().read_line(&mut s_temper){
Ok(_size) => {}
Err(_) => {
println!("알수없는 이유로 입력에서 에러가 발생하였습니다. 처음으로 돌아갑니다.");
continue;
}
}
//rans_temper로 부터 변환된 문자열을 받고 출력
let result_temper = trans_temper(s_temper);
println!("{}",result_temper);
}
}
//문자열 매개변수를 받아 변환을 해주는 함수이다.
fn trans_temper(p_s_temper: String) -> String{
//처음은 Error로 초기화 하여 반환 실패시 "Error"반환
let mut str_temper = String::new();
str_temper = ("Error").to_string();
//f나 c가 있으면 반환을 시작한다.
for _c in p_s_temper.chars()
{
if _c == 'f' || _c == 'F'
{
str_temper = ((str_to_float(p_s_temper) - 32.0) * 0.55).to_string() + "°C";
break;
}
else if _c == 'c' || _c == 'C'
{
str_temper = ((str_to_float(p_s_temper) * 1.8) + 32.0).to_string() + "°F";
break;
}
}
//반환
str_temper
}
//문자열을 받은 후 float64형으로 변환 후 반환해준다.
fn str_to_float(s_temper: String) -> f64
{
let mut trans = String::new();
//문자열 매개변수에서 정수만 뽑아낸다.
for i in s_temper.chars()
{
if i >= '0' && i <= '9'{
trans.push(i);
}
}
//f64형으로 변환한다.
let n_temper: f64 = match trans.trim().parse(){
Ok(_n_temper) => _n_temper,
Err(_) => {
println!("알수없는 이유로 변환에서 에러가 발생하였습니다. 처음으로 돌아갑니다.");
0.0
}
};
//반환
n_temper
}