2021 시작

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
}

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading