1. 程式人生 > 其它 >C語言getchar()和putchar()函式

C語言getchar()和putchar()函式

技術標籤:C

前言:

getchar()和putchar()函式都是單字元函式I/O,每次只能處理一個字元。getchar()是輸入,putchar()是輸出

在瞭解函式之前先說一下緩衝區,什麼是緩衝區?使用者輸入的字元被收集並存儲在一個臨時儲存區中,該儲存區就叫"緩衝區"。

為什麼要有緩衝區?C Primer Plus書籍上是這樣介紹的:首先,把若干字元作為一個塊進行傳輸比逐個傳送這些字元節約時間。其次如果使用者打錯字元,可以直接通過鍵盤修正錯誤。當最後按下Enter鍵時,傳輸的是正確的輸入。

瞭解緩衝區基本性質,再來說說getchar()函式,getchar()函式是在控制檯上輸入一個字元,按下回車鍵的時候就會退出。如果按回車之前輸入了不止一個字元,其它字元會保留在"緩衝區"中,等待後續getchar呼叫讀取(輸出)。而putchar()函式的作用如開頭所說在控制檯上輸出一個字元,僅此而已。

另外在呼叫getchar()函式在讀取(輸出)檔案,檢測到檔案末尾會返回一個特殊的值:即EOF。通常EOF定義在stdio.h檔案中:#define EOF (-1)。在這裡十萬個為什麼又來了,為什麼是-1?在瞭解EOF之前又回到了getchar()函式,getchar()是有一個int型的返回值,通常該函式返回值型別介於0~127之間,這些值對應標準的字符集。但如果系統能識別擴充套件字符集,該函式的返回值可能又是一個變數0~255,綜上所述,無論哪一種都不能與-1一一對應,所以-1只能用於標記檔案結尾。

以下是關於EOF使用方式說明,程式碼如下:

#include <stdio.h>
int main(void){
    int ch;
    while ((ch = getchar()) != EOF){
        putchar(ch);
    }
    
    return 0;
}

列印結果:

分析:該段程式碼的意思很簡單,輸入的字元如果是EOF就退出。在PC端如果按住鍵盤ctrl + z程式就會退出便不再繼續輸入輸出,這也從另外一個角度上說明EOF其實就是ctrl + z按鍵組合。其實在該段程式碼中EOF可以完全省略掉,因為在stdio.h檔案中已經定義了EOF,可以將程式碼改成"while(ch=getchar())",其內容結果都是一樣的。再有就是getchar()雖然在控制檯上輸入的是字元,但是其返回值卻是int型別,倆者不要混淆了。

說完EOF再來說說getchar()和putchar()函式使用方式,檔名cypher1.c(更改輸入,空格不變),程式碼如下:

//更改輸入空格不變
#include <stdio.h>
#define SPACE ' '//SPACE表示空格
int main(void){

    char ch;

    ch = getchar();//輸入一個字元

    //輸入的字元如果是回車鍵字元'\n',則跳出while迴圈
    while (ch != '\n'){
        //輸入的字元如果是空格就將其輸出,如果不是則其它字元按照ANSI碼值+1
        if(ch == SPACE){
            putchar(ch);
        }else{ 
             putchar(ch + 1);
        }
        ch = getchar();//儲存字元
    }

    putchar(ch);
    //putchar函式(字元輸出函式)的作用是向控制檯上輸出字元

    return 0;
}

列印結果:

分析:在該段程式碼中putchar(ch)就像是printf()一樣,都是在控制檯上顯示出輸入的內容,只不過putchar(ch)只能是字元。每迴圈一次通過ch = getchar()將其字元儲存下來,然後繼續下一次迴圈,直到輸入回車鍵字元'\n'就會跳出迴圈。

以上就是getchar()和putchar()函式使用方式以及說明!