Введение#
В этой статье разберём как получать ввод от пользователя в терминальном приложении на Rust с использованием стандартной библиотеки.
Казалось бы, простая задача - спросить имя и поприветствовать пользователя. Но даже в этом примере кроются важные особенности языка: работа со стандартным вводом, ссылки, обработка ошибок и типы.
Что потребуется?#
Нам понадобится модуль std::io который входит в стандартную библиотеку Rust. Он предоставляет доступ к stdin() — стандартному вводу. Чтобы использовать его, нужно подключить:
use std::io;
Пример: Приветствие пользователя#
Начнём с минимального приложения:
use std::io;
fn main() {
    let mut input 
    1
 = String::new(); 
    2
    println!("Enter your name:");
    io::stdin().read_line(&mut input).unwrap(); 
    3
    println!("Hello {input}");
}
Что здесь важно:#
- &mut input1 - передаём изменяемую ссылку, потому что- read_lineтребует возможность изменить содержимое.
- String::new()2 - создаёт пустую строку для хранения ввода.
- .unwrap()- в данном случае упрощённая обработка- Result. Позже заменим это на более надёжный способ. 3
Коротко о типах#
Функция read_line возвращает Result<usize> где usize — количество байт прочитанных из ввода.
usize — это целое без знака, размер которого зависит от архитектуры машины (например, 64-битный на x86_64).Добавим отладочную информацию:#
use std::io;
fn main() {
    let mut input = String::new();
    println!("Enter your name:");
    match io::stdin().read_line(&mut input) {
        Ok(n) => {
            println!("{n} bytes read");
            println!("Hello {input}");
        }
        Err(error) => println!("error: {error}"),
    }
}
Пример вывода:#
Enter your name:
developer
10 bytes read
Hello developer
"developer" — это 9 символов + 1 символ новой строки \n автоматически добавляемый после нажатия Enter.Практическое применение#
Такой ввод часто используется в CLI-интерфейсах: для подтверждения действия, выбора режима работы, простых форм.
Особенности ввода в CLI:
- read_lineблокирует выполнение, пока пользователь не введёт строку.
- Строка сохраняет символ новой строки \n, что иногда требуется удалять с помощью.trim().
Совет: чтобы избавиться от
\n, используйте.trim()let name = input.trim(); println!("Hello {name}");
Заключение#
Мы познакомились с базовым способом взаимодействия с пользователем в консольном приложении на Rust. Хотя код получился коротким. Под капотом - работа с изменяемыми ссылками, возвратом Result, безопасной обработкой ввода и особенностями строк.
На этом всё. Пробуйте, меняйте, экспериментируйте.