30/09/2018, 23:12

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 ạ ??

Quốc Duy Đặng viết 01:18 ngày 01/10/2018

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

Quân viết 01:24 ngày 01/10/2018

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

Quốc Duy Đặng viết 01:25 ngày 01/10/2018

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 @@

viết 01:28 ngày 01/10/2018
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

Quốc Duy Đặng viết 01:22 ngày 01/10/2018

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

viết 01:17 ngày 01/10/2018

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.

Quốc Duy Đặng viết 01:28 ngày 01/10/2018

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

Quốc Duy Đặng viết 01:16 ngày 01/10/2018

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 ạ @@

viết 01:21 ngày 01/10/2018

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.

Quốc Duy Đặng viết 01:13 ngày 01/10/2018

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

viết 01:18 ngày 01/10/2018

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.

Quốc Duy Đặng viết 01:19 ngày 01/10/2018

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

viết 01:22 ngày 01/10/2018

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

Quốc Duy Đặng viết 01:15 ngày 01/10/2018

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

Nguyễn Trúc viết 01:29 ngày 01/10/2018

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.

Quốc Duy Đặng viết 01:19 ngày 01/10/2018

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

Bài liên quan
0