Rust中相同逻辑的for循环无输出但while循环可正常输出是为什么?
问题原因
核心是你的输入存储变量和提示文字完全对应错误:
- 第一行提示输入
lower limit(下限),你却把读取到的输入存到了变量limit中 - 第二行提示输入
upper limit(上限),你反而把读取到的输入存到了变量lower_limit中
Rust的a..b是左闭右开的迭代区间,只有当a < b时才会执行循环逻辑。如果你按照提示正常先输入小的下限、再输入大的上限,最终得到的迭代区间就是大的数值..小的数值,循环直接不会执行,自然没有任何输出。
修复方案
把两个读取输入的存储变量调换即可,修正后的核心代码如下:
println!("Input lower limit."); io::stdin() // 下限输入存入lower_limit变量 .read_line(&mut lower_limit) .expect("Failed to read line"); let lower_limit: u64 = lower_limit.trim().parse().unwrap(); println!("Input upper limit."); io::stdin() // 上限输入存入limit变量 .read_line(&mut limit) .expect("Failed to read line"); let limit: u64 = limit.trim().parse().unwrap();
补充优化建议:判断整除不需要转成f64做除法比较,直接用整数取模运算i % 15 == 0判断即可,性能更高还不会遇到浮点数精度隐患。
内容的提问来源于stack exchange,提问作者Merlin1846
相关产品推荐
相关产品推荐

