Hỏi về câu lệnh rand trong C++

Em làm random như thế này, em khó hiểu khi nó đều ra cùng 1 kết quả khi em bật lên, PhoBo vẫn là 15k VND, ComGa 17k VND, tại sao mỗi lần em debug và chạy nó thì in ra 1 kết quả vậy ạ ??

ok, đc rồi anh, mà nó lại ra cả 3 kết quả trùng với nhau thế này @@

srand() dùng để gán seed sinh số ngẫu nhiên cho lệnh rand(). Do đó gọi srand() ngay đầu ct thôi, không cần sau mỗi lệnh rand() đâu

2 Likes

khi em sử dụng srand() thì nó báo lỗi warning nhiều lắm ạ, em cũng ko hiểu câu anh Quân nói nữa @@

int main()
{
    srand(time(NULL)); //gọi srand 1 lần và duy nhất ở đây

xóa tất cả mấy cái srand tầm bậy kia đi

1 Like

anh ơi, vậy là mỗi khi xài rand thì mình phải xài srand để kèm theo để làm nó luôn luôn thay đổi hả anh, cảm ơn các anh nhiều lắm

chỉ xài srand 1 lần duy nhất ngay sau int main() (hay trước khi gọi rand lần đầu tiên). Đừng gọi nó 2 lần. Đừng gọi nó nhiều lần.

1 Like

ok, em sẽ ghi nhớ, cảm ơn anh

Với cho em hỏi, các anh chỉ em làm cho “Tien do update menu: 1%” ko bị spam nhiều dòng mà nó chỉ thay đổi chỗ 1% thành 2% sau đó tăng dần đc ko ạ @@

có 1 cái trick nhỏ là thêm ký tự \r vô nữa.

vd
cout << "Tien do update menu: " << n << "%\r";
nhưng cái này hình như ko xài được khi xuất ra file, chỉ xài được cho màn hình console thôi.

\r là ký tự trở về đầu dòng. Lần xuất tiếp theo sẽ in đè lên cùng 1 dòng.

1 Like

anh ơi, xài srand bị warning thế này anh ạ, với ngoài cách \r, em mún biết cách khác có thể xài đc khi xuất file thì em tìm google với từ khóa gì vậy anh

VS nó kỹ tính nên báo warning, em viết lại là srand(static_cast<unsigned int>(time(NULL)); là hết, nhưng bị cái dài dòng.

xuất ra file thì có lẽ ko cần xuất cái tiến độ vào file đâu, khỏi cần tìm hiểu. Hoặc thích thì có thể xài istream::seekg lui ngược về mấy ký tự rồi viết đè lại.

1 Like

Em copy istream của anh rồi kết hợp search trên mạng nó ra lỗi identifer gì đó anh ạ

ostream::seekp chứ nhưng mà ko phải xài ở đây. Xài \r đủ rồi.

gọi fout.seekp(fout.tellp() - 10); chẳng hạn, số âm là lùi mấy ký tự đó nhưng mà có biết in ra bao nhiêu ký tự đâu, vd lúc thì 20 kt, lúc thì 21 ky, lúc thì 22 kt chẳng hạn. Xài \r đủ ròi

1 Like

dạ, cảm ơn anh rất nhiều ạ

Bạn chỉ cần dùng srand cho 1 lần biên dịch là được ah. Giống như @tntxtnt nói á bạn. :slight_smile:

1 Like

ok, cảm ơn bạn, mình sẽ rút kinh nghiệm

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