Ai giúp e bài này với, e newbie C mong giúp đỡ
Nguyên tắc là như sau:
- Máy tính sẽ chọn ngẫu nhiên một số từ 1 đến 100.
- Máy tính sẽ yêu cầu bạn đoán số đó là bao nhiêu.
- Máy tính sẽ so sánh số bạn chọn và số « bí mật » đó. Máy tính sẽ gợi ý cho bạn biết số bí
mật này lớn hay nhỏ hơn số mà bạn đã chọn. Nếu đoán đúng thì chương trình dừng lại. - Nếu bạn đoán sai ở bước 3, thì máy tính lại kêu bạn đoán tiếp.
- … Và máy tính lại gợi ý số bí mật lớn hơn hay nhỏ hơn.
- Và nó vẫn tiếp tục cho đến khi bạn tìm thấy số bí mật đó.
Mục đích của trò chơi đương nhiên là tìm số bí ẩn với số lần đoán nhỏ nhất
Tạo ra nhiều cấp độ khó khác nhau cho người chơi lựa chọn. Bắt đầu, tạo một Menu yêu
cầu người chơi lựa chọn. Ví dụ:
1 = từ 1 đến 100.
2 = từ 1 đến 1000.
3 = từ 1 đến 10000.
E làm phần dưới bằng switch case, nhưng khi chạy chương trình bị trục trặc khi mà mỗi lần e đoán sai số ngẫu nhiên thì nó tự động đổi sang số ngẫu nhiên khác. E biết tại e ăn gian cho printf số ngẫu nhiên ra màn hình :v e làm cách 1 function int main duy nhất. mong có thánh nào chỉ giúp
chán, newbie chỉ cho post 1 pic.
Hình này là khi e bỏ phần tạo số ngẫu nhiên ra ngoài vòng lặp.(vẫn bị lặp tạo số và thậm chí giá trị lệch ra khỏi khoảng ( 1-100; 1-1000; 1-10000 ))
[code]#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[]) {
int secNum, choNum, count=0, lv, max, min;
srand(time(NULL));
secNum=(rand()%(max-min+1))+min;
printf("Choose the level
Lv1.1 Player:1-100
Lv2.2 Players:1-1000
Lv3.3 Players:1-10000
");
scanf("%d", &lv);
do
{
switch(lv)
{
case 1: max=100; min=1;
printf("%d
", secNum);
printf("Guess the Secret Number: ");
scanf("%d", &choNum);
count++;
if(choNum<secNum) printf("Too small!
");
if(choNum>secNum) printf("Too big!
");
break;
case 2: max=1000; min=1;
printf("%d
", secNum);
printf("Guess the Secret Number: ");
scanf("%d", &choNum);
count++;
if(choNum<secNum) printf("Too small!
");
if(choNum>secNum) printf("Too big!
");
break;
case 3: max=10000; min=1;
printf("%d
", secNum);
printf("Guess the Secret Number: ");
scanf("%d", &choNum);
count++;
if(choNum<secNum) printf("Too small!
");
if(choNum>secNum) printf("Too big!
");
break;
} } while(choNum!=secNum);
printf("You won with guessing in %d time(s)!", count);
getchar();
return 0;
} [/code]
Bạn ơi. Thay vì hỏi bài bạn thử up code của bạn nên và mọi người cùng bạn trao đổi vấn đề bạn còn đang vướng mắc sẽ hay hơn đó
e tính tối post thêm cả hình mà tại đang xài nhờ máy thằng bạn :v mà ức quá làm hoài k ra nên post luôn :v
hay là bây h mình cứ làm cho nhưng mà tính phí nhỹ.
Phí thì sẽ đưa vào quỹ góp diễn đàn. =))=))
chắc bạn cho cả chỗ khởi tạo số vào trong vòng lặp kiểm tra kết quả rồi.
Hehe. Thế thì sợ không ai dám hỏi đâu
Còn nếu ai hỏi thì sẵn sàng luôn.
Chủ topic có cần thuê không nhể
e thử bỏ cái khởi tạo số ngẫu nhiên ra ngoài vòng lặp r. Để tối e post code cho :v Khúc sau nó còn bắt cùng cái đề đó mà chia ra làm = 3 function riêng
Lạ nhỉ…
Ừ, tối post sớm nhé.
có hình r a help me
Bạn post nguyên source để trong thẻ sau
Việc này sẽ giúp code của bạn dễ nhìn và đây đủ hơn khi chụp ảnh
Nó ra số linh tinh bởi vì min, max mới khai báo chưa gán giá trị cụ thể.
Nhưng không hiểu sao nó lại thay đổi giá trị được, mà code như thế không ổn. nên sửa thế này:
sau khi nhập
lv
thì switch case để tạo số random. rồi mới do while đoán số.à mà lần sau đừng post hình nhé, copy code paste lên để người khác có thể copy và chạy thử không phải gõ lại nha.
Mình góp ý chút, max min chưa có khởi tạo mà đã sử dụng nên nó sẽ chứa các giá trị rác, secNum sẽ lung tung, nên tạo secNum 1 lần ngay sau khi scanf lv
Tiếp nữa là switch case thì mình nghĩ những dòng code giống nhau ở mỗi case nên cho ra ngoài và vòng lặp nên nằm bên trong switch case vì việc đối chiếu lv và set value cho max min ko nên lặp lại nhiều lần
post sourcode đi p, cho ngta dễ copy test mới nhanh chứ
em a em doc tai lieu trong day co huong dan ma em
a cụ thể hơn xíu đc k ? min max e có gán cho mỗi trường hợp mà. max=100, max=1000 gì đó. à mà copy code lên thì copy paste bth ạ? a thông cảm e mới học C 3 ngày :v
dạ e làm ra r mà nó k chạy như ý muốn. bài cải tiến này thì k có đáp án
e gán sau khi random số thì nó đâu còn ý nghĩa gì nữa.
Đầu tiên e cho nhập
lv
, sau đóswitch case
cáilv
để random ra cáisecNum
theo lv được nhập.Tiếp đó mới
do while
để đoán số và thông báo.Mình không biết bạn đã sửa đến đoạn nào rùi. Nhưng “Bài Đầu Tiên” sai ở đoạn này:
max= 100, min= 1, nhưng secNum= “ngẫu nhiên nào đó”
lỗi của bạn: “Không tuân thủ nguyên tắc là code chạy từ trên xuông dưới”
sửa: cho đoạn:
cám ơn bạn nh, mà còn cái vụ secNum tự đổi giá trị sau mỗi lần đoán sai là lỗi gì v b?
à hiểu r, cám ơn a nh, mà còn bối rối vụ secNum tự đổi giá trị