Một câu hỏi về hàm rand()?

Hì, mình có 1 thắc mắc về hàm rand() 1 chút! :kissing_smiling_eyes: 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 :smile:

tham khảo link này nha bạn :smiley:

#include <time.h>

srand(time(0));
2 Likes

À, 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 seedtime

/* 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 :smile:

2 Likes

Ở 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()

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?