如何在Rust中实现类似C++的单行多变量输入处理?
在Rust中实现类似C++的多变量输入功能
你要实现的是读取两个整数(支持空格或换行分隔)并输出的功能,以下是几种实现方式:
基础标准库实现(快速上手)
这种方式完全依赖Rust标准库,行为和C++的cin一致,支持任意空白字符(空格、换行、制表符)分隔输入:
use std::io; fn main() { // 创建字符串存储输入内容 let mut input = String::new(); // 从标准输入读取一行(也能处理跨多行的输入) io::stdin().read_line(&mut input).expect("读取输入失败"); // 分割输入并解析为整数集合 let nums: Vec<i32> = input .trim() // 去除首尾空白(包括换行符) .split_whitespace() // 按任意空白分割字符串 .map(|s| s.parse().expect("输入不是有效整数")) // 转成i32,解析失败则报错 .collect(); // 取出两个整数并输出 let a = nums[0]; let b = nums[1]; println!("a: {}", a); println!("b: {}", b); }
测试效果
输入示例:
123 34
或者跨两行输入:
123 34
都会得到输出:
a: 123 b: 34
健壮性优化版本(避免panic)
上面的基础版在输入不符合要求时会直接panic,下面的版本会处理错误并给出友好提示:
use std::io; fn main() { let mut input = String::new(); // 处理读取输入失败的情况 if io::stdin().read_line(&mut input).is_err() { eprintln!("错误:无法读取输入内容"); return; } // 先收集解析结果,不直接unwrap let parse_results: Vec<Result<i32, _>> = input .trim() .split_whitespace() .map(|s| s.parse()) .collect(); // 检查输入数量是否足够 if parse_results.len() < 2 { eprintln!("错误:需要输入两个整数"); return; } // 匹配解析结果,处理各种错误情况 match (parse_results[0].clone(), parse_results[1].clone()) { (Ok(a), Ok(b)) => { println!("a: {}", a); println!("b: {}", b); }, (Err(_), _) => eprintln!("错误:第一个输入不是有效的整数"), (_, Err(_)) => eprintln!("错误:第二个输入不是有效的整数"), } }
内容的提问来源于stack exchange,提问作者Loaf
相关产品推荐
相关产品推荐

