字符串和格式化輸入/輸出 [printf & scanf]


一、字符串

  C 語言中並沒有專門用於儲存字符串的變量類型,字符串都被存儲在char類型的數組中。在數組中,會存在一個空字符(null character)【一個非打印字符,其 ASCII 碼值是(或等價於)0】,C語言用其來標記字符串的結束。也就是說,char 型數組的容量必須比待存儲字符串中的字符數多1。

  strlen() 函數,對於計算字符串的長度,遇見空字符則停止計算,且空字符並不計算在內。與 sizeof 運算符有一定的區別。

二、printf ()

  1 - 轉換說明及其打印的輸出結果

  轉換說明及其打印的輸出結果

  2 - 轉換說明修飾符

 

printf() 修飾符 - 1

printf() 修飾符 - 2

printf() 標記

   3 - 返回值

  返回打印字符的個數。如果有輸出錯誤,printf() 會返回一個負值(舊版本的不同,具體負值可能不同)。

  4 - 打印較長的字符串的幾種形式

  方法一:使用多個 printf() 語句完成信息的輸出。

   示例:printf("Here id a way to print a "); 

     printf("long string. \n ");

  方法二:用 ' \ ' 和 Enter (Return) 組合來斷行。【下一行代碼必須和程序清單中的代碼一樣從左邊開始】

  示例:printf("Here id a way to print a \

long string. \n");

   方法三:ANSI C 引入的字符串連接,在兩個用雙引號括起來的字符串之間用空白隔開,C 編譯器會把多個字符串看作是一個字符串。

  示例:printf("Here id a way to print a "     “long string. \n”);

三、scanf()

  1 - 轉換說明

ANSI C 中 scanf() 的轉換說明

   2 - 修飾符

scanf() 修飾符 - 1

scanf() 修飾符 - 2

   3 - 返回值

  scanf() 函數返回成功讀取的項數。

  如果沒有讀取任何項,且需要讀取一個數字而用戶缺輸入一個非數值字符串,返回0。

  當sacnf() 檢測到 “文件結尾” 時,返回 EOF(EOF 是 stdio.h 中定義的特殊值)。

  4 - 輸入具體過程

  如果使用的是 %d 轉換說明,scanf() 每次讀取一個字符時,跳過所有的空白字符,直至遇到第一個非空白字符(一個數字字符或者 + / - )才開始讀取並保存,之后依次讀取數字字符,直到遇到非數字字符,便認為讀到了整數的末尾。此時,scanf() 把非數字字符放回輸入,這也就意味着長須在下一次讀取輸入時,首先讀取到的是上一次讀取丟棄的非數字字符。最后,sacnf() 函數計算已讀取數字(可能該有符號)相應的數值,並將計算后的值放入指定的變量中。

  如果使用字段寬度,scanf() 會在字段結尾或第1個空白字符處停止讀取(滿足二者條件之一便可)。

  其他轉換說明,大多數與 %d 類似。

  如果使用 %s 轉換說明,scanf() 會讀取除空白以外的所有字符。scanf() 跳過空白開始讀取第1個非空白字符,並保存非空白字符直到再次遇到空白。也就意味着 scanf() 讀取一個單詞,其中不包括空白字符,當其將單詞保存至具體的數組的時候,會自動再起末尾加上 '\0'。同樣,如果是使用了字段寬度,與 %d 類似。

  除了 %c ,其他轉換說明都會自動跳過輸入值前面所有的空白。

 四、printf() 和 scanf() 中的 * 修飾符

  1 - printf()

  如果不想預先指定字段寬度,希望跳過程序指定,可以用 * 修飾符代替字段寬度,但是之后還是要在必要的地方提供一個字段寬度參數。也就是說,如果轉換說明是 %*d ,那么參數列表中就一定要包含 * 和 d 的值。

  2 - scanf()

  把 * 放在 % 和轉換字符之間時,會使得 scanf() 跳過相應的輸入項。

  [示例]

  int n;

  scanf("%*d %*d %*d", &n);

  [輸入: 2013 2014 2015]

  [結果:n == 2015]

 五、其他

  1 - getchar() 與 putchar()

  getchar()、putchar() 兩個函數均只針對字符型數據。因為兩者只處理字符,所以並不需要相應的轉換說明。【這兩個函數通常定義在 stdio.h 頭文件中,而且,它們通常是預處理宏,而不是真正的函數。】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM