Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

Given the code below, how can I specifically check for EOF? Or rather, how can I distinguish between "there's nothing here" and "it exploded"?

match io::stdin().read_line() {
    Ok(l) => print!("{}", l),
    Err(_) => do_something_else(),
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
921 views
Welcome To Ask or Share your Answers For Others

1 Answer

From the documentation for read_line:

If successful, this function will return the total number of bytes read.

If this function returns Ok(0), the stream has reached EOF.

This means we can check for a successful value of zero:

use std::io::{self, BufRead};

fn main() -> io::Result<()> {
    let mut empty: &[u8] = &[];
    let mut buffer = String::new();

    let bytes = empty.read_line(&mut buffer)?;
    if bytes == 0 {
        println!("EOF reached");
    }

    Ok(())
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...