scanf() & gets() & fgets() 讀取字符串的區別

scanf()和gets()讀取字符串的區別

主要的差別在於它們如何決定字符串何時結束

scanf()更基於獲取單詞(get word)而不是獲取字符串(get string);

gets()會讀取所有的字符,直到遇見第一個換行符爲止。


scanf()使用兩種方法決定輸入結束。

  1. 如果使用%s格式,字符串讀到(但不包括)下一個空白字符(比如空格、製表符或換行符)

  2. 如果指定了字段寬度,比如%10s,scanf()就會讀入10個字符或者直到遇見第一個空白字符,由二者中最先滿足的那一個終止輸入

注:無論哪種上述哪種方法,字符串都是以遇到第一個非空白字符開始


gets()讀取字符串直到遇見到一個換行符(\n)輸入結束

注:gets()讀取換行符之前(不包括換行符)的所有字符,在這些字符後添加一個空字符(\0)


fgets()讀取字符串直到遇見到一個換行符(\n)輸入結束

注:fgets()與gets()相比,有三點不同

  1. 需要第二個參數來說明最大讀入字符數,如果這個參數值爲n,fgets()會讀取最多n-1個字符或者讀到換行符,由二者中最先滿足的那一個終止輸入

  2. 如果fgets()讀到換行符,就會把它存到字符串裏,而不是像gets()那樣丟棄它。

  3. 它還需要第三個參數來說明讀取哪一個文件。從鍵盤上讀取數據時,可以使用stdin作爲該參數



空白字符 & 空字符

空白字符是指在屏幕上不會顯示出來的字符(如空格,製表符,回車換行)

空字符是指'\0',或者也稱爲字符編碼爲0的字符


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