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

Rust实现从标准输入读取n组整数求和程序时sum变量值残留问题求助

解决Rust中输入缓冲区残留导致求和错误的问题

你遇到的sum值残留问题,核心原因是每次循环读取新输入时,没有清空buff字符串里的旧内容。read_line方法是把新读取的内容追加到字符串末尾,而不是覆盖原有内容,导致每次处理时,buff里是之前所有输入的拼接,求和自然就包含了旧数据,出现错误。

修复方案一:每次循环清空缓冲区

在每次读取新行前后清空buff,这样就能保证每次处理的都是当前行的内容:

use std::io::stdin;
fn main() {
    let mut buff = String::new();
    // 读取n的值
    stdin().read_line(&mut buff).unwrap();
    let n: i32 = buff.trim().parse().unwrap();
    
    // 清空读取n后的缓冲区,避免影响后续读取
    buff.clear();
    
    for _ in 0..n {
        stdin().read_line(&mut buff).unwrap();
        let sum = buff
            .trim()
            .split_whitespace()
            .map(|x| x.parse::<i32>().unwrap())
            .sum::<i32>();
        println!("{}", sum);
        
        // 循环结束后清空缓冲区,准备下一次读取
        buff.clear();
    }
}

修复方案二:在循环内创建新的缓冲区

这种方法更直观,每次循环都新建一个独立的字符串,完全避免残留问题,代码可读性也更好:

use std::io::stdin;
fn main() {
    let mut buff = String::new();
    stdin().read_line(&mut buff).unwrap();
    let n: i32 = buff.trim().parse().unwrap();
    
    for _ in 0..n {
        // 每次循环新建一个缓冲区,只存当前行的内容
        let mut line_buff = String::new();
        stdin().read_line(&mut line_buff).unwrap();
        let sum = line_buff
            .trim()
            .split_whitespace()
            .map(|x| x.parse::<i32>().unwrap())
            .sum::<i32>();
        println!("{}", sum);
    }
}

额外补充:适配一次性输入场景

你的示例输入是3 1 2 2 2 1 3这种一次性输入的格式,上面的代码会在读取n后等待用户逐行输入。如果要适配这种一次性输入所有内容的场景,可以直接读取全部输入再处理:

use std::io::stdin;
fn main() {
    let mut buff = String::new();
    // 一次性读取所有输入内容
    stdin().read_to_string(&mut buff).unwrap();
    
    // 把所有输入解析成整数数组
    let mut nums = buff
        .trim()
        .split_whitespace()
        .map(|x| x.parse::<i32>().unwrap())
        .collect::<Vec<_>>();
    
    // 取出第一个数字作为n
    let n = nums.remove(0);
    
    // 每两个数字一组求和
    for i in 0..n as usize {
        let sum = nums[2 * i] + nums[2 * i + 1];
        println!("{}", sum);
    }
}

这个版本会一次性处理所有输入,完美匹配你给出的示例输入,输出3 4 4。

内容的提问来源于stack exchange,提问作者Blackgaurd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 23:17:35