日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux下kbhit的头文件,linux下kbhit()使用

發布時間:2024/3/13 linux 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下kbhit的头文件,linux下kbhit()使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近寫一段程序,因為剛學linux學習網絡編程,編個聊天軟件(有一個功能就是可以選擇讓對方顯示自己的輸入過程),因為打算在輸入字符前面加上昵稱,因此我計劃是通過判斷鍵盤輸入來確定是否要輸入信息,在網上找了關于這方面的內容,其中最多的就是各種kbhit()函數在linux中實現,最開始是做的是這樣做的:

首先,在網上找到了kbhit()函數的實現:

int kbhit(void)

{

struct termios oldt, newt;

int ch;

int oldf;

tcgetattr(STDIN_FILENO, &oldt);

newt = oldt;

newt.c_lflag &= ~(ICANON | ECHO);

tcsetattr(STDIN_FILENO, TCSANOW, &newt);

oldf = fcntl(STDIN_FILENO, F_GETFL, 0);

fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);

ch = getchar();

tcsetattr(STDIN_FILENO, TCSANOW, &oldt);

fcntl(STDIN_FILENO, F_SETFL, oldf);

if(ch != EOF)

{

ungetc(ch, stdin);

return 1;

}

return 0;

}

因為上述函數肯定在輸入時肯定會在屏幕上顯示出來,為了不讓其顯示,在ch = getchar();? 前面加上一句system('stty -echo");并用一個全局變量c將ch字符保存起來,

然后在程序中調用大概流程是:

while(1)

{

if(kbhit())

{

cout<

.......

}

}

但是這個程序不對,因為在輸入過程中還是會在屏幕上顯示,而且不知道為什么以后c的值保持不變,而且kbhit()返回值都是1,即使我不按鍵的時候都是,這個把我糾結半天,然后網上尋求答案,可能是經驗問題,沒有找到,最后陰差陽錯,在不讓對方顯示自己的輸入過程時用到gets()函數就可以了,所以在這個程序中將? cout<

改為getc(stdin);然后就好了,后來上網查找原因,感覺應該和gets()/getc()輸入機制有關,因為編程經驗和對系統機制知識不足,具體原因我也不是很清楚,所以寫這篇文章是希望像我這樣的初學者能夠很好的解決一些問題,同時也希望大神們知道答案的請私信我,告訴我答案,我會非常感謝的!

最后祝大家愉快!

總結

以上是生活随笔為你收集整理的linux下kbhit的头文件,linux下kbhit()使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。