當前位置

首頁 > 商務英語 > 計算機英語 > c語言中getchar的用法函數用法

c語言中getchar的用法函數用法

推薦人: 來源: 閱讀: 2.42W 次

當程序調用getchar時.程序就等着用戶按鍵.用戶輸入的字符被存放在鍵盤緩衝區中.直到用戶按回車爲止。下面小編就跟你們詳細介紹下c語言中getchar的用法,希望對你們有用。

padding-bottom: 66.56%;">c語言中getchar的用法函數用法
  c語言中getchar的用法

har

當輸入終端在默認的輸入模式(cooked)下時getchar是以行爲單位進行存取,EOF(Unix/Linux下爲組合鍵Ctrl+D)有兩種作用,一個是換行符,一個是結束符。當緩衝區有其它字符時,它只是一個換行符,當前面沒有字符是它就是一個地地道道的文件結束符。

Getchar這個函數執行過程

1.當調用getchar時,函數打開輸入緩衝,並等待用戶的輸入。

2.用戶進行輸入,並結束輸入(ctrl+D,回車),此時的ctrl+d只是一個結束這一次輸入的動作,並不是EOF.

har從緩衝區裏取一個字符,並返回.

4.緩衝區裏字符隊列頭後移一位,等待再取。

5.回車結束和ctrl+d結束不相同,回車也做爲一個字符被存到緩衝區裏,而ctrl+d並沒有做爲一個字符存儲。

6.緩衝隊列沒有字符,此時又按下了ctrl+d此時就是結束輸入動作,也就是EOF。

  c語言中getchar的用法示例

while((c = getchar()) != EOF)

{

putchar(c);

}

執行程序並輸入:”test”+”回車”。此時緩衝隊列裏就有”test+回車”,並開始返回一個字符”t”然後執行puchar(c)輸出”t”,接着回到while取出“e”並輸出”e”,反覆執行直到取最後一個字符”回車”。然後可以繼續輸入,再次遇到換行符的時候,程序又會把那一行的輸入的字符輸出在終端上。如果想要結束程序執行必須在緩衝隊列沒有字符時輸入EOF。要想正確理解這個問題 ,你就得記着linux下everything is file。從終端的輸入也相當於一個文件,終端輸入有兩種方式,一種raw一種是cooked的。也就是一個是原始輸入,一個是帶緩存的。默認的方式是cooked的,所以一定要等到一個換行才完成一個緩存,而開始文件的讀取,你可以用stty raw,sty cooked來分別設置

注意:

getchar()的返回值一般情況下是字符,但也可能是負值,即返回EOF。這個EOF在函數庫裏一般定義爲-1。因此,在這種情況下,getchar函數返回一個負值,把一個負值賦給一個char型的變量是不正確的。爲了能夠讓所定義的變量能夠包含getchar函數返回的所有可能的值,正確的定義方法如下

int c;

c = getchar();

2.改變終端的輸入方式

static struct termios stored_settings;

void set_keypress(void) //設置終端爲RAW模式,並關閉回顯

{

struct termios new_settings;

cgetattr(0,&stored_settings);

new_settings = stored_settings;

/* Disable canonical mode, and set buffer size to 1 byte */

new_settings.c_lflag &= (~ICANON);

new_settings.c_lflag &= (~ECHO);

new_settings.c_cc[VTIME] = 0;

new_settings.c_cc[VMIN] = 1;

tcsetattr(0,TCSANOW,&new_settings);

return;

}

void reset_keypress(void) //恢復終端屬性

{

tcsetattr(0,TCSANOW,&stored_settings);

return;

}

也可以用system(“stty raw”)

System(“stty cooked”).


猜你喜歡:

har的使用方法與用途

2.c語言中free的用法

3.c語言pow的用法

4.c語言getchar的用法

5.c語言中getch的用法