1. 前言
在 C 語言中,數值與字串的顯示與輸入會使用格式指定符(Format Specifier)。特別是在處理浮點數時,理解「%f」與「%lf」等指定符的差異,對於正確撰寫程式非常重要。本文將聚焦於對應倍精度浮點數(double 型)的「%lf」用法,並說明其在 printf
與 scanf
函式中的使用方式,以及與其他指定符的差異。
2. 什麼是格式指定符
格式指定符是在 C 語言中,用於指定資料顯示或輸入格式的符號。使用與資料型態對應的指定符,可以正確地進行資料的輸入與輸出。我們先來看看常見的格式指定符與其對應的資料型態。
常見格式指定符與資料型態對應表
格式指定符 | 對應的資料型態 |
---|---|
%d | int 型(整數) |
%f | float 型(單精度浮點數) |
%lf | double 型(倍精度浮點數) |
%Lf | long double 型(擴展倍精度浮點數) |
3. 在 printf 函式中使用「%lf」
C 語言的 printf
函式用於依指定格式顯示資料。在顯示倍精度浮點數時,「%f」與「%lf」皆可使用,但它們的用法有些許差異。
printf 中「%lf」與「%f」的差異
在 printf
中,%f
與 %lf
都可以用來輸出 double
型資料。這是因為 printf
在輸出浮點數時,會自動將引數提升為 double
型。因此,在輸出倍精度浮點數時,通常習慣使用「%f」。
使用範例
#include <stdio.h>
int main() {
double num = 3.14159;
printf("%f\n", num); // 輸出: 3.141590
printf("%lf\n", num); // 輸出: 3.141590
return 0;
}
從以上範例可見,兩種指定符輸出的結果相同,但在 printf
輸出 double
時,一般慣用 %f
。
4. 在 scanf 函式中使用「%lf」
scanf
用於將輸入的資料存入指定型態的變數。在 scanf
中,必須讓指定符與變數的資料型態完全一致,這時「%f」與「%lf」的區分就很重要。
scanf 中「%lf」與「%f」的差異
- 「%f」:用於將輸入存入
float
型變數。 - 「%lf」:用於將輸入存入
double
型變數。若輸入目標為double
型,必須使用%lf
。
使用範例
#include <stdio.h>
int main() {
double num;
printf("請輸入數值: ");
scanf("%lf", &num); // 將輸入存入 double 型變數
printf("輸入的數值: %f\n", num);
return 0;
}
因此,在 scanf
中輸入倍精度浮點數時,必須使用「%lf」。若誤用「%f」,可能會導致非預期行為。
5. 使用「%lf」的注意事項
使用「%lf」時,尤其在 scanf
中,必須確保指定符與變數型態一致。若不一致,可能會導致非預期的結果或錯誤。
常見錯誤與正確用法
錯誤範例
以下程式碼中,float
型變數使用了 %lf
,這是不正確的。
#include <stdio.h>
int main() {
float num;
printf("請輸入數值: ");
scanf("%lf", &num); // 不正確的指定符
return 0;
}
正確範例
正確的做法是使用 double
型變數搭配「%lf」。
#include <stdio.h>
int main() {
double num;
printf("請輸入數值: ");
scanf("%lf", &num); // 正確的指定符
return 0;
}
在使用 scanf
時,務必保持指定符與變數型態一致。

6. 與其他格式指定符的差異
了解「%lf」以外的格式指定符,也有助於根據需求選擇正確的用法。
常見格式指定符與用途
%f
:用於float
型資料(在printf
中也可用於double
型)%Lf
:用於long double
型資料%e
/%E
:用於科學記號(科學記數法)輸出
範例與差異說明
#include <stdio.h>
int main() {
long double num_long_double = 3.14159265358979323846L;
printf("long double 型輸出: %Lf\n", num_long_double); // long double 指定符
printf("科學記號輸出: %e\n", num_long_double); // 科學記號輸出
return 0;
}
根據資料型態使用正確的指定符,可以提升輸出結果的精確度。
7. 總結
本文介紹了 C 語言中倍精度浮點數指定符「%lf」的用法,掌握以下要點可減少程式錯誤。
printf
函式:倍精度浮點數可用「%f」或「%lf」,但一般慣用「%f」。scanf
函式:double
型須用「%lf」,float
型須用「%f」,並確保型態與指定符一致。- 注意事項:在
scanf
中若指定符錯誤,可能導致非預期行為,因此務必匹配型態與指定符。