You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:41:08