Skip to content

Add std::io::input simple input function. #74178

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 69 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
826f0cb
Add input function
sHaDoW-54 Jul 9, 2020
7f49b83
Update stdio.rs
sHaDoW-54 Jul 9, 2020
3221594
Update stdio.rs
sHaDoW-54 Jul 9, 2020
ef12ef8
Update stdio.rs
sHaDoW-54 Jul 9, 2020
d75a8a6
Update stdio.rs
sHaDoW-54 Jul 9, 2020
a336e60
Update stdio.rs
sHaDoW-54 Jul 9, 2020
c635807
Update stdio.rs
sHaDoW-54 Jul 9, 2020
23ad1f0
Update stdio.rs
sHaDoW-54 Jul 10, 2020
6885ef3
Update stdio.rs
sHaDoW-54 Jul 10, 2020
3248baa
Update mod.rs
sHaDoW-54 Jul 10, 2020
89b6827
Update stdio.rs
sHaDoW-54 Jul 10, 2020
6ed2162
Update stdio.rs
sHaDoW-54 Jul 10, 2020
d1c652b
Update stdio.rs
sHaDoW-54 Jul 10, 2020
aaebbe3
Update stdio.rs
sHaDoW-54 Jul 10, 2020
14f85a5
Update mod.rs
sHaDoW-54 Jul 10, 2020
5f10747
Update lib.rs
sHaDoW-54 Jul 11, 2020
26eab4f
Update stdio.rs
sHaDoW-54 Jul 11, 2020
e52d227
Update stdio.rs
sHaDoW-54 Jul 11, 2020
b819421
Update stdio.rs
sHaDoW-54 Jul 11, 2020
92b09e7
Update stdio.rs
sHaDoW-54 Jul 11, 2020
53454c2
Update src/libstd/io/stdio.rs
sHaDoW-54 Jul 11, 2020
319f2ae
Update src/libstd/io/stdio.rs
sHaDoW-54 Jul 11, 2020
11df63a
Update stdio.rs
sHaDoW-54 Jul 11, 2020
0a3a661
Update src/libstd/io/stdio.rs
sHaDoW-54 Jul 11, 2020
a164ea3
Update src/libstd/io/stdio.rs
sHaDoW-54 Jul 11, 2020
5bd0154
Update src/libstd/io/stdio.rs
sHaDoW-54 Jul 11, 2020
800a5a9
Update src/libstd/io/stdio.rs
sHaDoW-54 Jul 11, 2020
9a0326f
Update stdio.rs
sHaDoW-54 Jul 11, 2020
8c1ea9d
Update mod.rs
sHaDoW-54 Jul 11, 2020
e8a0939
Update lib.rs
sHaDoW-54 Jul 11, 2020
320580d
Update stdio.rs
sHaDoW-54 Jul 11, 2020
c97c811
Update stdio.rs
sHaDoW-54 Jul 11, 2020
7c59e80
Update stdio.rs
sHaDoW-54 Jul 11, 2020
9d6be00
Update stdio.rs
sHaDoW-54 Jul 11, 2020
df08102
Update stdio.rs
sHaDoW-54 Jul 12, 2020
9bdd06f
Update stdio.rs
sHaDoW-54 Jul 12, 2020
3db9781
Update src/libstd/io/stdio.rs
sHaDoW-54 Jul 12, 2020
f95ac81
Update src/libstd/io/stdio.rs
sHaDoW-54 Jul 12, 2020
c01126a
Update src/libstd/io/mod.rs
sHaDoW-54 Jul 12, 2020
f3d3e21
Update mod.rs
sHaDoW-54 Jul 12, 2020
7cb92bf
Update stdio.rs
sHaDoW-54 Jul 12, 2020
ba79fc5
Update stdio.rs
sHaDoW-54 Jul 12, 2020
c2f6e9d
Update stdio.rs
sHaDoW-54 Jul 13, 2020
e094e5d
Update stdio.rs
sHaDoW-54 Jul 13, 2020
dde8923
Update stdio.rs
sHaDoW-54 Jul 14, 2020
93cea0d
Update stdio.rs
sHaDoW-54 Jul 14, 2020
8fa04d3
Update stdio.rs
sHaDoW-54 Jul 14, 2020
8b5c331
Update stdio.rs
sHaDoW-54 Jul 14, 2020
a5e7d8d
Update stdio.rs
sHaDoW-54 Jul 14, 2020
95ef71a
Update stdio.rs
sHaDoW-54 Jul 14, 2020
136c19f
Update stdio.rs
sHaDoW-54 Jul 15, 2020
39fd999
Update stdio.rs
sHaDoW-54 Jul 16, 2020
4d39e9d
Update src/libstd/io/stdio.rs
sHaDoW-54 Jul 17, 2020
53eb268
Update src/libstd/io/stdio.rs
sHaDoW-54 Jul 17, 2020
9c2f0c5
Update src/libstd/io/stdio.rs
sHaDoW-54 Jul 17, 2020
92a002d
Update src/libstd/io/stdio.rs
sHaDoW-54 Jul 17, 2020
834af36
Update src/libstd/io/stdio.rs
sHaDoW-54 Jul 17, 2020
a028a0c
Update stdio.rs
sHaDoW-54 Jul 17, 2020
312668d
Update stdio.rs
sHaDoW-54 Jul 17, 2020
9a64f6e
Update mod.rs
sHaDoW-54 Jul 17, 2020
004d0db
Update lib.rs
sHaDoW-54 Jul 17, 2020
ea79d08
Update src/libstd/io/stdio.rs
sHaDoW-54 Jul 21, 2020
ed8a44a
Update stdio.rs
sHaDoW-54 Jul 21, 2020
d87d868
Update stdio.rs
sHaDoW-54 Jul 21, 2020
898c99d
Update stdio.rs
sHaDoW-54 Jul 21, 2020
44d7035
Update stdio.rs
sHaDoW-54 Jul 21, 2020
e78837f
Update src/libstd/io/stdio.rs
sHaDoW-54 Jul 21, 2020
28ebe13
Update stdio.rs
sHaDoW-54 Jul 23, 2020
7cb9a05
Update stdio.rs
sHaDoW-54 Jul 23, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/libstd/io/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,8 @@ pub use self::buffered::{BufReader, BufWriter, LineWriter};
pub use self::cursor::Cursor;
#[stable(feature = "rust1", since = "1.0.0")]
pub use self::error::{Error, ErrorKind, Result};
#[unstable(feature = "input", issue = "none")]
pub use self::stdio::input;
#[stable(feature = "rust1", since = "1.0.0")]
pub use self::stdio::{stderr, stdin, stdout, Stderr, Stdin, Stdout};
#[stable(feature = "rust1", since = "1.0.0")]
Expand Down
42 changes: 41 additions & 1 deletion src/libstd/io/stdio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ use crate::io::prelude::*;
use crate::cell::RefCell;
use crate::fmt;
use crate::io::lazy::Lazy;
use crate::io::{self, BufReader, Initializer, IoSlice, IoSliceMut, LineWriter};
use crate::io::{
self, BufReader, Error, ErrorKind, Initializer, IoSlice, IoSliceMut, LineWriter, Result, Write,
};
use crate::sync::{Arc, Mutex, MutexGuard, Once};
use crate::sys::stdio;
use crate::sys_common::remutex::{ReentrantMutex, ReentrantMutexGuard};
Expand Down Expand Up @@ -872,6 +874,44 @@ impl fmt::Debug for StderrLock<'_> {
}
}

