C語言的get函數匯總


 轉載自新浪博客:http://blog.sina.com.cn/s/blog_590be5290100kaeg.html

 

1、int getc(FILE *stream);

    從指定輸入流 stream 的當前位置讀取一個字符,若讀到文件尾而無數據時便返回EOF。

main()
{
 int c;
 FILE *fp= fopen("d:\\a.txt","r");
 fpos_t p=4;
 fsetpos(fp,&p);
 c=getc(fp);
 putchar(c);
}

文件內容為:123456回車,輸出:5

 

2、int getchar(void);
    getchar()從控制台讀取一個字符,並回顯。當程序調用getchar時,程序就等着用戶按鍵。用戶輸入的字符被存放在鍵盤緩沖區中,直到用戶按回車為止(回車字符也放在緩沖區中)。當用戶鍵入回車之后,getchar才開始從stdio流中每次讀入一個字符。getchar函數的返回值是用戶輸入的第一個字符的ASCII碼,如出錯返回-1,且將用戶輸入的字符回顯到屏幕。如用戶在按回車之前輸入了不只一個字符,其他字符會保留在鍵盤緩存區中,等待后續getchar調用讀取。也就是說,后續的getchar調用不會等待用戶按鍵,而直接讀取緩沖區中的字符,直到緩沖區中的字符讀完為后,才等待用戶按鍵。

int main(void)
{
 int ch1=getchar();
 int ch2=getchar();
 int ch3=getchar();
 printf("%d %d %d ",ch1,ch2,ch3);

 

 int ch4=getchar();
 int ch5=getchar();
 int ch6=getchar();
 printf("%d %d %d ",ch4,ch5,ch6);
}

運行結果分析:

(1)輸入123456回車,打印出49 50 51 52 53 54

(2)輸入12345回車,打印出49 50 51 52 53 10(10為'\n'的ASCII碼)

(3)輸入123回車,打印出49 50 51 ,程序執行到 int ch5=getchar()等待輸入。再輸入456回車,打印出10 52 53

(4)輸入1回車,程序執行到 int ch3=getchar()等待輸入。再輸入23456回車,打印出49 10 50 51 52 53

 

3、int getch(void);
    從控制台讀取一個字符,但不把該字符顯示在屏幕上,也就是不回顯。

    getch與getchar基本功能相同,差別是getch直接從鍵盤獲取鍵值,不等待用戶按回車,只要用戶按一個鍵,getch就立刻返回,getch返回值是用戶輸入的ASCII碼,出錯返回-1。輸入的字符不會回顯在屏幕上。getch函數常用於程序調試中,在調試時,在關鍵位置顯示有關的結果以待查看,然后用getch函數暫停程序運行,當按任意鍵后程序繼續運行。

 

4、int getche(void);
    從控制台讀取一個字符,把該字符顯示在屏幕上,也就是回顯。

    getche()和getch()很相似,不同之處就在於getch()無返回顯示,getche()有返回顯示。

main()
{
 int c;

 printf("getchar:");
 c=getchar();//緩沖,回顯
 printf("%c\n",c);
 
 printf("getch:");
 c=getch();//不緩沖,不回顯
 printf("%c\n",c);
 
 printf("getche:");
 c=getche();//不緩沖,回顯
 printf("%c\n",c);
}

 

特別注意:如果輸入的是Enter鍵,緩沖的輸入函數 getchar 會把它當'\n',而不緩沖的輸入函數 getche 和getch 是把它當'\r'。

main()
{
 int c;

 printf("getchar:");
 c=getchar();//緩沖,回顯
 printf("%d",c);
  
 printf("\ngetch:");
 c=getch();//不緩沖,不回顯
 printf("%d",c);
 
 printf("\ngetche:");
 c=getche();//不緩沖,回顯
 printf("%d",c);
}

運行結果分析:

(1)程序運行后,首先打印 getchar:,等待輸入。此時,按Enter鍵,由於getchar 將其當作'\n'並且回顯,因此換行並打印'\n'的ASCII碼 10。

(2)然后,程序換行打印 getch:,並等待輸入。此時,按Enter鍵,由於getch 將其當作'\r'並且不回顯,因此不回車,而在后面接着打印'\r'的ASCII碼 13。

(2)接下來,程序換行打印 getche:,並等待輸入。此時,按Enter鍵,由於getche 將其當作'\r'並且回顯,因此回到本行開頭,打印'\r'的ASCII碼 13。

最后結果:

getchar:

10

getch:13

13

 

5、int fgetc(FILE * stream);

    與getc()作用相同,但有幾點區別:

(1)getc(可以是)宏操作,fgetc(必須)是函數。
(2)fgetc()可以當作其他函數的參數,但是getc()不可以。
一般來講getc()速度比fgetc()快,因為宏操作比函數操作快。

 

6、int fgetchar(void);

    與getchar()作用相同。兩者區別可參考 fgetc 和 fgetc 之間的區別。

 

7、char *gets(char *buffer);
    從stdin流中讀取字符串,直至接受到換行符或EOF時停止,並將讀取的結果存放在buffer指針所指向的字符數組中。換行符不作為讀取串的內容,讀取的換行符被轉換為null值,並由此來結束字符串。

 

8、char *fgets(char *str, int n, FILE *stream);
    函數的功能是從stream所指流中讀入n-1個字符放入str為起始地址的空間內;如果在未讀滿n-1個字符之時,已讀到一個換行符或一個EOF(文件結束標志),則結束本次讀操作,讀入的字符串中最后包含讀到的換行符。因此,確切地說,調用fgets函數時,最多只能讀入n-1個字符。讀入結束后,系統將自動在最后加'\0',並以str作為函數值返回。

比較 gets 和 fgets 的區別:

main()
{
 char a[50];
 char b[50];

 gets(a);
 fgets(b,20,stdin);

 printf("%s",a);
 printf("%s",b);
}

輸入:1111

      2222

輸出:11112222


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM