30/09/2018, 20:10

Ai giúp e bài này với, e newbie C mong giúp đỡ

Nguyên tắc là như sau:

  1. Máy tính sẽ chọn ngẫu nhiên một số từ 1 đến 100.
  2. Máy tính sẽ yêu cầu bạn đoán số đó là bao nhiêu.
  3. 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.
  4. 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.
  5. … Và máy tính lại gợi ý số bí mật lớn hơn hay nhỏ hơn.
  6. 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]

Ngô Doãn Tuấn viết 22:23 ngày 30/09/2018

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 đó

Arahihsi Anir viết 22:15 ngày 30/09/2018

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

Khanh Tran viết 22:21 ngày 30/09/2018

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. =))=))

Sáng Béo viết 22:21 ngày 30/09/2018

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.

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.

Ngô Doãn Tuấn viết 22:18 ngày 30/09/2018

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ể

Arahihsi Anir viết 22:20 ngày 30/09/2018

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

Sáng Béo viết 22:14 ngày 30/09/2018

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é.

Arahihsi Anir viết 22:19 ngày 30/09/2018

có hình r a help me

The Wind viết 22:16 ngày 30/09/2018

Bạn post nguyên source để trong thẻ sau

[code]Nội dung source[/code]

Việc này sẽ giúp code của bạn dễ nhìn và đây đủ hơn khi chụp ảnh

Sáng Béo viết 22:17 ngày 30/09/2018

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.

Hien Hoang viết 22:20 ngày 30/09/2018

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

Nguyễn Văn Lâm viết 22:11 ngày 30/09/2018

post sourcode đi p, cho ngta dễ copy test mới nhanh chứ

Gió viết 22:16 ngày 30/09/2018
  • đầu tiên sẽcNum=random… Thì lúc đó max, min chưa có giá trị. Không biết secNum sẽ đi về đâu
  • switch là sau khi scanf lv. Ta gán max, min theo lv. Rồi mớii khởi tạo secNum
  • vòng while khi đó không cần switch nữa
Jobs Apple Steve viết 22:13 ngày 30/09/2018

em a em doc tai lieu trong day co huong dan ma em

Arahihsi Anir viết 22:16 ngày 30/09/2018

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

Arahihsi Anir viết 22:18 ngày 30/09/2018

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

Sáng Béo viết 22:26 ngày 30/09/2018

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ái lv để random ra cái secNum theo lv được nhập.
Tiếp đó mới do while để đoán số và thông báo.

Đỗ Hồng Sơn viết 22:16 ngày 30/09/2018

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:

case 1: max=100; min=1;
//trước đoạn
secNum=(rand()%(max-min+1))+min;
 //trước đoạn
if(choNum>secNum) printf("Too big!\n");
Arahihsi Anir viết 22:16 ngày 30/09/2018

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?

Arahihsi Anir viết 22:20 ngày 30/09/2018

à hiểu r, cám ơn a nh, mà còn bối rối vụ secNum tự đổi giá trị

Bài liên quan
0