如何在按下按鍵時從無限循環退出? 目前我使用的是getch,但它會盡快阻止我的循環,因爲沒有更多的輸入可供讀取。C按鍵無限循環退出
回答
我建議你去throgh這篇文章。
無論如何,如果您使用的是getch()
,您可以嘗試使用kbhit()
來代替conio.h
。請注意這兩個getch()
和kbhit()
- conio.h
,其實 - 如果任何鍵被按下,但它不會阻止像getch()
不規範C.
是的,conio.h不是標準的,因爲它們依賴於使用的操作系統。 –
並非C的所有實現都有conio.h,儘管現在很多人都試圖提供一個conio.h。確實如何或如何實施取決於平臺。 –
功能kbhit()
從conio.h
返回非零值。現在,這顯然不是標準。但是,因爲你已經在使用getch()
從conio.h
,我認爲你的編譯器有這個。
if (kbhit()) {
// keyboard pressed
}
CONIO.H是在舊的MS-DOS的編譯器用於創建文本用戶界面的C頭文件。它在C語言程序設計語言書中沒有描述,它不是C標準庫ISO C的一部分,也不是POSIX所要求的。
針對DOS,Windows 3.x,Phar Lap,DOSX,OS/2或Win32 1的大多數C編譯器都有此標題,並在默認C庫中提供了相關的庫函數。大多數針對UNIX和Linux的C編譯器都沒有這個頭文件,也沒有提供庫函數。
// Include stdlib.h to execute exit function
int char ch;
int i;
clrscr();
void main(){
printf("Print 1 to 5 again and again");
while(1){
for(i=1;i<=5;i++)
printf("\n%d",i);
ch=getch();
if(ch=='Q')// Q for Quit
exit(0);
}//while loop ends here
getch();
}
如果你不想使用非標準的,無阻塞的方式,但體面退出。使用信號和Ctrl + C與用戶提供的信號處理程序進行清理。例如:
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
/* Signal Handler for SIGINT */
void sigint_handler(int sig_num)
{
/* Reset handler to catch SIGINT next time.
Refer http://en.cppreference.com/w/c/program/signal */
printf("\n User provided signal handler for Ctrl+C \n");
/* Do a graceful cleanup of the program like: free memory/resources/etc and exit */
exit(0);
}
int main()
{
signal(SIGINT, sigint_handler);
/* Infinite loop */
while(1)
{
printf("Inside program logic loop\n");
}
return 0;
}
- 1. 按退出鍵退出循環
- 2. 退出無限循環
- 3. 退出無限循環
- 4. 如何在Turbo C++中按Ctrl + Break而無限循環退出
- 5. 用戶按ENTER鍵退出while循環
- 6. Python在ENTER按鍵上退出循環
- 7. 從異步無限循環退出
- 8. Tkinter退出命令與無限循環
- 9. 檢測鍵無限循環時按下
- 10. 在C++停止無限循環時按鍵被按下
- 11. 通過退出應用程序退出無限循環
- 12. For循環不會以Javascript退出,無限循環
- 13. C++無法退出while循環
- 14. 正確處理來自無限循環退出在C#
- 15. C# - 無限循環
- 16. C++無限循環
- 17. C,循環退出條件
- 18. 無法退出循環es6
- 19. 無法退出while循環
- 20. 無法退出while循環
- 21. Python退出與Wiimote按鈕循環按
- 22. 退出循環
- 23. 修復無限循環PL/SQL。 Cursos。 c%NOTFOUND無法正常工作時退出
- 24. SobiPro出口 - 無限循環
- 25. c無限循環錯誤
- 26. C++掃雷無限循環
- 27. C++,獲得無限循環
- 28. CanvasAuthorize C#SDK無限循環
- 29. 無限while循環在C
- 30. 無限while循環C++
您以前可以使用'while(!kbhit())',但這是與操作系統相關的。您可能需要查看http://cboard.cprogramming.com/c-programming/63166-kbhit-linux.html,具體取決於您的操作系統 – forsvarir
如果您使用的是Windows,請查看GetAsyncKeyState函數。 – Juho
kbhit()可能依賴於操作系統,但它在conio.h中聲明,就像getch()一樣。所以如果他/她使用getch(),他/她也應該有kbhit()。 –