Rust loop循环内print!无输出,println!正常的问题咨询
为什么Rust中loop里的
print!宏无法输出内容? 这是标准输出(stdout)的行缓冲机制导致的:
println!宏会在输出内容末尾自动添加换行符\n,这个换行符会触发缓冲区立即刷新,所以内容能马上显示在控制台。print!宏不会添加换行,输出的内容会暂时存在内存缓冲区里,只有当缓冲区被填满、程序结束,或者手动触发刷新时,才会把内容输出到控制台。你的loop一直在循环运行,缓冲区没被触发刷新,所以print!的内容一直没显示出来。
解决办法有两个:
1. 手动刷新标准输出
导入std::io::Write trait,在print!之后调用flush()方法强制刷新缓冲区:
use rand::Rng; use std::cmp::Ordering; use std::io; use std::io::Write; // 导入Write trait才能调用flush fn main() { let number = rand::thread_rng().gen_range(1..=100); loop { let mut input = String::from(" "); io::stdin().read_line(&mut input).expect("failed to read"); let input_number: u32 = input.trim().parse().expect("Not a number"); let message = match number.cmp(&input_number) { Ordering::Equal => "equal", Ordering::Less => "less", Ordering::Greater => "bigg", }; print!("message: {}", message); // 手动刷新缓冲区,确保内容立即输出 std::io::stdout().flush().expect("刷新输出失败"); } }
2. 继续使用println!(简单场景首选)
如果你的输出场景允许带换行,直接用println!最省心,它会自动处理换行和缓冲区刷新,不用额外写代码。
内容的提问来源于stack exchange,提问作者OV3RKILL
相关产品推荐
相关产品推荐

