Trong quá trình kiểm thử chương trình, vấn đề nhập số liệu có thể làm bạn cảm thấy vô cùng nhàm chán, mất thời gian và thậm chí là khiến bạn căng thẳng. Đặc biệt, điều này càng dễ dàng xảy ra hơn nếu bạn gặp phải lỗi phải sửa đi sửa lại nhiều lần hoặc số lượng số liệu cần nhập quá nhiều. Bài viết này hướng dẫn sử dụng 1 hàm tiện ích rand()
để sinh ra các số ngẫu nhiên.
Tạo 1 số ngẫu nhiên
Để tạo ra một số ngẫu nhiên, cstdlib
hỗ trợ hàm rand(). Hàm này trả về cho chúng ta kết quả là một giá trị nguyên có giá trị từ 0 đến RAND_MAX
, với RAND_MAX
là một hằng số được định nghĩa trong thư viện <cstdlib>
. Để sử dụng cần khai báo thư viện <cstdlib>
.
Ví dụ:
#include <cstdlib> #include <ctime> int main() { srand(time(NULL)); int res = rand(); return 0; }
Lưu ý: Giá trị RAND_MAX
trên từng trình biên dịch là không giống nhau. Chẳng hạn như với trình biên dịch của Visual Studio 2019 cho C++, giá trị RAND_MAX
là 32767. Kiểm tra giá trị này một cách dễ dàng bằng đoạn code ngắn gọn sau.
#include <cstdlib> #include <iostream> using namespace std; int main() { cout << RAND_MAX; return 0; }
Tạo số ngẫu nhiên thay đổi theo thời gian
Khi sử dụng hàm rand()
để tạo ra một số ngẫu nhiên bất kì như trên. Ở bất kỳ lần chạy nào các kết quả ở mỗi lần chạy đều giống nhau theo thứ tự. Để mỗi lần chạy cho ra 1 chuỗi kết quả khác nhau, thay đổi random seed bằng cách sử dụng hàm srand()
và truyền vào 1 con số có thể thay đổi được (thông thường sử dụng đơn vị thời gian hiện tại time(NULL)
ở mỗi lần chạy - thư viện <ctime>
). Đặt dòng code srand(time(NULL))
khi chương trình bắt đầu trước khi hàm rand()
được sử dụng.
#include <cstdlib> #include <ctime> int main() { srand(time(NULL)); int res = rand(); return 0; }
Tạo số ngẫu nhiên với một khoảng xác định
Hai cách sử dụng trên đều cho kết quả giá trị ngẫu nhiên là những giá trị trong khoảng từ 0 đến RAND_MAX
. Để tạo ra một giá trị ngẫu nhiên trong khoảng xác định, sử dụng công thức rand() % (max – min + 1) + min
để nhận kết quả trong khoảng từ min đến max.
Ví dụ: random giá trị trong khoảng [3, 50]
#include <cstdlib> #include <ctime> int main() { srand(time(NULL)); int res = rand() % (50 - 3 + 1) + 3; return 0; }