Rust中print和println的区别实例解析

 更新时间:2025年06月25日 09:17:57   作者:菜鸡想成为大佬  
Rust中print!和println!宏用于输出,区别在于println!自动换行,print!不换行,前者适用于同一行内组合输出,后者用于独立日志或需换行场景,均支持格式化参数,如{},本文给大家介绍Rust中print和println的区别,感兴趣的朋友一起看看吧

print! 和 println! 的区别

Rust中的print!println!宏均用于输出内容,两者的核心差异在于是否自动追加换行符。

换行行为不同

print!输出后不换行,内容会紧接在前一次输出的末尾。
println!会在输出后自动添加换行符(\n),使后续输出从新行开始。

代码示例

fn main() {
    print!("Hello ");      // 不换行
    println!("World!");    // 换行
    print!("数字: ");
    for i in 1..=5 { print!("{} ", i); } // 同一行输出
    println!();            // 手动换行
    println!("第 1 行");   // 自动换行
    println!("第 2 行");
}

输出结果

Hello World!
数字: 1 2 3 4 5 
第 1 行
第 2 行

适用场景

print!的典型用途

  • 同一行内组合输出多个变量或文本。
  • 实现进度条等动态更新效果。
  • 需精确控制输出格式(如对齐)。

println!的常规用途

  • 输出独立完整的日志或调试信息。
  • 需要每段内容独占一行的场景。
  • 大多数默认输出需求。

两者均支持格式化参数(如{}占位符),用法完全一致,仅换行行为不同。

Rust 输出到命令行

在正式学习 Rust 语言以前,我们需要先学会怎样输出一段文字到命令行,这几乎是学习每一门语言之前必备的技能,因为输出到命令行几乎是语言学习阶段程序表达结果的唯一方式。

在之前的 Hello, World 程序中大概已经告诉了大家输出字符串的方式,但并不全面,大家可能很疑惑为什么 println!( "Hello World") 中的 println 后面还有一个 ! 符号,难道 Rust 函数之后都要加一个感叹号?显然并不是这样。println 不是一个函数,而是一个宏规则。这里不需要更深刻的挖掘宏规则是什么,后面的章节中会专门介绍,并不影响接下来的一段学习。

Rust 输出文字的方式主要有两种:println!() 和 print!()。这两个"函数"都是向命令行输出字符串的方法,区别仅在于前者会在输出的最后附加输出一个换行符。当用这两个"函数"输出信息的时候,第一个参数是格式字符串,后面是一串可变参数,对应着格式字符串中的"占位符",这一点与 C 语言中的 printf 函数很相似。但是,Rust 中格式字符串中的占位符不是 "% + 字母" 的形式,而是一对 {}

实例:runoob.rs 文件

fn main() {
    let a = 12;
    println!("a is {}", a);
}

使用 rustc 命令编译 runoob.rs 文件:

$ rustc runoob.rs   # 编译 runoob.rs 文件

编译后会生成 runoob 可执行文件:

$ ./runoob    # 执行 runoob

以上程序的输出结果是:

a is 12

如果我想把 a 输出两遍,那岂不是要写成:

println!("a is {}, a again is {}", a, a);

其实有更好的写法:

println!("a is {0}, a again is {0}", a);

在 {} 之间可以放一个数字,它将把之后的可变参数当作一个数组来访问,下标从 0 开始。

如果要输出 { 或 } 怎么办呢?格式字符串中通过 {{ 和 }} 分别转义代表 { 和 }。但是其他常用转义字符与 C 语言里的转义字符一样,都是反斜杠开头的形式。

fn main() { 
    println!("{{}}"); 
}

以上程序的输出结果是:

{}

到此这篇关于Rust中print和println的区别的文章就介绍到这了,更多相关rust print和println区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入了解Rust中引用与借用的用法

    深入了解Rust中引用与借用的用法

    这篇文章主要为大家详细介绍了Rust语言中引用与借用的使用,文中的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以了解一下
    2022-11-11
  • 详解Rust Substrate框架中的Runtime

    详解Rust Substrate框架中的Runtime

    ubstrate是一个区块链开发框架,它提供了一系列模块化和可扩展的组件,可以帮助开发人员快速构建自定义区块链。 Runtime是Substrate区块链的核心部分,文中有详细的代码示例,需要的朋友可以参考下
    2023-05-05
  • rust中间件actix_web在项目中的使用实战

    rust中间件actix_web在项目中的使用实战

    这篇文章主要介绍了rust中间件在项目中的使用实战,包括自定义中间件,日志中间件,Default headers,用户会话,错误处理的用法实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Rust中实例化动态对象的示例详解

    Rust中实例化动态对象的示例详解

    这篇文章主要为大家详细介绍了Rust中实例化动态对象的多种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-02-02
  • 使用Rust实现日志记录功能

    使用Rust实现日志记录功能

    这篇文章主要为大家详细介绍了使用Rust实现日志记录功能的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的可以参考一下
    2024-04-04
  • Rust语言从入门到精通系列之Iterator迭代器深入详解

    Rust语言从入门到精通系列之Iterator迭代器深入详解

    这篇文章主要为大家介绍了Rust语言从入门到精通系列之Iterator迭代器深入详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Rust使用libloader调用动态链接库

    Rust使用libloader调用动态链接库

    这篇文章主要为大家介绍了Rust使用libloader调用动态链接库示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 探索Rust切片与Go有何区别

    探索Rust切片与Go有何区别

    这篇文章主要为大家介绍了Rust切片与Go的区别探索,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Rust调用C程序的实现步骤

    Rust调用C程序的实现步骤

    本文主要介绍了Rust调用C程序的实现步骤,包括创建C函数、编译C代码、链接Rust和C代码等步骤,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Rust使用Trait对象实现多态的详细步骤

    Rust使用Trait对象实现多态的详细步骤

    本文详细介绍了在Rust中使用Trait对象实现运行时多态的方法,通过一个图形渲染系统的案例展示了如何统一管理不同类型的图形对象,文章涵盖了Trait对象的核心概念、语法、性能考量以及在实际项目中的应用场景,感兴趣的朋友跟随小编一起看看吧
    2025-11-11

最新评论