c語言中getchar的用法函式用法
當程式呼叫getchar時.程式就等著使用者按鍵.使用者輸入的字元被存放在鍵盤緩衝區中.直到使用者按回車為止。下面小編就跟你們詳細介紹下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的用法