Rust中将字符串解析为i32编译正常但程序行为异常求助
解决Rust中print!提示不即时显示的问题
你的问题核心是标准输出的行缓冲机制导致的:print!输出的内容没有换行符,stdout默认会把内容暂存在缓冲区里,直到遇到换行(比如println!)或者手动刷新缓冲区,才会把内容输出到终端。所以你输入数字后,println!的换行触发了缓冲区刷新,之前的提示和结果才一起显示出来。
两种修复方法:
方法1:改用println!添加换行
直接把print!换成println!,换行符会自动触发缓冲区刷新:
use std::io; fn main() { let mut input = String::new(); println!("enter some number: "); io::stdin() .read_line(&mut input) .expect("Failed to read line"); let num: i32 = input.trim().parse().expect("Cant convert to i32"); println!("you entered: {num}"); }
方法2:手动刷新标准输出
如果必须用print!(比如不想换行),可以导入std::io::Write trait,手动刷新stdout:
use std::io::{self, Write}; fn main() { let mut input = String::new(); print!("enter some number: "); // 手动刷新缓冲区,确保提示即时显示 io::stdout().flush().expect("Failed to flush stdout"); io::stdin() .read_line(&mut input) .expect("Failed to read line"); let num: i32 = input.trim().parse().expect("Cant convert to i32"); println!("you entered: {num}"); }
另外你提到的字符串解析问题其实不存在,只是输出时机的问题让你误以为解析出错。input.trim().parse()的写法是正确的,它会去掉输入前后的空白(包括换行符),然后解析成i32类型。
内容的提问来源于stack exchange,提问作者Poudel89
相关产品推荐
相关产品推荐

