首页 > 解决方案 > 为什么当我输入“停止”时循环不中断

问题描述

为了练习 Rust 语言中的结构,我决定创建一个程序,它打印你输入的数字,提升到你输入的幂。该程序应该可以工作,直到您输入“stop”,但是有一个问题:当我输入“stop”时,循环不会中断,并且我的程序在尝试将字符串“stop”转换为数字后崩溃。如何解决?

//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));
}
}```

标签: loopsrust

解决方案


您的字符串实际上并不相等,从返回的字符串末尾read_line()还包含一个换行符。您可以执行类似的操作以使其按预期工作:

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));
    }
}

推荐阅读