30/09/2018, 16:56
Đoán số ngẫu nhiên trong C
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int sobimat=0,sodudoan=0,bodem=1,choitiep;
const int max=100,min=1;
srand(time(NULL));
sobimat=(rand()%(max-min+1))+min;
while(choitiep!=0)
{
do
{
printf("Nhap so du doan: ");
scanf("%d",&sodudoan);
if (sodudoan<sobimat)
{printf("lon hon
");
bodem+=1;}
else if(sodudoan>sobimat)
{printf(" nho hon
");
bodem+=1;}
else
printf("Chuc mung ban da doan dung so bi mat sau %d lan
",bodem);
}
while(sodudoan!=sobimat);
printf(" Cam on ban da tham gia tro choi
");
printf(" Ban co muon tham gia tiep khong (1/0)
");
printf("Moi nhap so khac voi so 0 de choi tiep : ");
scanf("%d",&choitiep);
}
system("pause");
return 0;
}
- Đây là đoạn code đoán số ngẫu nhiên và sẽ cho người chơi chơi lại nếu muốn + đếm số lần đoán đúng của người chơi .
bằng cách thêm vòng lặp while bao quanh vòng lặp do while , nên có thể cho phép người chơi chơi tiếp nếu nhập vào 1 số khác 0 ( đây là giải pháp của mình ). Nhưng vấn đề nảy ra ở đây là như trong ảnh
- Thứ 1 là việc lặp lại thì có nhưng bộ đếm bị cộng dồn ( ở lần thứ 1 thì đúng 17 lần mới đoán trúng số ở lần chơi thứ 2 nó + thêm 2 lần của ván mới ra KQ =19). Nếu như k để chế độ thêm ván mới thì mọi thứ vẫn bình thường
- Thứ 2 là KQ của các số bí mật của từng ván khác nhau đều giống y hệt trong hình số bí mật là 7
-Mong mọi người giải đáp thắc mắc
Bài liên quan
Bạn chỉ cần đưa vào trong while thứ nhất 2 dòng mình mới thêm vào là được, nó có chức năng reset lại bộ đếm và tạo số bí mật mới cho lần chơi mới
mình cho vào thử nhưng mà nó chỉ đc 2 ván đầu là không sao , nhưng ván thứ 3 lại bị cộng dồn vào ván thứ 2 . để tí code lại xem sao
Máy mình chạy ổn mà nhỉ , hay bạn thử cho nó printf biến bodem ra để theo dõi nó xem nó thay đổi như nào
Mình nhập thử chương trình kia , chạy thử ok rồi .nhưng khi viết trình bày lại cho đẹp nó lại ra cái lỗi ảo ảo mà mình thấy 2 cái nó như nhau chả lẽ complie có vấn đề
Chương trình của bạn thiếu mất reset biến
bodem
rồiĐề hai thì bạn cứ nghiên cứu đi nhá
nghĩa là phải nhét cả bộ đếm vào vòng while đầu hả bạn
Đúng rồi , Dòng này nè bạn
Nếu không có nó thì bộ đếm bị cộng dồn khi bắt đầu lượt chơi mới
ok cảm ơn bạn :v thế là cũng hiểu kha khá , chuyển sang hàm được rồi
à bạn ơi cho mình hỏi luôn mình tạo mức độ khó của game thông qua cái bảng menu chọn mức 1 thì từ 1 dến 100 , mức 2 từ 1 đến 1000 , mức 3 từ 1 đến 10000 . Dùng lệnh switch sửa mãi k đc :v
Mình thấy chạy cũng hợp lý đấy chứ, mỗi tội là cho đáp án luôn thôi
mình để đáp án để test lại xem đúng không đấy nhưng mà cái đáp án nó vượt quá 10000 :v
Mình test chưa thấy lần nào vượt cả
mình chả hiểu cái compiler nhà mình bị sao nữa , toàn bị vống lên mặc dù đã sửa chi tiết rồi , kể cả cái chương trình mình post y nguyên trên mình copy lại nó vẫn bị sai @@
Thế thì bạn phải test lại từng ít một, test xem đoạn code tạo số random có sai không, tại sao sai, máy mình chạy tốt
bạn copy chương trình của mình chạy không sai đúng không ? Mình cũng chạy lại cái chương trình mình vừa post bị sai là sao ?
Code trên máy mình đây
chuẩn rồi nếu như code trên thì cái phần mềm Dev C++ của mình lỗi ở đâu đó rồi
Mình dùng code::block, bây giờ bạn viết một chương trình mới chỉ có đoạn code tạo số thôi để kiểm tra lại đoạn đó, phải biết sai ở đâu thì mới sửa được
có vẻ tách riêng bộ tạo số ra thì vẫn đúng nhưng mà sao cái chương trình trên cùng 1 code mà 2 soft , cái đúng , cái sai nhỉ @@
Tại sao biến soLanDoan của mình ko hoạt động nhỉ. Nó nằm trong vòng lặp “do … while” , soLanDoan = 1. Bị sai gì à.
Đáng nhẽ soLanDoan = 3 chứ ko phải = 1 như trong hình