Учебники

Rust — Входной Выход

В этой главе обсуждается, как принимать значения из стандартного ввода (клавиатура) и отображать значения в стандартный вывод (консоль). В этой главе мы также обсудим передачу аргументов командной строки.

Типы чтения и записи

Стандартные библиотечные функции Rust для ввода и вывода организованы по двум признакам:

  • Читать
  • Написать
Sr.No Черта и описание пример
1

Читать

Типы, реализующие Read, имеют методы для байтово-ориентированного ввода. Они называются читателями

STDIN, File
2

Написать

Типы, которые реализуют запись, поддерживают как байт-ориентированный, так и текстовый вывод UTF-8. Их называют писателями.

Stdout, File

Читать

Типы, реализующие Read, имеют методы для байтово-ориентированного ввода. Они называются читателями

Написать

Типы, которые реализуют запись, поддерживают как байт-ориентированный, так и текстовый вывод UTF-8. Их называют писателями.

Чтение черт

Считыватели — это компоненты, с которых ваша программа может читать байты. Примеры включают чтение ввода с клавиатуры, файлов и т. Д. Метод read_line () этой черты можно использовать для чтения данных, по одной строке за раз, из файла или стандартного потока ввода.

Sr.No Черта характера Метод и описание
1 Читать

read_line (& mut line) -> Результат

Читает строку текста и добавляет ее к строке, которая является строкой. Возвращаемое значение — io :: Result, количество прочитанных байтов.

read_line (& mut line) -> Результат

Читает строку текста и добавляет ее к строке, которая является строкой. Возвращаемое значение — io :: Result, количество прочитанных байтов.

Иллюстрация — Чтение с консоли — stdin ()

Программы Rust могут принимать значения от пользователя во время выполнения. В следующем примере значения считываются из стандартного ввода (клавиатура) и выводятся на консоль.

fn main(){
   let mut line = String::new();
   println!("Enter your name :");
   let b1 = std::io::stdin().read_line(&mut line).unwrap();
   println!("Hello , {}", line);
   println!("no of bytes read , {}", b1);
}

Функция stdin () возвращает дескриптор стандартного входного потока текущего процесса, к которому может быть применена функция read_line . Эта функция пытается прочитать все символы, присутствующие во входном буфере, когда она встречает символ конца строки.

Выход

Enter your name :
Mohtashim
Hello , Mohtashim
no of bytes read , 10

Написать черта

Писатели — это компоненты, в которые ваша программа может записывать байты. Примеры включают печать значений в консоль, запись в файлы и т. Д. Метод write () этой черты можно использовать для записи данных в файл или стандартный поток вывода.

Sr.No Черта характера Метод и описание
1 Написать

написать (& ЬиЕ) -> Результат

Записывает некоторые байты в буфере слайса в основной поток. Возвращает io :: Result, количество записанных байтов.

написать (& ЬиЕ) -> Результат

Записывает некоторые байты в буфере слайса в основной поток. Возвращает io :: Result, количество записанных байтов.

Иллюстрация — Запись в консоль — stdout ()

Печать! или распечатать! макросы можно использовать для отображения текста на консоли. Однако вы также можете использовать стандартную библиотечную функцию write () для отображения некоторого текста в стандартный вывод.

Давайте рассмотрим пример, чтобы понять это.

use std::io::Write;
fn main() {
   let b1 = std::io::stdout().write("Tutorials ".as_bytes()).unwrap();
   let b2 = std::io::stdout().write(String::from("Point").as_bytes()).unwrap();
   std::io::stdout().write(format!("\nbytes written {}",(b1+b2)).as_bytes()).unwrap();
}

Выход

Tutorials Point
bytes written 15

Функция стандартной библиотеки stdout () возвращает дескриптор стандартного потока вывода текущего процесса, к которому может быть применена функция записи . Метод write () возвращает перечисление Result. Unwrap () — это вспомогательный метод для извлечения фактического результата из перечисления. Метод unwrap отправит панику, если произойдет ошибка.

ПРИМЕЧАНИЕ. — Файл IO обсуждается в следующей главе.

Аргументы командной строки

Аргументы CommandLine передаются программе перед ее выполнением. Они как параметры, передаваемые в функции. Параметры CommandLine могут использоваться для передачи значений в функцию main () . Std :: env :: args () возвращает аргументы командной строки.

иллюстрация

В следующем примере значения передаются в качестве аргументов commandLine в функцию main (). Программа создана в файле с именем main.rs.

//main.rs
fn main(){
   let cmd_line = std::env::args();
   println!("No of elements in arguments is :{}",cmd_line.len()); 
   //print total number of values passed
   for arg in cmd_line {
      println!("[{}]",arg); //print all values passed 
      as commandline arguments
   }
}

Программа сгенерирует файл main.exe после компиляции. Несколько параметров командной строки должны быть разделены пробелом. Выполните main.exe из терминала, как main.exe hello tutorialspoint .

ПРИМЕЧАНИЕ.hello и tutorialspoint являются аргументами командной строки.

Выход

No of elements in arguments is :3
[main.exe]
[hello]
[tutorialspoint]

Вывод показывает 3 аргумента, так как main.exe является первым аргументом.

иллюстрация

Следующая программа вычисляет сумму значений, переданных в качестве аргументов командной строки. Список целочисленных значений, разделенных пробелом, передается программе.

fn main(){
   let cmd_line = std::env::args();
   println!("No of elements in arguments is 
   :{}",cmd_line.len()); 
   // total number of elements passed

   let mut sum = 0;
   let mut has_read_first_arg = false;

   //iterate through all the arguments and calculate their sum

   for arg in cmd_line {
      if has_read_first_arg { //skip the first argument since it is the exe file name
         sum += arg.parse::<i32>().unwrap();
      }
      has_read_first_arg = true; 
      // set the flag to true to calculate sum for the subsequent arguments.
   }
   println!("sum is {}",sum);
}

При выполнении программы от имени main.exe 1 2 3 4, вывод будет —