Rust 中的 Println!() 和 print!() 函数混淆

问题描述 投票:0回答:1

当我跑步时

fn main() {
    println!("Guess the Number!!!!!");
    print!("please Enter your Guess :-");
    let mut guess = String::new();
    // taking input
    io::stdin()
        .read_line(&mut guess)
        .expect("failed to readline");
    // parsing into Integer

    println!("you Guessed: {guess}");
}

它给出:

Guess the Number!!!!!
213
please Enter your Guess :-you Guessed: 213

但是在第二个代码块中:

fn main() {
    println!("Guess the Number!!!!!");
    println!("please Enter your Guess :-");
    let mut guess = String::new();
    // taking input
    io::stdin()
        .read_line(&mut guess)
        .expect("failed to readline");
    // parsing into Integer

    println!("you Guessed: {guess}");
}

它给出:

Guess the Number!!!!!
please Enter your Guess :-
213
you Guessed: 213

为什么在第一种情况下请输入你的猜测是在输入数字后运行

我期望这两种情况都不会影响语句的输出或控制流

rust
1个回答
0
投票

因为缓冲

print!
println!
写入stdout,stdout是行缓冲,因此写入stdout的数据将保留在缓冲区中,直到超过缓冲区大小或包含换行符

println!
总是写出换行符,因此它总是被刷新到操作系统。
print!
不会,因此内容会保留在缓冲区中,直到事件将其强制退出。

因此,在第一种情况下,当程序等待您的输入时,

"please Enter your Guess :-"
位于输出缓冲区中,并且仅在程序运行最后一行时才被刷新。

您可以flush流以强制输出数据。

© www.soinside.com 2019 - 2024. All rights reserved.