Chương trình bắt ký tự không bắt được ký tự

Mọi người cho em hỏi chương trình bắt ký tự sai ở đâu ạ mà nó không bắt được ký tự ạ?

#include<stdio.h>
#include<string.h>
#include<conio.h>

int main(){
	int chon_menu=0;
	while(chon_menu!=1||chon_menu!=2||chon_menu!=3||chon_menu!=4){
		char kytu[1]={'0'};
		if(_kbhit()){
		kytu[0]=_getch;
			if(kytu[0]=='1') chon_menu=1;
			if(kytu[0]=='2') chon_menu=2;
			if(kytu[0]=='3') chon_menu=3;
			if(kytu[0]=='4') chon_menu=4;
		}
	}
 if(chon_menu==4) printf("4");
 return 0;
 }

Bạn hãy giải thích ý nghĩa của dòng này!

5 Likes

kytu sẽ lấy ký tự mà mình vừa nhập ạ

Thế _getch là gì? Nó chính xác là 1 HÀM phải không?
Bạn có biết cách gọi hàm chưa?
Nếu bạn trả lời là: “Đã biết”. Xem lại bạn có quên mất điều gì.
Nếu là: “Chưa học”. Bạn có thể tham khảo thông qua từ khóa: how to call a function in c.
Câu trả lời có liên quan đến cặp ngoặc tròn.

7 Likes

Ngoài ra, mình không khuyến khích sử dụng _getch(), cái này chỉ dùng được trong Visual Studio thôi, chuẩn C bình thường không có, mà bạn mới học nên chắc không cần phải quan tâm đâu :V

5 Likes
while (chon_menu!=1||chon_menu!=2||chon_menu!=3||chon_menu!=4)

Còn nữa, cái này sửa thành v cho gọn. :kissing:

while (chon_menu < 1 || chon_menu > 4) {
  ...
  chon_menu = kytu[0] - '0';
  ...
}
5 Likes

Dạ em đã thêm thành_getch() rồi mà nó vẫn không nhận ký tự ạ.

Mình chạy thử vẫn ngon lành mà. :kissing:

#include <stdio.h>
#include <conio.h>

int main() {
    char c = 0;
    while (c < '1' || c > '4') {
        if (kbhit()) {
            c = getch();
        }
    }
    printf("%c\n", c);
}

Nhưng không nên làm như v, vì phải chạy while liên tục khi không nhập gì => ngốn CPU.

Thay vì thế thì dùng getchar() là được rồi, bỏ kbhit(), getch() đi. :kissing:

5 Likes
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<stdbool.h>
#include<time.h>
#include<string.h>
#include<conio.h>
#include<string.h>
void menu(int *chon_menu){
	system("cls");
	printf("1,Choi\n2,Huong dan\n3,Diem Cao\n");
	while(*chon_menu!=1||*chon_menu!=2||*chon_menu!=3){
		char kytu;
		if(_kbhit()){
		kytu=_getch();
		}
		if(kytu=='1') *chon_menu=1;
		if(kytu=='2') *chon_menu=2;
		if(kytu=='3') *chon_menu=3;
		}
	}
int main(){
	int chon_menu=0;
	do{
	char exit[2]={'o'};
	menu(&chon_menu);
	if(chon_menu==2){
		system("cls");
		printf("Nhan H de quay tro lai");
		while(exit[0]!='h'){
		if(_kbhit()){
		exit[0]=_getch();
		}
	}
}
	if(chon_menu==3){
		system("cls");
		printf("\nAn H de quay tro lai\n");
		while(exit[0]!='h'){
			if(_kbhit()){
			exit[0]=_getch();
				}  
			}
		}
	}while(chon_menu!=1);
return 0;
}

Cho em hỏi sao chương trình của em cứ bị đứng im ở menu mà nó không chạy tiếp ạ

Điều kiện đã ổn chưa?

3 Likes

ak em nhận ra rồi thanks anh ạ :heart_eyes: :heart_eyes: :heart_eyes:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?