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

如何读取不确定数量的值到Vector并求和?现有代码问题求助

Rust读取不确定数量数字到Vec并求和的正确实现

原代码的问题

你的两段代码都没用到正确的文本数字解析方式,问题出在:

  • 第一段代码:stdin().read(&mut nums[..])是读取原始字节到缓冲区,不是解析文本格式的数字。而且空Vec的切片长度为0,这个调用根本读不到任何数据,自然无法得到目标结果。
  • 第二段代码:同样用了读取原始字节的方法,会把输入字符的ASCII值直接转成整数存进Vec(比如输入的'1'会被存成49,空格存成32),所以输出全是乱码数字。同时Vec大小固定为10,没法处理不确定数量的输入。

正确实现代码

要实现读取空格分隔的任意数量数字、存入Vec并求和,应该先读取文本输入,再解析成数字:

use std::io;

fn main() {
    // 读取用户输入的一行文本
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("读取输入失败");

    // 处理输入:去掉首尾空白、分割成字符串、转成数字并收集到Vec
    let nums: Vec<i32> = input
        .trim()
        .split_whitespace() // 按任意空白分割(支持多空格、制表符)
        .filter_map(|s| s.parse().ok()) // 只保留能成功转成i32的元素,忽略无效输入
        .collect();

    // 计算总和
    let total_sum: i32 = nums.iter().sum();

    // 输出结果
    println!("{:?}", nums);
    println!("总和: {}", total_sum);
}

代码说明

  • read_line:读取用户输入的整行文本到String,包含所有空格分隔的数字。
  • trim():去掉输入首尾的换行符、空格等空白字符。
  • split_whitespace():按任意空白字符分割字符串,比split(" ")更灵活,能处理多个连续空格的情况。
  • filter_map + parse().ok():尝试把每个分割后的字符串转成i32,转失败的(比如字母、符号)会被自动过滤,避免程序崩溃。
  • collect():将迭代器中的数字收集到Vec中。
  • iter().sum():遍历Vec中的元素,计算总和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:32:40