常用輸入輸出函式

micryfotctf發表於2024-10-13

常用輸入輸出函式

  • printf():把輸出傳送到一個叫作緩衝區(buffer)的中間儲存區域。
    • 當緩衝區滿、遇到換行字元或需要輸入的時候迫使printf()的輸出被髮送到螢幕上。
    • 可以使用fflush()函式重新整理緩衝區
    • printf()返回值是待顯示字元的個數
    • printf()中如果你不想預先指定欄位寬度,希望透過程式來指定,那麼可以用*修飾符代替欄位寬度。但還是要用一個引數告訴函式,欄位寬度應該是多少。也就是說,如果轉換說明是%*d,那麼引數列表中應包含*和 d對應的值。這個技巧也可用於浮點值指定精度和欄位寬度。(%*.*f
  • scanf():scanf()函式每次讀取都會跳過所有的空白字元,直至遇到第1個非空白字元才開始讀取。
    • 讀取整數(%d):scanf()希望發現一個數字字元或者一個符號(+或-)。如果遇到一個非數字字元,它便認為讀到了整數的末尾。scanf()把非數字字元放回輸入。意味著程式在下一次讀取輸入時,首先讀到的是上一次讀取丟棄的非數字字元。
    • 讀取字元(%c):讀取單個字元
    • 讀取字串(%s):scanf()會讀取除空白以外的所有字元。意味著只能讀取一個單詞。
      • 無法利用欄位寬度讓只有一個%s的scanf()讀取多個單詞。如果使用欄位寬度,scanf()在欄位末尾或第1個空白字元處停止讀取。
    • 格式字串中的普通字元:scanf()允許把普通字元放在格式字串中。但除空格字元外的普通字元必須與輸入字串嚴格匹配。
      • 假設在兩個轉換說明中加一個逗號:scanf("%d,%d", &n, &m);``scanf()函式將其解釋成:使用者將輸入一個數字、一個逗號,然後再輸入一個數字。也就是說,使用者必須像下面這樣進行輸入兩個整數:
        • 由於格式字串中,%d後面緊跟逗號,所以必須在輸入第一個數後再輸入一個逗號。
    • 對於scanf(),一定要記得在變數名前加上地址運算子。
    • scanf()返回值=scanf()成功讀取的項數。如果沒有讀取任何項,或者需要讀取一個數字而使用者卻輸入一個非數值字串,即型別不匹配scanf()便返回0。
    • scanf()檢測到“檔案結尾”時,會返回EOF(EOF是stdio.h中定義的特殊值,通常用#define指令把EOF定義為-1)。
    • scanf()中如果把*放在%和轉換字元之間時,會使得scanf()跳過相應的輸出項。
      • 示例:scanf("%*d %*d %d", &n);其中的scanf()指示:跳過兩個整數,把第3個整數複製給n。
      • 在程式需要讀取檔案中特定列的內容時,這項跳過功能很有用。
    • scanf()函式檢測到檔案結尾時返回EOF。
  • getchar():讀取下一個輸入字元
    • 使用int陣列時getchar只能賦值數字,無法賦值其他字元容易出錯。
    • getchar()和 putchar()不需要轉換說明,因為它們只處理字元。
    • 在C語言中,用getchar()讀取檔案檢測到檔案結尾時將返回EOF
    • getchar()的返回值和EOF作比較。如果兩值不同,就說明沒有到達檔案結尾。
      • 檢測檔案結尾:while ((ch = getchar()) != EOF)
    • 不能把getchar()scanf()這兩個函式混用
      • getchar()讀取每個字元,包括空格、製表符和換行符;
      • scanf()在讀取數字時則會跳過空格、製表符和換行符
        以 int 型別讀取字元(這樣做可以檢測 EOF)
  • putchar():列印一個字元

相關文章