• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統計

            最新評論

            不等待回車,讀取控制臺輸入-------------------------轉

            在很多情況下,我們希望在控制臺下,按鍵盤字符,程序馬上反應而不是等待回車后才響應。

                在Windows平臺下可以使用getch  ()(要求#include “conio.h“)實現,而在Linux平臺下沒有這個頭文件,也就無法使用這個函數。
                車到山前必有路,我們另有辦法。
                先看下面這段代碼:
            struct termios stored_settings;
            struct termios new_settings;
            tcgetattr (0, &stored_settings);
            new_settings = stored_settings;
            new_settings.c_lflag &= (~ICANON);
            new_settings.c_cc[VTIME] = 0;
            new_settings.c_cc[VMIN] = 1;
            tcsetattr (0, TCSANOW, &new_settings);
                termios結構的描述了終端的模式,在這段代碼中我們改變了它,使得終端能夠接收到鍵盤輸入馬上返回。所以就能夠使用一般的讀取字符函數getchar ()來獲得輸入字符。
                在退出你的程序時,要記得把終端環境改回來:
            tcsetattr (0, TCSANOW, &stored_settings);

            這幾個函數以及結構要求包含頭文件termios.h和stdio.h。
                下面是一個測試文件,可以在Windows和Linux操作系統下,編譯運行:

            #include "stdio.h"
            #include "stdlib.h"
            #ifdef _WIN32 //Linux platform
                #include "conio.h"
                #define get_char getch
            #else
                #include "termios.h"
                #define get_char getchar
            #endif

            int main (int argc, char* argv[])
            {
                #ifdef _WIN32
                //Do nothing
                #else
                struct termios stored_settings;
                struct termios new_settings;
                tcgetattr (0, &stored_settings);
                new_settings = stored_settings;
                new_settings.c_lflag &= (~ICANON);
                new_settings.c_cc[VTIME] = 0;
                new_settings.c_cc[VMIN] = 1;
                tcsetattr (0, TCSANOW, &new_settings);
                #endif
                while (1) {
                    char c = get_char ();
                    if ('q' == c || 'Q' == c)
                        break;
                    printf ("You input: %c\n", c);
                }
                #ifdef _WIN32
                //Do nothing
                #else
                tcsetattr (0, TCSANOW, &stored_settings);
                #endif
                return 0;
            }
                要提的一點是,getch ()是沒有回顯的,而getchar ()是有回顯的,所以在Windows和Linux下的運行有點不同。

            posted on 2007-07-16 12:47 大龍 閱讀(2175) 評論(0)  編輯 收藏 引用

            久久精品无码免费不卡| 99久久成人18免费网站| 精品国产乱码久久久久软件 | 久久91亚洲人成电影网站| 狠狠色丁香婷婷综合久久来| 久久高清一级毛片| 亚洲av伊人久久综合密臀性色| 精品久久久久久| 狠狠色丁香久久婷婷综合图片| 久久久老熟女一区二区三区| 精品久久久无码中文字幕天天| 久久久亚洲裙底偷窥综合| 国产成人精品综合久久久| 中文字幕热久久久久久久| 国产一区二区三精品久久久无广告| 国产成人精品综合久久久| 久久国产精品免费一区二区三区| 狠狠色丁香婷婷久久综合| 久久97久久97精品免视看秋霞| 久久久久亚洲AV无码永不| 国产A三级久久精品| 色综合久久中文字幕综合网| 久久久久久狠狠丁香| 久久久久国产精品熟女影院| 久久国产免费直播| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 精品久久人人爽天天玩人人妻| 国产女人aaa级久久久级| 狠狠久久亚洲欧美专区| 精品久久久久久无码专区不卡| 久久99热这里只有精品国产| 久久久网中文字幕| 久久久久亚洲av毛片大| 久久国产免费| 亚洲欧洲精品成人久久奇米网| 国产一区二区精品久久岳| 国内精品伊人久久久久网站| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 久久久久亚洲AV无码专区网站| 久久亚洲国产成人影院网站| 久久综合亚洲色HEZYO国产|