Rust - Đầu ra đầu vào
Chương này thảo luận về cách chấp nhận các giá trị từ đầu vào tiêu chuẩn (bàn phím) và hiển thị các giá trị cho đầu ra tiêu chuẩn (bàn điều khiển). Trong chương này, chúng ta cũng sẽ thảo luận về việc truyền các đối số dòng lệnh.
Các loại trình đọc và ghi
Các tính năng thư viện tiêu chuẩn của Rust cho đầu vào và đầu ra được sắp xếp theo hai đặc điểm:
- Read
- Write
Sr.No | Đặc điểm & Mô tả | Thí dụ |
---|---|---|
1 | Read Các kiểu triển khai Read có các phương thức cho đầu vào hướng byte. Họ được gọi là độc giả |
Stdin, Tệp |
2 | Write Các kiểu triển khai Viết hỗ trợ cả đầu ra văn bản hướng byte và UTF-8. Họ được gọi là nhà văn. |
Stdout, Tệp |
Đọc đặc điểm
Readerslà các thành phần mà chương trình của bạn có thể đọc các byte. Ví dụ bao gồm đọc đầu vào từ bàn phím, tệp, v.v.read_line() phương pháp của đặc điểm này có thể được sử dụng để đọc dữ liệu, từng dòng một, từ một tệp hoặc luồng đầu vào chuẩn.
Sr.No | Đặc điểm | Phương pháp & Mô tả |
---|---|---|
1 | Đọc | read_line(&mut line)->Result Đọc một dòng văn bản và nối nó vào dòng, đó là một Chuỗi. Giá trị trả về là io :: Kết quả, số byte được đọc. |
Hình minh họa - Đọc từ Bảng điều khiển - stdin ()
Các chương trình gỉ có thể phải chấp nhận các giá trị từ người dùng trong thời gian chạy. Ví dụ sau đây đọc các giá trị từ đầu vào chuẩn (Bàn phím) và in nó ra bảng điều khiển.
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);
}
Hàm stdin () trả về một xử lý cho dòng đầu vào chuẩn của quy trình hiện tại, mà hàm read_line có thể được áp dụng. Hàm này cố gắng đọc tất cả các ký tự có trong bộ đệm đầu vào khi nó gặp một ký tự cuối dòng.
Đầu ra
Enter your name :
Mohtashim
Hello , Mohtashim
no of bytes read , 10
Viết đặc điểm
Writerslà các thành phần mà chương trình của bạn có thể ghi byte vào. Ví dụ bao gồm in giá trị vào bảng điều khiển, ghi vào tệp, v.v. Phương thức write () của đặc điểm này có thể được sử dụng để ghi dữ liệu vào tệp hoặc luồng đầu ra chuẩn.
Sr.No | Đặc điểm | Phương pháp & Mô tả |
---|---|---|
1 | Viết | write(&buf)->Result Ghi một số byte trong buf lát vào luồng bên dưới. Nó trả về một io :: Kết quả, số byte được viết. |
Hình minh họa - Ghi vào Bảng điều khiển - stdout ()
Bản in! hoặc println! macro có thể được sử dụng để hiển thị văn bản trên bảng điều khiển. Tuy nhiên, bạn cũng có thể sử dụng hàm thư viện chuẩn write () để hiển thị một số văn bản ở đầu ra chuẩn.
Chúng ta hãy xem xét một ví dụ để hiểu điều này.
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();
}
Đầu ra
Tutorials Point
bytes written 15
Hàm thư viện tiêu chuẩn stdout () trả về một xử lý cho luồng đầu ra tiêu chuẩn của quy trình hiện tại,writechức năng có thể được áp dụng. Phương thức write () trả về một enum, Kết quả. Unrap () là một phương thức trợ giúp để trích xuất kết quả thực tế từ kiểu liệt kê. Phương thức Unrap sẽ gây hoảng sợ nếu xảy ra lỗi.
NOTE - File IO được thảo luận trong chương tiếp theo.
Đối số CommandLine
Các đối số CommandLine được chuyển cho một chương trình trước khi thực thi nó. Chúng giống như các tham số được truyền cho các hàm. Các tham số CommandLine có thể được sử dụng để truyền các giá trị cho hàm main () . Cácstd::env::args() trả về các đối số dòng lệnh.
Hình minh họa
Ví dụ sau đây chuyển các giá trị dưới dạng đối số commandLine cho hàm main (). Chương trình này được tạo ra trong một tên tập tin 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
}
}
Chương trình sẽ tạo một tệp main.exe sau khi được biên dịch. Nhiều tham số dòng lệnh phải được phân tách bằng dấu cách. Thực thi main.exe từ thiết bị đầu cuối dưới dạng main.exe xin chào hướng dẫn viên .
NOTE- hello và tutorialspoint là các đối số dòng lệnh.
Đầu ra
No of elements in arguments is :3
[main.exe]
[hello]
[tutorialspoint]
Kết quả hiển thị 3 đối số vì main.exe là đối số đầu tiên.
Hình minh họa
Chương trình sau đây tính tổng các giá trị được truyền dưới dạng đối số dòng lệnh. Một danh sách các giá trị số nguyên cách nhau bởi dấu cách được chuyển vào chương trình.
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);
}
Khi thực thi chương trình dưới dạng main.exe 1 2 3 4, đầu ra sẽ là:
No of elements in arguments is :5
sum is 10