Rust程序输入stop后循环未终止反而崩溃该如何修复?
问题原因
read_line()读取用户输入时会将末尾的换行符/回车符一同存入字符串变量,你输入stop后实际得到的字符串是"stop\n"(Linux/macOS)或"stop\r\n"(Windows),直接和"stop"做相等判断永远返回false,所以不会触发break逻辑,程序继续执行字符串转数字的步骤自然会崩溃。- 代码没有导入
std::io模块,编译阶段就会报错。
修复方案
- 相等判断前先对两个输入字符串调用
trim()方法,去除首尾的空白字符(包括换行、回车、首尾空格) - 代码开头添加
use std::io;导入io模块 - (可选)将变量名
Power改为符合Rust命名规范的蛇形命名power
修复后完整代码
use std::io; // 数字次幂计算结构体 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("读取数字输入失败"); io::stdin().read_line(&mut power).expect("读取次幂输入失败"); // 先trim再判断是否为stop if number.trim() == "stop" || power.trim() == "stop" { break; } let number_int:i32 = number.trim().parse().expect("数字格式转换失败"); let power_int:i32 = power.trim().parse().expect("次幂格式转换失败"); let powernum = Number{ number_itself: number_int, power: power_int, }; println!("{}", powernum.number_itself.pow(powernum.power as u32)); } }
内容的提问来源于stack exchange,提问作者njhkugk6i76g6gi6gi7g6
相关产品推荐
相关产品推荐

