njhkugk6i76g6gi6gi7g6
njhkugk6i76g6gi6gi7g6

Reputation: 61

Why doesn't the loop break when I enter "stop"

To practice structures in Rust language, I decided to create a program which prints a number you entered raised to the power you entered. The program is supposed to work until you enter "stop", but there is a problem: when I enter "stop", the loop doesn't break and my program crashes after trying to convert String "stop" to a number. How to fix that?

//Power of number
struct Number{
    number_itself: i32,
    power: i32,
}
fn main(){
    loop{
    let mut number = String::new();
    let mut Power = String::new();
    io::stdin().read_line(&mut number).expect("Hren kakaya-to");
    io::stdin().read_line(&mut Power).expect("Huyeta");
    if number==String::from("stop") || Power==String::from("stop"){
        break;
    }
    let number_int:i32 = number.trim().parse().expect("Ne vyshlo");
    let power_int:i32 = Power.trim().parse().expect("Hren' vyshla");
    let powernum = Number{
        number_itself:number_int,
        power:power_int,
    };
    println!("{}",powernum.number_itself.pow(powernum.power as u32));
}
}```

Upvotes: 0

Views: 667

Answers (1)

frankenapps
frankenapps

Reputation: 8221

Your strings are not actually equal, the string returned from read_line() also contains a linebreak character at the end. You can do something like that to make it work as expected:

struct Number {
    number_itself: i32,
    power: i32,
}
fn main() {
    loop {
        let mut number = String::new();
        let mut Power = String::new();
        std::io::stdin()
            .read_line(&mut number)
            .expect("Hren kakaya-to");
        std::io::stdin().read_line(&mut Power).expect("Huyeta");
        if number.trim() == "stop" || Power.trim() == "stop" {
            break;
        }
        let number_int: i32 = number.trim().parse().expect("Ne vyshlo");
        let power_int: i32 = Power.trim().parse().expect("Hren' vyshla");
        let powernum = Number {
            number_itself: number_int,
            power: power_int,
        };
        println!("{}", powernum.number_itself.pow(powernum.power as u32));
    }
}

Upvotes: 5

Related Questions