We use input handling to get information from the user while the program is running. This lets the program react to what the user types.
When you want to ask the user for their name.
When you need to get a number from the user to do math.
When you want the user to choose an option from a menu.
When you want to read a line of text from the user.
When you want to pause the program until the user presses Enter.
Syntax
Rust
use std::io;
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
println!("You typed: {}", input.trim());
}
We create a mutable String to store what the user types.
read_line reads the input and adds it to the String.
Examples
This example asks for the user's name and greets them.
Rust
use std::io;
fn main() {
let mut name = String::new();
println!("Enter your name:");
io::stdin().read_line(&mut name).expect("Failed to read line");
println!("Hello, {}!", name.trim());
}
This example reads a number as text, then converts it to an integer.
Rust
use std::io;
fn main() {
let mut number = String::new();
println!("Enter a number:");
io::stdin().read_line(&mut number).expect("Failed to read line");
let number: i32 = number.trim().parse().expect("Please type a number!");
println!("You typed the number: {}", number);
}
Sample Program
This program waits for the user to type something and then shows it back.
Rust
use std::io;
fn main() {
let mut input = String::new();
println!("Please type something and press Enter:");
io::stdin().read_line(&mut input).expect("Failed to read line");
println!("You typed: {}", input.trim());
}
OutputSuccess
Important Notes
Always use trim() to remove the newline character from the input.
Use expect() to handle errors simply during input reading.
To convert input to numbers, use parse() and handle possible errors.
Summary
Input handling lets your program talk with the user.
Use io::stdin().read_line() to get user input as text.
Remember to trim and convert input when needed.
Practice
(1/5)
1. What does the Rust function io::stdin().read_line(&mut input) do in a program?
easy
A. It clears the input buffer.
B. It writes a line of text to the screen.
C. It reads a line of text from the user and stores it in the variable input.
D. It converts a string to a number.
Solution
Step 1: Understand the function purpose
io::stdin().read_line(&mut input) reads user input from the keyboard as a string.
Step 2: Recognize the role of input
The input is stored in the mutable variable input passed by reference.
Final Answer:
It reads a line of text from the user and stores it in the variable input. -> Option C
Quick Check:
read_line reads user input [OK]
Hint: read_line reads user input into a variable [OK]
Common Mistakes:
Thinking read_line writes output
Confusing input reading with clearing buffer
Assuming it converts types automatically
2. Which of the following Rust code snippets correctly reads a line of input and trims whitespace?
easy
A. let input = io::stdin().read_line().trim();
B. let mut input = String::new(); io::stdin().read_line(&mut input).expect("Failed"); let input = input.trim();
C. io::stdin().read_line(input); let input = input.trim();
D. let mut input = String::new(); io::stdin().read_line(input); input.trim();
Solution
Step 1: Check correct usage of read_line
It requires a mutable String reference: read_line(&mut input).
Step 2: Confirm trimming is done on the input string
let mut input = String::new(); io::stdin().read_line(&mut input).expect("Failed"); let input = input.trim(); -> Option B
Quick Check:
read_line needs &mut String and trim() cleans input [OK]
Hint: Use &mut String and call trim() after read_line [OK]
Common Mistakes:
Forgetting &mut before input
Calling trim() on read_line() result
Not creating a mutable String first
3. What will be the output of this Rust code if the user inputs 42?
use std::io;
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed");
let num: i32 = input.trim().parse().expect("Not a number");
println!("Number plus 10 is {}", num + 10);
}
medium
A. Number plus 10 is 52
B. Number plus 10 is 42
C. Not a number
D. Failed
Solution
Step 1: Read and parse input
The input string "42" is trimmed and parsed to integer 42 successfully.
Step 2: Add 10 and print
42 + 10 equals 52, so the output prints "Number plus 10 is 52".
Final Answer:
Number plus 10 is 52 -> Option A
Quick Check:
42 + 10 = 52 [OK]
Hint: Trim and parse input before math operations [OK]
Common Mistakes:
Not trimming input before parse
Parsing input as wrong type
Ignoring parse errors
4. Identify the error in this Rust code snippet that reads an integer from input:
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed");
let num: i32 = input.parse().expect("Not a number");
println!("Number: {}", num);
medium
A. parse() called without trimming input
B. Missing &mut before input in read_line
C. input is not mutable
D. println! macro syntax error
Solution
Step 1: Check read_line usage
read_line correctly uses &mut input and input is mutable.
Step 2: Identify parse error cause
parse() is called on input without trimming, so newline remains causing parse failure.
Final Answer:
parse() called without trimming input -> Option A
Quick Check:
Always trim input before parse() [OK]
Hint: Always trim input string before parsing to number [OK]
Common Mistakes:
Forgetting to trim input before parse
Assuming read_line returns trimmed string
Misusing &mut in read_line
5. You want to read multiple numbers from user input separated by spaces and store them in a vector of integers. Which Rust code correctly does this?
use std::io;
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed");
let numbers: Vec<i32> = input.trim().split_whitespace()
.map(|x| x.parse().expect("Not a number"))
.collect();
println!("Numbers: {:?}", numbers);
}
hard
A. read_line() cannot read multiple numbers at once.
B. Fails because split_whitespace() does not split strings.
C. parse() should be called before split_whitespace().
D. Correctly reads and parses space-separated numbers into a vector.
Solution
Step 1: Read input line and trim
Input is read as a string and trimmed to remove trailing whitespace.
Step 2: Split and parse each number
split_whitespace() splits input by spaces, map parses each piece to i32, collect gathers into vector.
Final Answer:
Correctly reads and parses space-separated numbers into a vector. -> Option D