01/10/2018, 00:36
Viết chương trình trò chơi One-two-three?
Cái này em tham khảo trên mạng rồi viết lại, chứ em k hiểu lắm, giờ nó chạy đc nhưng mà k ra kết quả gì, ai chỉ em với!
char i,k,kk,kkk;
printf("Moi chon: ");
scanf("%c",&i);
switch(i)
{
case 1:
printf("Chon muc tuong ung: ");
scanf("%c",&k);
switch(k)
{
case 'l':printf("thua
");break;//l:la;k:keo,d:dam
case 'k':printf("Thang
");break;
case 'd':printf("hoa
");break;
default: printf("sai");
}break;
case 2:printf("Chon muc tuong ung: ");
scanf("%c",&kk);
switch(kk)
{
case 'd':printf("thang
");break;
case 'k':printf("thua
");break;
case 'l':printf("hoa
");break;
default: printf("sai");
}break;
case 3:printf("chon muc tuong ung: ");
scanf("%c",&kkk);
switch(kkk)
{
case 'd':printf("thua
");break;
case 'l':printf("Thang
");break;
case 'k':printf("Hoa
");break;
default:printf("sai");
}break;
Bài liên quan
Nếu bạn %c thì bạn đang đọc 1 ký tự. Vậy giả sử bạn nhập số 1. Nhưng với %c chương trình hiểu là bạn đang nhập ký tự 1. Và ký tự 1 có giá trị là 49 trong bảng mã ascii -> biến i bây giờ có giá trị là 49
-> Cái switch case kia nó thấy 49 ko khớp với 1, 2, 3 nên out ct luôn
vậy bây giờ sửa lại thành case ‘l’, case ‘k’, case ‘d’ là đc hả bạn?
Đúng rồi
Còn ko bạn có thể sửa thành l, k, d là được.
vẫn không đc bạn ơi, nó ra là: “moi ban chon: l
chon muc tuong ung: sai”
Bạn thêm fflush(stdin) sau khi nhập i là đc
Lý do là enter cũng là một ký tự.
Do bạn chỉ đọc 1 ký tự nên ký tự enter vẫn còn -> tới hàm đọc tiếp theo nó đọc cái ký tự này
bạn có thể giải thích rõ hơn về cái [quote=“drgnz, post:6, topic:37502”]
fflush(stdin)
[/quote] được k? mình chưa hiểu cái này?
fflush(stdin) ở Window có chức năng đẩy hết các ký tự trong input buffer ra ngoài.
Vì khi bạn nhập cái gì, nó đều đẩy vô buffer rồi printf mới tới, đọc buffer rồi gán giá trị vào biến.
Khi đọc dữ liệu số thì thường sẽ ko có vấn đề gì vì printf thg sẽ tự động bỏ qua các ký tự ko nhìn thấy được (như enter, khoảng trắng, tab …)
Nhưng khi đọc ký tự hay chuỗi thì nó đọc sạch. Vậy nên nhiều khi nó sẽ đọc luôn mấy ký tự mình ko thấy được -> sai.
Vậy nên fflush(stdin) giúp dọn dẹp cái mớ đó đi và giúp bạn đọc input mới mà ko cần đọc qua cái mớ cũ nữa.
Lưu ý là chỉ trên Window thì nó mới có tác dụng thần kỳ như vậy.
Con tren Linux thi sao bac
Linux thì có hàm là __fpurge() or fpurge gì đấy thay thế
Ý em là nó có hoạt động theo kiểu đẩy vô buffer k í anh @@
Tất nhiên là có rồi
Trên linux bạn có thể dùng getc(stdin) thay cho fflush(stdin) hoặc viết 1 hàm riêng để là while(getchar()!=’/n’){};