Rust中同一变量重复接收输入时内容累加,求原因解释
问题原因与解决办法
原因分析
你遇到的问题核心在于read_line方法的行为:stdin().read_line(&mut input)会把用户输入的内容(包括按下回车产生的换行符\n)追加到input字符串的末尾,而不是覆盖原有内容。
第一次输入1时,input被填充为"1\n";第二次输入A时,read_line会把"A\n"追加到原字符串后面,让input变成"1\nA\n",所以打印时会显示之前所有的输入内容。
解决办法
有两种常见的修复方式:
1. 每次循环清空原有字符串
在调用read_line之前,用input.clear()清空input的内容,这样每次输入都会写入空字符串,不会累加:
use std::io::stdin; fn main(){ println!("Please Give Input: "); let mut input = String::new(); loop{ input.clear(); // 清空原有内容 stdin().read_line(&mut input).expect("Error While Input"); print!("{input}"); } }
2. 每次循环重新创建字符串变量
把let mut input = String::new()放到循环内部,这样每次循环都会生成一个新的空字符串,自然不会保留之前的输入:
use std::io::stdin; fn main(){ println!("Please Give Input: "); loop{ let mut input = String::new(); // 每次循环新建变量 stdin().read_line(&mut input).expect("Error While Input"); print!("{input}"); } }
内容的提问来源于stack exchange,提问作者hafizsheetab
相关产品推荐
相关产品推荐

