Перейти к основному содержимому
  1. Rust/

Ввод данных от пользователя в Rust: как использовать stdin

344 слов·2 минут· loading · loading · ·
Rust Dev
about-rust - Эта статья часть цикла.
Часть 18: Эта статья

Введение
#

В этой статье разберём как получать ввод от пользователя в терминальном приложении на 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 input 1 - передаём изменяемую ссылку, потому что 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
Почему 10 байт? Строка "developer" — это 9 символов + 1 символ новой строки \n автоматически добавляемый после нажатия Enter.

Практическое применение
#

Такой ввод часто используется в CLI-интерфейсах: для подтверждения действия, выбора режима работы, простых форм.

Особенности ввода в CLI:

  • read_line блокирует выполнение, пока пользователь не введёт строку.
  • Строка сохраняет символ новой строки \n, что иногда требуется удалять с помощью .trim().

Совет: чтобы избавиться от \n, используйте .trim()

let name = input.trim();
println!("Hello {name}");

Заключение
#

Мы познакомились с базовым способом взаимодействия с пользователем в консольном приложении на Rust. Хотя код получился коротким. Под капотом - работа с изменяемыми ссылками, возвратом Result, безопасной обработкой ввода и особенностями строк.

На этом всё. Пробуйте, меняйте, экспериментируйте.

about-rust - Эта статья часть цикла.
Часть 18: Эта статья

Связанные статьи

Arc в Rust: потокобезопасное разделённое владение
574 слов·3 минут· loading · loading
Rust Dev
Rc в Rust: Руководство по разделённому владению и RefCell
771 слово·4 минут· loading · loading
Rust Dev
Заимствование (Borrowing) в Rust
796 слов·4 минут· loading · loading
Rust Dev