Input loop is part of Short Circuit's Console Program Basics selection.
Task

Read from a text stream either word-by-word or line-by-line until the stream runs out of data.

The stream will have an unknown amount of data on it.




 use std::io::{self, BufReader, Read, BufRead};
use std::fs::File;
 
fn main() {
    print_by_line(io::stdin())
        .expect("Could not read from stdin");
 
    File::open("/etc/fstab")
        .and_then(print_by_line)
        .expect("Could not read from file");
}
 
fn print_by_line<T: Read>(reader: T) -> io::Result<()> {
    let buffer = BufReader::new(reader);
    for line in buffer.lines() {
        println!("{}", line?)
    }
    Ok(())
}