C語言中的格式說明符



C語言中的格式說明符是在格式化控制檯I/O函式(如printf()和scanf())以及格式化檔案I/O函式(如fprintf()和fscanf())中使用的一些特殊符號。

格式說明符由一個或多個預定義的字母數字字元序列後跟%符號組成。例如,%d、%s、%f、%lf等是一些在C語言中使用的格式說明符。

為什麼在C語言中使用格式說明符?

CPU以流的方式與輸入輸出裝置執行I/O操作。透過標準輸入流從標準輸入裝置(例如鍵盤)讀取的資料稱為stdin。類似地,透過標準輸出裝置傳送到標準輸出(即計算機顯示屏)的資料稱為stdout

計算機以文字形式從流中接收資料,但是您可能希望將其解析為不同資料型別的變數,例如int、float或字串。類似地,儲存在int、float或char變數中的資料必須以文字格式傳送到輸出流。格式說明符符號正是為此目的而使用的。

printf()函式中的格式說明符

printf()函式是定義在stdio.h標頭檔案中常用的標準輸出函式。printf()函式的原型如下:

int printf(format_string, expr1, expr2, . . );

此函式的第一個引數是一個字串,其中穿插了一個或多個格式說明符。第一個引數之後可能還帶有一個或多個表示式作為引數。編譯器將每個格式說明符替換為其後續表示式的值。然後,生成的格式化字串將傳遞到輸出流。

示例

在下面的程式碼中,我們有一個int變數age和一個float變數percent。printf()函式列印這兩個變數的值如下:

#include <stdio.h>

int main(){

   int age = 18;

   float percent = 67.75;

   printf("Age: %d \nPercent: %f", age, percent);

   return 0;
}

輸出

執行程式碼後,將產生以下輸出:

Age: 18 
Percent: 67.750000

第一個變數的值替換第一個格式說明符%d。類似地,%f被percent變數的值替換。

scanf()函式中的格式說明符

格式說明符也用於將輸入流解析為所需型別的變數。以下示例重點介紹瞭如何操作。

示例

在此示例中,程式要求使用者輸入年齡和百分比值。它們分別儲存在int和float變數中。

#include <stdio.h>

int main(){

   int age;

   float percent;

   printf("Enter Age and Percent: \n");

   scanf("%d %f", &age, &percent);

   printf("Age: %d Percent: %f", age, percent);

   return 0;
}

輸出

執行程式碼並檢查其輸出:

Enter Age and Percent: 
Age: 4096 Percent: 0.000000

格式說明符型別

ANSI C定義了許多格式說明符。下表列出了不同的說明符及其用途:

格式說明符 型別
%c 字元
%d 帶符號整數
%e 或 %E 浮點數的科學計數法
%f 浮點值
%g 或 %G 與%e或%E類似
%hi 帶符號整數(短整型)
%hu 無符號整數(短整型)
%i 無符號整數
%l 或 %ld 或 %li 長整型
%lf 雙精度浮點數
%Lf 長雙精度浮點數
%lu 無符號整型或無符號長整型
%lli 或 %lld 長長整型
%llu 無符號長長整型
%o 八進位制表示
%p 指標
%s 字串
%u 無符號整型
%x 或 %X 十六進位制表示
  • 減號 () 表示左對齊。

  • %後面的數字指定最小欄位寬度。如果字串小於寬度,則將用空格填充。

  • 句點 (.) 用於分隔欄位寬度和精度。

整數格式說明符

C語言使用%d表示帶符號整數,%i表示無符號整數,%ld%li表示長整型,%o%O表示八進位制表示,%x%X表示整數的十六進位制表示。

示例

以下示例重點介紹瞭如何在C語言中使用整數格式說明符:

#include <stdio.h>

int main(){

   int num = 20;

   printf("Signed integer: %d\n", num);
   printf("Unsigned integer: %i\n", num);
   printf("Long integer: %ld\n", num);
   printf("Octal integer: %o\n", num);
   printf("Hexadecimal integer: %x\n", num);

   return 0;
}

輸出

執行此程式碼後,將產生以下輸出:

Signed integer: 20
Unsigned integer: 20
Long integer: 20
Octal integer: 24
Hexadecimal integer: 14

浮點格式

C語言使用%f格式說明符表示單精度浮點數,%lf表示雙精度浮點數,%Lf表示長雙精度浮點數。要以科學計數法表示浮點數,C語言使用%e%E說明符符號。

您可以以小數點後位數的形式指定寬度和精度。例如,要將數字寬度指定為4位,小數點後2位,請使用%4.2f格式。

示例

請看下面的例子:

#include <stdio.h>

int main(){

   float num = 5.347;

   printf("float: %f\n", num);
   printf("double: %lf\n", num);
   printf("Scientific notation: %e\n", num);
   printf("width and precision: %4.2f\n", num);

   return 0;
}

輸出

執行此程式碼後,您將得到以下輸出:

float: 5.347000
double: 5.347000
Scientific notation: 5.347000e+000
width and precision: 5.35

字串格式

C語言中的char資料型別實際上是int資料型別的子集。因此,使用%c格式說明符的char變數對應於單引號中的字元。另一方面,如果您使用%d說明符,則char變數將被格式化為其ASCII值。

在C語言中,字串是char資料的陣列。要顯示char陣列,C語言使用%s說明符。

示例

請看下面的例子:

#include <stdio.h>

int main(){

   char ch = 'D';
   char word[]="Hello World";

   printf("As character: %c\n", ch);
   printf("As its ASCII value: %d\n", ch);
   printf("String format: %s", word);

   return 0;

}

輸出

執行此程式碼後,將產生以下輸出:

As character: D
As its ASCII value: 68
String format: Hello World

檔案I/O函式中的格式說明符

stdio.h庫定義了fscanf()fprintf()函式,用於對磁碟檔案進行格式化I/O,而不是標準輸入/輸出流。

示例1

以下程式碼以寫入模式開啟檔案並將三個變數的值儲存到檔案中。

#include <stdio.h>

int main(){

   int x,y,z;

   FILE *fp = fopen("test.txt","w");
   
   x = 10; y = 20; z = 30;
   
   fprintf(fp, "%d, %d, %d", x,y,z);
   
   fclose(fp);

   return 0;
}

輸出

The fprintf() function uses the file represented by the file pointer fp to write the data.

下一個示例顯示如何以讀取模式開啟同一個檔案以讀取格式化資料。

示例2

以下程式透過以讀取模式開啟檔案來讀取檔案中的資料。

#include <stdio.h>

int main(){

   int x,y,z;

   FILE *fp = fopen("test.txt","r");

   fscanf(fp, "%d, %d, %d", &x,&y,&z);

   printf("%d, %d, %d", x,y,z);

   fclose(fp);

   return 0;
}

輸出

fscanf()函式從指向已開啟檔案的fp讀取格式化輸入。在這裡,您將得到以下輸出:

10, 20, 30
廣告