getchar()知多少?
getc():
呼叫方式:int getc(FILE *stream)
它返回指定輸入流stream的當前位置的下一個字元,並增加檔案的位置指示器.
getch():
呼叫方式:int getch(void)
getch()從控制檯讀取一個字元,但不把該字元顯示在螢幕上,也就是不回顯.
getche():
呼叫方式:int getche(void)
getchar()從控制檯讀取一個字元,把該字元顯示在螢幕上,也就是回顯.
getchar():
調有方式:int getchar(void)
getchar()從控制檯讀取一個字元,並回顯,它和getch(),getche()的不同在於,它等到輸入一個回車才結束,就算你輸入了一個字串,它也只取其中的第一個字元.
void main()
{
char c, ch;
c=getch(); /*從鍵盤上讀入一個字元不回顯送給字元變數c*/
putchar(c); /*輸出該字元*/
ch=getche(); /*從鍵盤上帶回顯的讀入一個字元送給字元變數ch*/
putchar(ch);
printf("\n\n");
}
值得注意的是前面兩個函式都是從鍵盤讀入資料!
還有getchar是很值得研究的:getchar()是stdio.h中的庫函式,它的作用是從stdin流中讀入一個字元,也就是說,如果stdin有資料的話不用輸入它就可以直接讀取了。而getch()和getche()是conio.h中的庫函式,它的作用是從鍵盤接收字元。getchar帶有顯示。
與前面兩個函式的區別在於: getchar()函式等待輸入直到按回車才結束(前提是緩衝區沒有資料),回車前的所有輸入字元都會逐個顯示在螢幕上。但只有第一個字元作為函式的返回值。
#include
#include
void main()
{
char c;
c=getchar(); /*從鍵盤讀入字元直到回車結束*/
//getchar()在這裡它只返回你輸入字串的第一個字元,並把返回值賦值給c
putchar(c); /*顯示輸入的第一個字元*/
printf("\n\n");
}
例四:呵呵,這個程式你執行一下,相信你又會有疑問了。這個就是從緩衝區中讀取了例子。第一次getchar()時,確實需要人工的輸入,但是如果你輸了多個字元,以後的getchar()再執行時就會直接從緩衝區中讀取了。
#include
#include
void main()
{
char c;
while ((c=getchar())!='\n') /*每個getchar()依次讀入一個字元*/
printf("%c",c); /*按照原樣輸出*/
printf("\n\n");
}
程式執行時,首先停下來,等你輸入一串字串,輸入完畢後,它把你輸入的整個字串都輸出來了,咦,你不是說getchar()只返回第一個字元麼,這裡怎麼?
因為我們輸入的字串並不是取了第一個字元就把剩下的字串丟掉了,它還在我們的記憶體中,就好比,開閘放水,我們把水放到閘裡去以後,開一次閘就放掉一點,開一次就放掉一點,直到放光了為止,這裡開閘動作就相當於呼叫一次getchar()。我們輸入的字串也是這麼一回事,首先我們輸入的字串是放在記憶體的緩衝區中的,我們呼叫一次getchar()就把緩衝區中裡出口最近的一個字元輸出,也就是最前面的一個字元輸出,輸出後,就把它釋放掉了,但後面還有字串,所以我們就用迴圈把最前面的一個字元一個個的在記憶體中釋放掉,直到不滿足迴圈條件退出為止。
例子中迴圈條件裡的'\n'實際上就是你輸入字串後的回車符,所以意思就是說,直到遇到回車符才結束迴圈,而getchar()函式就是等待輸入(或緩衝區中的資料)直到按回車才結束,所以實現了整個字串的輸出。當然,我們也可以把迴圈條件改一下,比如while ((c=getchar())!='a'),什麼意思呢,意思就是遇到字元'a'就停止迴圈,當然意思是如果你輸入“12345a213123\n”那麼只會輸出到a,結果是12345a。
再次注意:用getchar()它是從“流”中間去讀取,所以第一個getchar()接受的是剛剛中斷的流佇列中即將出列的第一個字元(不限於回車符,上面舉過例子了),如果流佇列不為空,執行getchar()就繼續放水,直到把回車符也放空為止,空了之後再在執行getchar()就停下等待你的輸入了;我們用getch()為什麼每次都是等待使用者的輸入呢?因為getch()是從鍵盤接收,即時的接收,並不是從stdin流中去讀取資料。
補充:按鍵盤上的回車產生了2個字元:回車符('\r')和換行符('\n')。回車符'\r'(CR:carriage return:倒車)使游標回到這行的首部,換行符('\n')(new line)然後再換行。
所以當輸入字元'w',並按下Enter鍵以後。首先得到回車符。那個getchar函式結束了。 但是還存在一個換行符。所以如果用getchar()來做判斷的時候。最好再寫一次getchar()清除緩衝區的'\n'.
getchar有一個int型的返回值.當程式呼叫getchar時.程式就等著使用者按鍵.使用者輸入的字元被存放在鍵盤緩衝區中.直到使用者按回車為止(回車字元也放在緩衝區中).getchar函式的返回值是使用者輸入的第一個字元的ASCII碼,如出錯返回- 1,且將使用者輸入的字元回顯到螢幕.如使用者在按回車之前輸入了不止一個字元,其他字元會保留在鍵盤快取區中,等待後續getchar呼叫讀取.也就是說, 後續的getchar呼叫不會等待使用者按鍵,而直接讀取緩衝區中的字元,直到緩衝區中的字元讀完為後,才等待使用者按鍵.
getch與 getchar基本功能相同,差別是getch直接從鍵盤獲取鍵值,不等待使用者按回車,只要使用者按一個鍵,getch就立刻返回,getch返回值是使用者輸入的ASCII碼,出錯返回-1.輸入的字元不會回顯在螢幕上.getch函式常用於程式除錯中,在除錯時,在關鍵位置顯示有關的結果以待檢視,然後用 getch函式暫停程式執行,當按任意鍵後程式繼續執行.
getch()、getche()和getchar()函式
(1) getch()和getche()函式
這兩個函式都是從鍵盤上讀入一個字元。其呼叫格式為:
getch();
getche();
兩者的區別是:getch()函式不將讀入的字元回顯在顯示螢幕上,而getche() 函式卻將讀入的字元回顯到顯示螢幕上。
例1:
#include"stdio.h"
#include"conio.h"
void main()
{
char c, ch;
c=getch(); /*從鍵盤上讀入一個字元不回顯送給字元變數c*/
putchar(c); /*輸出該字元*/
ch=getche(); /*從鍵盤上帶回顯的讀入一個字元送給字元變數ch*/
putchar(ch);
}
利用回顯和不回顯的特點, 這兩個函式經常用於互動輸入的過程中完成暫停等功能。
例2:
#include"stdio.h"
#include"conio.h"
void main()
{
char s[20];
printf("Name:");
gets(s);
printf("Press any key to continue...");
getch(); /*等待輸入任一鍵*/
}
(2) getchar()函式
getchar()函式也是從鍵盤上讀入一個字元, 並帶回顯。它與前面兩個函式的區別在於: getchar()函式等待輸入直到按回車才結束, 回車前的所有輸入字元都會逐個顯示在螢幕上。但只有第一個字元作為函式的返回值。
例3:
#include"stdio.h"
#include"conio.h"
void main()
{
char c;
c=getchar(); /*從鍵盤讀入字元直到回車結束*/
putchar(c); /*顯示輸入的第一個字元*/
getch(); /*等待按任一健*/
}
例4:
#include"stdio.h"
#include"conio.h"
void main()
{
char c;
while ((c=getchar())!='\n') /*每個getchar()依次讀入一個字元*/
printf("%c",c); /*按照原樣輸出*/
getch(); /*等待按任一健*/
}
程式設計中,以防程式執行一閃即失,總是要在最後來一個“getch();”
getch()和getche()需要"conio.h"
附:
getch 從鍵盤無回顯地讀一字元
呼叫格式 #include"stdio.h"
int getch(void);
原型在 conio.h
說明 getch從鍵盤直接讀一個字元,不回顯到螢幕上。
返回值 getch返回從鍵盤所讀的字元。
可移植性 getch只適用於DOS
getchar 從stdin流中取字元
呼叫格式 #include"conio.h"
int getchar(void);
原型在 stdio.h
說明 getchar是一個巨集,用於返回指定的stdin輸入流的下一個字元, 它定義為getc(stdin)。
返回值 呼叫成功時,getchar返回所讀的字元,它已被轉換為無符號擴充套件的整形值。在遇到檔案結束或出錯時,返回EOF。
可移植性 getchar適用於UNIX系統,在ANSI C中定義,與Kernighan和Ritchie的定義相容
其他相關連結
stdio.h中宣告的是標準輸入輸出函式,一般在各種系統上都能使用。
io.h中宣告的是類UNIX輸入輸出函式,在DOS,windows下雖然能編譯過去,但不起作用。
conio.中宣告的是類DOS輸入輸出函式,有些好像在UNIX下可以用,比如getch,記得以前好像在unix上用過。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10697500/viewspace-682595/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- getchar()
- getchar VS scanf
- getchar緩衝區
- getc();fgetc();getchar();gets();fgets();
- c語言中的getchar()和EOFC語言
- 程式知多少?
- 機器學習知多少機器學習
- requestAnimationFrame 知多少?requestAnimationFrame
- 跨域知多少?跨域
- WEB安全知多少Web
- AccessiblityService知多少
- 非同步知多少非同步
- RMAN 命令知多少
- C語言中的getchar和putchar詳解C語言
- gets()getchar()與緩衝區的問題
- C語言_scanf()和getchar() 使用[粗俗易懂]C語言
- 負載均衡知多少?負載
- INT型別知多少型別
- OAuth2.0 知多少OAuth
- 效能優化知多少優化
- css知多少(11)——positionCSS
- css知多少(10)——displayCSS
- 併發同步知多少
- 正則之坑知多少
- IdentityServer4 知多少IDEServer
- react-router知多少(一)React
- iOS 設計模式知多少iOS設計模式
- HTML Meta標籤知多少HTML
- css知多少(9)——float下篇CSS
- css知多少(12)——目錄CSS
- css知多少(8)——float上篇CSS
- 國產資料庫知多少?資料庫
- mysql 命令列你知多少MySql命令列
- 基於C語言EOF與getchar()的使用詳解C語言
- 免費報表工具知多少?
- pythonic context manager知多少PythonContext
- Redis 知多少 (一)---Redis 簡介Redis
- ArcGIS系統要求知多少