【C】scanf、gets、getchar的基本使用

引言:

在C語言當中,處理字符串在我看來是一件特別麻煩的事情,一開始學習或者刷題的時候總是不知道怎麼處理,甚至輸入字符串的時候都還以爲要一個個輸出,結果原來%s就可以直接輸出了。

scanf、gets、getchar的基本使用

  1. scanf()是在C語言中最常用的輸入函數,它需要我們嚴格按照要求進行輸入,除非你用對scanf()使用了正則表達式;對於scanf(),當它遇到空格、回車、或者Tab鍵時,都會自動停止輸入,剩下的內容逗留在緩衝區中,所以如果需要輸入字符串,不推薦使用它。

    關於正則表達式:
    [ ]是個集合的標誌,%[ ]特指讀入此集合所限定的那些字符,比如%[A-Z]是輸入大寫字母,一旦遇到不在此集合的字符便停止。
    如果集合的第一個字符是“^”,這說明讀取不在”^”後面集合的字符,既遇到”^”後面集合的字符便停止(這就是scanf函數裏的正則表達式應用)。
    注意:此時讀取的字符串是可以含有空格的。
    例如:
    “%[^\n]”則表示當遇到回車時才結束輸入。
    “%[A-Z]”則表示輸入A到Z的任何字符(包括回車、空格)都會停止。
    “%[0-9a-zA-Z]”則表示只能輸入數字加字母

  2. gets()主要用來接收字符串,可以接收空格,遇到’\n’時結束,但不接收’\n’,把 ‘\n’留存輸入緩衝區;把接收的一串字符存儲在形式參數指針指向的空間,並在最後自動添加一個’\0’
    相對於scanf(),我覺得gets()的使用更加的簡單,當你需要輸入那個字符串的時候,就直接gets(str)就可以了。

  3. getchar()主要用來接收單個字符,不管是空格或者回車都可以接收
    可以用作特別字符作爲結束的時候進行判斷。
    例如:
    (c=getchar())!=’\n’ 則表示遇到回車的時候結束接收字符。

這幾個輸入函數一開始使用的時候總會出現各種問題,但如果多加練習就可以直觀的感受到它們之間的差別了。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main() {
    char str[20];
    char str2[20];

    /*
        scanf()大多數時候都是按照格式輸入即可
        而正則表達式使用較少,所以就以它爲例子嘗試使用.
    */
    scanf("%[^\n]", str);
    printf("scanf():\n%s\n\n", str);

    getchar();  //將回車鍵吸收

    gets_s(str);
    printf("gets():\n%s\n\n", str);

    return 0;
}

結果如下:
Hello C
scanf():
Hello C

Gets
gets():
Gets

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章