Hì, mình có 1 thắc mắc về hàm rand() 1 chút! Mình có lập 1 mảng số nguyên dùng hàm rand(), nhưng tại sao mỗi lần chạy chương trình thì nó chỉ cho 1 dãy số duy nhất . Bạn nào có thể giải thích giúp mình tại sao và làm cách nào để nó mỗi lần F9 thì mỗi lần tạo ra dãy ngẫu nhiên mới được hok… Thank trước
Một câu hỏi về hàm rand()?
tham khảo link này nha bạn
#include <time.h>
srand(time(0));
À, vì cái hàm rand nó nhận vào một tham số gọi là seed
(gọi là nhân hoặc hạt) từ hàm srand
dùng để làm nhân cho cái hàm rand
này. Khi @Programmer_Riot chạy hàm này mà không có tham số seed
thì nó lấy số mặc định từ hàm srand
. Số này không đổi dẫn đến kết quả random cũng không đổi. Hình như Đạt có đọc ở đâu số này mặc định là 0
.
Đây là một đoạn code dùng hàm time
để làm nhân, tức là hàm time
này sẽ trả về một số thay đổi theo thời gian. Suy ra hàm srand
sẽ có seed
mới sau mỗi lần chạy. Vì thế mình sẽ nhận được chuỗi số random.
Đây là một đoạn code ví dụ sử dụng srand
với seed
là time
/* rand example: guess the number */
#include <stdio.h> /* printf, scanf, puts, NULL */
#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */
int main ()
{
int iSecret, iGuess;
/* initialize random seed: */
srand (time(NULL));
/* generate secret number between 1 and 10: */
iSecret = rand() % 10 + 1;
do {
printf ("Guess the number (1 to 10): ");
scanf ("%d",&iGuess);
if (iSecret<iGuess) puts ("The secret number is lower");
else if (iSecret>iGuess) puts ("The secret number is higher");
} while (iSecret!=iGuess);
puts ("Congratulations!");
return 0;
}
P/S: Video ở trên mà @TTmagic chỉ ra cũng nói rất rõ về điều này
Ở phần hàm rand() trong thư viện tham khảo C thì có mục:
Exceptions (C++)
No-throw guarantee: this function never throws exceptions.
Cái mục này nghĩa là gì vậy anh Đạt.
Phần này nói về khả năng trả về exception. Có nghĩa là thông báo lỗi khi có lỗi, chỉ hỗ trợ trong C++, C không có. Ở đây hàm rand() đảm bảo là sẽ không gửi về exception gì cả. Có nghĩa là người ta không có làm phần này cho hàm rand()