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

如何将Rust向量内容输出到文本文件并添加自定义域名后缀?

问题描述

我定义了如下Rust向量:

let v = vec!["foo", "bar", "go", "any"];

需要将该向量内容输出到文本文件,且每个元素后添加指定内容(如@gmail.com),最终文件内容期望为:

foo@gmail.com
bar@gmail.com
go@gmail.com
any@gmail.com

我尝试了两段代码,但都没达到预期效果:

初始尝试代码

use std::{fs::File, io::Write};

fn main() -> std::io::Result<()> {
    let v = vec!["foo", "bar", "go", "any"];

    let mut f = File::create("try.txt")?;

    for item in v {
        f.write_all(item.as_bytes())?;
    }
    Ok(())
}

后续修改代码

use std::{fs::File, io, io::Write};

fn main() -> std::io::Result<()> {
    let v = vec!["foo", "bar", "go", "any"];
    let mut write_domain = String::new();
    println!("Enter your domain :");

    let _user_domain = io::stdin().read_line(&mut write_domain).unwrap();

    let mut f = File::create("try.txt")?;

    for item in v {
            let item = format!("{item}@{write_domain}");
            f.write_all(item.as_bytes())?;
    }
    Ok(())
}

修正方案

你的代码存在两个核心问题:

  1. read_line会把输入末尾的换行符\n也读取到write_domain中,导致最终拼接的字符串包含多余换行;
  2. 写入文件时没有为每个元素添加换行,所有内容会挤在一行。

以下是修正后的代码:

use std::{fs::File, io, io::Write};

fn main() -> std::io::Result<()> {
    let v = vec!["foo", "bar", "go", "any"];
    let mut write_domain = String::new();
    println!("Enter your domain :");

    // 读取输入并去除末尾的换行符,用?处理错误而非unwrap
    io::stdin().read_line(&mut write_domain)?;
    let write_domain = write_domain.trim();

    let mut f = File::create("try.txt")?;

    for item in v {
        // 拼接字符串并添加换行符,确保每行一个元素
        let line = format!("{item}@{write_domain}\n");
        f.write_all(line.as_bytes())?;
    }
    Ok(())
}

关键说明

  • 使用trim()去除输入域名的首尾空白(包括换行符),避免拼接后出现格式错误;
  • 格式化字符串时添加\n,保证每个元素单独占一行;
  • 替换unwrap()为?,更符合Rust的错误处理规范,避免程序因输入错误直接崩溃;
  • 若不需要用户输入域名,直接固定后缀的话,可简化为:
    use std::{fs::File, io::Write};
    
    fn main() -> std::io::Result<()> {
        let v = vec!["foo", "bar", "go", "any"];
        let domain = "gmail.com";
        let mut f = File::create("try.txt")?;
    
        for item in v {
            let line = format!("{item}@{domain}\n");
            f.write_all(line.as_bytes())?;
        }
        Ok(())
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:15:37