scanf()和gets()讀取字符串的區別
主要的差別在於它們如何決定字符串何時結束
scanf()更基於獲取單詞(get word)而不是獲取字符串(get string);
gets()會讀取所有的字符,直到遇見第一個換行符爲止。
scanf()使用兩種方法決定輸入結束。
如果使用%s格式,字符串讀到(但不包括)下一個空白字符(比如空格、製表符或換行符)
如果指定了字段寬度,比如%10s,scanf()就會讀入10個字符或者直到遇見第一個空白字符,由二者中最先滿足的那一個終止輸入
注:無論哪種上述哪種方法,字符串都是以遇到第一個非空白字符開始
gets()讀取字符串直到遇見到一個換行符(\n)輸入結束
注:gets()讀取換行符之前(不包括換行符)的所有字符,在這些字符後添加一個空字符(\0)
fgets()讀取字符串直到遇見到一個換行符(\n)輸入結束
注:fgets()與gets()相比,有三點不同
需要第二個參數來說明最大讀入字符數,如果這個參數值爲n,fgets()會讀取最多n-1個字符或者讀到換行符,由二者中最先滿足的那一個終止輸入
如果fgets()讀到換行符,就會把它存到字符串裏,而不是像gets()那樣丟棄它。
它還需要第三個參數來說明讀取哪一個文件。從鍵盤上讀取數據時,可以使用stdin作爲該參數
空白字符 & 空字符
空白字符是指在屏幕上不會顯示出來的字符(如空格,製表符,回車換行)
空字符是指'\0',或者也稱爲字符編碼爲0的字符