夏喻 發表於 2025-6-25 09:17:57

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

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>print! 和 println! 的区别</li><li>换行行为不同</li><li>代码示例</li><li>适用场景</li><li>Rust 输出到命令行</li><li>实例:runoob.rs 文件</li></ul></div><p class="maodian"></p><h2>print! 和 println! 的区别</h2>
<p>Rust中的<code>print!</code>和<code>println!</code>宏均用于输出内容,两者的核心差异在于是否自动追加换行符。</p>
<p class="maodian"></p><h2>换行行为不同</h2>
<p><code>print!</code>输出后不换行,内容会紧接在前一次输出的末尾。<br /><code>println!</code>会在输出后自动添加换行符(<code>\n</code>),使后续输出从新行开始。</p>
<p class="maodian"></p><h2>代码示例</h2>
<div class="jb51code"><pre class="brush:plain;">fn main() {
    print!("Hello ");      // 不换行
    println!("World!");    // 换行
    print!("数字: ");
    for i in 1..=5 { print!("{} ", i); } // 同一行输出
    println!();            // 手动换行
    println!("第 1 行");   // 自动换行
    println!("第 2 行");
}</pre></div>
<p><strong>输出结果</strong></p>
<blockquote><p>Hello World!<br />数字: 1 2 3 4 5&nbsp;<br />第 1 行<br />第 2 行</p></blockquote>
<p class="maodian"></p><h2>适用场景</h2>
<p><code>print!</code>的典型用途</p>
<ul><li>同一行内组合输出多个变量或文本。</li><li>实现进度条等动态更新效果。</li><li>需精确控制输出格式(如对齐)。</li></ul>
<p><code>println!</code>的常规用途</p>
<ul><li>输出独立完整的日志或调试信息。</li><li>需要每段内容独占一行的场景。</li><li>大多数默认输出需求。</li></ul>
<p>两者均支持格式化参数(如<code>{}</code>占位符),用法完全一致,仅换行行为不同。</p>
<p class="maodian"></p><h2>Rust 输出到命令行</h2>
<p>在正式学习 Rust 语言以前,我们需要先学会怎样输出一段文字到命令行,这几乎是学习每一门语言之前必备的技能,因为输出到命令行几乎是语言学习阶段程序表达结果的唯一方式。</p>
<p>在之前的 Hello, World 程序中大概已经告诉了大家输出字符串的方式,但并不全面,大家可能很疑惑为什么 println!( &quot;Hello World&quot;) 中的 println 后面还有一个&nbsp;!&nbsp;符号,难道 Rust 函数之后都要加一个感叹号?显然并不是这样。println 不是一个函数,而是一个宏规则。这里不需要更深刻的挖掘宏规则是什么,后面的章节中会专门介绍,并不影响接下来的一段学习。</p>
<p>Rust 输出文字的方式主要有两种:println!()&nbsp;和&nbsp;print!()。这两个&quot;函数&quot;都是向命令行输出字符串的方法,区别仅在于前者会在输出的最后附加输出一个换行符。当用这两个&quot;函数&quot;输出信息的时候,第一个参数是格式字符串,后面是一串可变参数,对应着格式字符串中的&quot;占位符&quot;,这一点与 C 语言中的 printf 函数很相似。但是,Rust 中格式字符串中的占位符不是&nbsp;<strong>&quot;% + 字母&quot;</strong>&nbsp;的形式,而是一对&nbsp;<strong>{}</strong>。</p>
<p class="maodian"></p><h2>实例:runoob.rs 文件</h2>
<div class="jb51code"><pre class="brush:plain;">fn main() {
    let a = 12;
    println!("a is {}", a);
}</pre></div>
<p>使用&nbsp;rustc&nbsp;命令编译 runoob.rs 文件:</p>
<div class="jb51code"><pre class="brush:bash;">$ rustc runoob.rs   # 编译 runoob.rs 文件</pre></div>
<p>编译后会生成&nbsp;<strong>runoob</strong>&nbsp;可执行文件:</p>
<div class="jb51code"><pre class="brush:bash;">$ ./runoob    # 执行 runoob</pre></div>
<p>以上程序的输出结果是:</p>
<blockquote><p>a is 12</p></blockquote>
<p>如果我想把 a 输出两遍,那岂不是要写成:</p>
<div class="jb51code"><pre class="brush:bash;">println!("a is {}, a again is {}", a, a);</pre></div>
<p>其实有更好的写法:</p>
<div class="jb51code"><pre class="brush:bash;">println!("a is {0}, a again is {0}", a);</pre></div>
<p>在&nbsp;{}&nbsp;之间可以放一个数字,它将把之后的可变参数当作一个数组来访问,下标从 0 开始。</p>
<p>如果要输出&nbsp;<strong>{</strong>&nbsp;或&nbsp;<strong>}</strong>&nbsp;怎么办呢?格式字符串中通过&nbsp;<strong>{{</strong>&nbsp;和&nbsp;<strong>}}</strong>&nbsp;分别转义代表 { 和 }。但是其他常用转义字符与 C 语言里的转义字符一样,都是反斜杠开头的形式。</p>
<div class="jb51code"><pre class="brush:cpp;">fn main() {
    println!("{{}}");
}</pre></div>
<p>以上程序的输出结果是:</p>
<blockquote><p>{}</p></blockquote>
<p>到此这篇关于Rust中print和println的区别的文章就介绍到这了,更多相关rust print和println区别内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>Rust 语言println! 宏的格式占位符详解</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: Rust中print和println的区别实例解析