/// Prints the given `str` and reads a [`String`] from
/// [standard input](Stdin). The trailing newline is stripped.
/// Gives an error on EOF (end of file).
///
/// # Note
///
/// If you require more explicit control over capturing
/// user input, see the [`Stdin::read_line`] method.
///
/// # Examples
///
/// ```no_run
/// #![feature(input)]
/// use std::io;
///
/// fn main() {
/// let name = io::input("Enter name: ").expect("input failed!");
///
/// println!("Your name is {}!", name);
/// }
/// ```
#[unstable(
feature = "input",
reason = "this function may be replaced with a more general mechanism",
issue = "none"
)]
pub fn input(prompt: &str) -> Result<String> {
let stdout = stdout();
let mut lock = stdout.lock();
lock.write_all(prompt.as_bytes())?;
lock.flush()?;
let mut input = String::new();
match stdin().read_line(&mut input)? {
0 => Err(Error::new(ErrorKind::UnexpectedEof, "input reached eof unexpectedly")),
_ => Ok(String::from(input.trim_end_matches(&['\n', '\r'][..]))),
}
}

/// Resets the thread-local stderr handle to the specified writer
///
/// This will replace the current thread's stderr handle, returning the old
Expand Down
1 change: 1 addition & 0 deletions src/libstd/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,7 @@
#![feature(global_asm)]
#![feature(hash_raw_entry)]
#![feature(hashmap_internals)]
#![feature(input)]
#![feature(int_error_internals)]
#![feature(int_error_matching)]
#![feature(into_future)]
Expand Down