Viết chương trình chuông kêu liên tục cho đến khi nhập phím bất kì

chào mọi người. mọi người sửa giúp em bài này với ạ. đề bài là: viết chương trình xuất ra tiếng chuông kêu liên tục cho đến khi nhập phím bất kì. dưới đây là code của em nhưng chưa chạy được, mọi người sửa giúp em với

#include<stdio.h>

#include<conio.h>
int main(){
    while( kbhit() )
    printf("\a");
    return 0;
}

Phải là !kbhit() nha bạn. Vì hàm kbhit() trả về 0 nếu k có phím nào nhập vào do đó chương trình của bạn chưa đi vào while một lần nào, cứ thế mà end.


Cơ mà nếu sửa lại thì chg trình cũng kêu máy bạn kêu tiếng bip với tốc độ bàn thờ, và không kịp xử lý, sau mỗi lần bip bạn nên cho nó nghỉ một lúc. Như :point_down: chẳng hạn.

#include<stdio.h>
#include <windows.h>
#include<conio.h>
int main() {
	while( !kbhit() ) {
		printf("\a");
		Sleep(2000);
	}
	return 0;
}
5 Likes

ý tưởng của em là nếu chưa có phím nào nhập(kbhit() ) thì tiếp tục kêu chuông, còn nếu có phím nhập vào ( ! kbhit() ) thì dừng. tại sao để (! kbhit() ) thì mới đi vào while ạ?

Như mình đã nói ở trên thì prototype của kbhit()int kbhit(void). Hàm này sẽ:

  • Trả về 0 nếu k có ký tự nào nhập vào.
  • Trả về 1 nếu có ký tự nhập vào.

Còn while thì nó sẽ lặp nếu như điều kiện đưa vào là đúng. Do đó:

  • while(kbhit()) tương đương với while(kbhit() == 1) Nghĩa là “Nếu có ký tự nhập vào thì lặp”.
  • while(!kbhit()) tương đương với while(kbhit() == 0) Nghĩa là “Nếu không có ký tự nào nhập vào thì lặp”.

Mà bạn lại đang cần cái chấm dưới sảy ra. :point_right: dùng whlie(!kbhit()).

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