Reputation: 61
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
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