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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:22:14