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

Rust猜数字游戏注释掉println!语句后运行逻辑异常

问题原因

这是标准输出行缓冲机制导致的问题:

  • Rust 中的 print! 宏不会自动在输出末尾添加换行符,默认情况下终端的标准输出缓冲区只有遇到换行符、缓冲区被填满、或者程序主动刷新时,才会将缓冲区的内容输出到终端界面上。
  • 原来保留println!("In the loop");时,这句调用自动添加了换行符,会触发缓冲区刷新,你可以看到之前的大小提示内容;当你把这句注释掉之后,大小判断逻辑里的print!输出的内容一直留在缓冲区内没有被刷出,下一轮循环直接进入read_line等待用户输入,你看不到上一轮的猜大小提示,就会误以为程序没有正常运行。
解决方案

有两种常用修复方式:

方案1:将print!替换为println!

这是最简单的处理方式,println!自带的换行符会自动触发缓冲区刷新:

use rand::Rng;
use std::io;

fn main() {
    println!("Guess the number!");
    let secret_number = rand::thread_rng().gen_range(1..101);
    loop{
        // println!("In the loop");
        let mut guess = String::new();
        io::stdin()
            .read_line(&mut guess)
            .expect("Failed to read line");
        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => continue,
        };
        if secret_number == guess {
            println!("Correct");
            break;
        }else if secret_number > guess {
            println!("{} is smaller",guess);
        }else {
            println!("{} is bigger",guess);
        }
    }
}

方案2:手动刷新标准输出缓冲区

如果你不想在提示末尾加换行,可以手动调用刷新方法,需要先导入std::io::Write trait:

use rand::Rng;
use std::io;
use std::io::Write; // 导入刷新需要的trait

fn main() {
    println!("Guess the number!");
    let secret_number = rand::thread_rng().gen_range(1..101);
    loop{
        // println!("In the loop");
        let mut guess = String::new();
        io::stdin()
            .read_line(&mut guess)
            .expect("Failed to read line");
        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => continue,
        };
        if secret_number == guess {
            println!("Correct");
            break;
        }else if secret_number > guess {
            print!("{} is smaller",guess);
        }else {
            print!("{} is bigger",guess);
        }
        io::stdout().flush().expect("刷新输出失败"); // 手动刷新缓冲区
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:06:05