如何读取不确定数量的值到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
相关产品推荐
相关产品推荐

