引言:
在C語言當中,處理字符串在我看來是一件特別麻煩的事情,一開始學習或者刷題的時候總是不知道怎麼處理,甚至輸入字符串的時候都還以爲要一個個輸出,結果原來%s就可以直接輸出了。
scanf、gets、getchar的基本使用
scanf()是在C語言中最常用的輸入函數,它需要我們嚴格按照要求進行輸入,除非你用對scanf()使用了正則表達式;對於scanf(),當它遇到空格、回車、或者Tab鍵時,都會自動停止輸入,剩下的內容逗留在緩衝區中,所以如果需要輸入字符串,不推薦使用它。
關於正則表達式:
[ ]是個集合的標誌,%[ ]特指讀入此集合所限定的那些字符,比如%[A-Z]是輸入大寫字母,一旦遇到不在此集合的字符便停止。
如果集合的第一個字符是“^”,這說明讀取不在”^”後面集合的字符,既遇到”^”後面集合的字符便停止(這就是scanf函數裏的正則表達式應用)。
注意:此時讀取的字符串是可以含有空格的。
例如:
“%[^\n]”則表示當遇到回車時才結束輸入。
“%[A-Z]”則表示輸入A到Z的任何字符(包括回車、空格)都會停止。
“%[0-9a-zA-Z]”則表示只能輸入數字加字母gets()主要用來接收字符串,可以接收空格,遇到’\n’時結束,但不接收’\n’,把 ‘\n’留存輸入緩衝區;把接收的一串字符存儲在形式參數指針指向的空間,並在最後自動添加一個’\0’。
相對於scanf(),我覺得gets()的使用更加的簡單,當你需要輸入那個字符串的時候,就直接gets(str)就可以了。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