[Hướng dẫn Rust] Bài 2.3: Game đoán số phần 3 - So sánh input với số ngẫu nhiên
Bài viết hướng dẫn cách sử dụng cú pháp match trong Rust để so sánh số đoán của người chơi với số ngẫu nhiên. Các khái niệm shadowing biến, ép kiểu dữ liệu và sử dụng kiểu enum Ordering được trình bày chi tiết, giúp bạn hiểu cách xử lý logic trong game đoán số.
![[Hướng dẫn Rust] Bài 2.3: Game đoán số phần 3 - So sánh input với số ngẫu nhiên](https://news1.webcdn.lehuy.net/articles/2026/04/5b18423d8fb8245c7daed54cf17936f2.png)
[Hướng dẫn Rust] Bài 2.3: Game đoán số phần 3 - So sánh input với số ngẫu nhiên
Trong bài viết này, chúng ta sẽ tiếp tục triển khai game đoán số viết bằng Rust với các kỹ thuật quan trọng như sử dụng match để so sánh giá trị, shadowing biến, ép kiểu dữ liệu và làm quen với kiểu enum Ordering.
Tóm tắt nội dung chính
- Cách sử dụng biểu thức match trong Rust để so sánh hai giá trị.
- Khái niệm shadowing: định nghĩa lại biến cùng tên che khuất biến cũ.
- Ép kiểu dữ liệu từ chuỗi thành số nguyên.
- Sử dụng enum Ordering với ba giá trị: Less, Greater, Equal.
Mục tiêu game
- Phát sinh ngẫu nhiên một số nguyên trong khoảng từ 1 đến 100.
- Yêu cầu người chơi nhập giá trị đoán.
- So sánh số đoán với số bí mật và thông báo số đoán lớn hay nhỏ hơn số thật.
- Nếu đoán đúng, in thông báo thắng cuộc.
Cách triển khai code
Trước hết, chương trình tạo ra số ngẫu nhiên và yêu cầu người dùng nhập số đoán dưới dạng chuỗi:
use std::io;
use rand::Rng;
fn main() {
let range_number = rand::thread_rng().gen_range(1..101);
println!("Number Guessing Game");
println!("Guess a number");
let mut guess = String::new();
io::stdin().read_line(&mut guess).expect("Could not read the line");
println!("The number you guessed is:{}", guess);
println!("The secret number is: {}", range_number);
}
Bước 1: Ép kiểu dữ liệu và shadowing biến
Biến guess ban đầu là chuỗi. Để so sánh được với số kiểu u32, ta cần chuyển chuỗi thành số nguyên không dấu 32-bit. Rust cho phép ta định nghĩa lại biến guess cùng tên, gọi là shadowing, giúp biến mới có kiểu khác mà không gây lỗi:
let guess: u32 = guess.trim().parse().expect("Please enter a number");
guess.trim()loại bỏ khoảng trắng và xuống dòng thừa..parse()chuyển chuỗi thành số, trả về kiểuResultchứaOkhoặcErr..expect()dừng chương trình nếuparsekhông thành công và in lỗi.- Biến
guessmới sẽ được dùng cho các thao tác sau.
Ví dụ minh họa shadowing:
fn main() {
let a = 1;
println!("{}", a);
let a = "one";
println!("{}", a);
}
Kết quả sẽ in lần lượt 1 rồi "one" vì biến thứ hai che khuất biến đầu.
Bước 2: So sánh hai số với match và enum Ordering
Rust cung cấp kiểu enum Ordering với 3 giá trị:
Ordering::Less(bé hơn)Ordering::Greater(lớn hơn)Ordering::Equal(bằng nhau)
Ta dùng phương thức .cmp() để so sánh guess và range_number, trả về một trong 3 enum trên. Cú pháp match giúp xử lý từng trường hợp dễ dàng:
use std::cmp::Ordering;
match guess.cmp(&range_number) {
Ordering::Less => println!("Too small"),
Ordering::Greater => println!("Too big"),
Ordering::Equal => println!("You win"),
}
Ở đây:
.cmp(&range_number)so sánhguessvới tham chiếu đếnrange_number.matchlần lượt kiểm tra enum trả về để chạy câu lệnh phù hợp.
IDE cũng hỗ trợ suy luận kiểu: nhờ biến guess kiểu u32, biến range_number cũng được suy ra đúng kiểu để so sánh.
Mã nguồn hoàn chỉnh
use std::io;
use rand::Rng;
use std::cmp::Ordering;
fn main() {
let range_number = rand::thread_rng().gen_range(1..101);
println!("Number Guessing Game");
println!("Guess a number");
let mut guess = String::new();
io::stdin().read_line(&mut guess).expect("Could not read the line");
let guess: u32 = guess.trim().parse().expect("Please enter a number");
println!("The number you guessed is:{}", guess);
match guess.cmp(&range_number) {
Ordering::Less => println!("Too small"),
Ordering::Greater => println!("Too big"),
Ordering::Equal => println!("You win"),
}
println!("The secret number is: {}", range_number);
}
Kết quả
Chương trình sẽ đọc số nhập từ người dùng, sau đó in ra kết quả so sánh với số bí mật. Ví dụ:
- Nếu đoán nhỏ hơn số bí mật, in
"Too small". - Nếu đoán lớn hơn, in
"Too big". - Nếu đúng, in
"You win".
Hiển thị kết quả chương trình
Bài học này giúp bạn làm quen với các cú pháp quan trọng của Rust để xử lý kiểu dữ liệu, so sánh và điều khiển luồng chương trình. Đây là nền tảng để phát triển các ứng dụng tương tác và game đơn giản.
Bài viết liên quan

Phần mềm
Anthropic ra mắt Claude Opus 4.7: Nâng cấp mạnh mẽ cho lập trình nhưng vẫn thua Mythos Preview
16 tháng 4, 2026

Công nghệ
Qwen3.6-35B-A3B: Quyền năng Lập trình Agentic, Nay Đã Mở Cửa Cho Tất Cả
16 tháng 4, 2026

Công nghệ
Spotify thắng kiện 322 triệu USD từ nhóm pirate Anna's Archive nhưng đối mặt với bài toán thu hồi
16 tháng 4, 2026
