В этой главе обсуждается, как принимать значения из стандартного ввода (клавиатура) и отображать значения в стандартный вывод (консоль). В этой главе мы также обсудим передачу аргументов командной строки.
Типы чтения и записи
Стандартные библиотечные функции 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, вывод будет —