我想用「按任意鍵繼續」功能使用kbhit()。 但是,在循環中使用了kbhit()之後,按下的鍵存儲在標準輸入中。 因此在下一個scanf()中,從前面按下的按鍵出現在輸入中。kbhit()作爲轉義觸發器
int x,b=0;
printf("Press any key to continue...")
while (b==0) {
b=kbhit();
}
system("cls");
printf("Enter number:");
scanf("%d",&x);
所以,如果用戶按下了一個鍵,讓我們說字母K,K出現在「輸入數字:」後面。
我試過尋找解決方案,但未能讓他們中的任何一個工作。 我試圖把退格字符放入輸入流中。 我也嘗試過使用getch(),但是,用戶必須按「Enter」才能繼續,因此它擊敗了原來的目的。 我也嘗試清除標準輸入流,通過關閉和打開,但我無法讓它正常打開。
編輯:正如janisz在評論中所說,我需要的是使用系統(「暫停」)。雖然我無法編輯正如janisz在評論中所說的,我所需要的只是使用系統(「暫停」)。雖然我不能編輯「按任意鍵繼續」,但它足以滿足我的目的。如果可能,我會繼續嘗試其他解決方案以獲得更好的結果,但現在,系統(「暫停」)是我想要的。編輯2:好吧,你們有人建議使用getch()。從我在網上看到的,getch()函數從流中獲取輸入,而不顯示字符實際顯示在屏幕上,這正是我想要的。但是,當我嘗試使用getch()時,按下任意鍵後程序不會繼續,它等待我按下Enter鍵。有問題嗎?我使用的是標準的Windows 7,C-4免費
查找到while循環之後添加調用'fpurge(FILE *流)'函數。 _purge_擦除給定流中緩衝的任何輸入或輸出。它可以在中找到。 –
Nocturno
fflush只刷新輸出流。它不適合我。 fpurge不可用,它不在我的stdio.h中。我認爲它只能在Linux上使用。 –
你可以使用'system(「pause」);'代替'kbhit()' – janisz