C語言基礎(chǔ)之C語言格式化輸出函數(shù)printf詳解
1、printf函數(shù)的一般格式
(由于篇幅較長,內(nèi)容較全,建議收藏)
printf函數(shù)的一般格式為:
printf(格式控制字符串,輸出值參數(shù)表);
如:
printf("f=%f,c=%f\n",f,c);
其中,f=%f,c=%f\n 是格式控制字符串,f,c 是輸出值參數(shù)表。
(1)格式控制字符串是用雙引號括起來的字符串,包括三類信息:
- 格式字符。格式字符由“%”引導,如%d、%f等。它的作用是控制輸出字符的格式。
- 轉(zhuǎn)義字符。格式控制字符串里的轉(zhuǎn)義字符按照轉(zhuǎn)義后的含義輸出,如上面printf函數(shù)雙引號內(nèi)的換行符“\n”,即輸出回車。
- 普通字符。普通字符即需要在輸出時原樣輸出的字符,如上面printf函數(shù)中雙引號內(nèi)的“f=”和“c= ”部分。
(2)輸出值參數(shù)表是需要輸出的數(shù)據(jù)項的列表,輸出數(shù)據(jù)項可以是常量、變量或表達式,輸出值參數(shù)之間用逗號分隔,其類型應與格式字符相匹配。每個格式字符和輸出值參數(shù)表中的輸出值參數(shù)一一對應,沒有輸出參數(shù)時,格式控制字符串中不再需要格式字符。
2、格式字符
(1)d格式字符
輸出帶符號的十進制整數(shù),正數(shù)的符號不輸出。
如:
int a = 256,b = -125;
printf("%d\n%d",a,b);
輸出結(jié)果為:

還可以在%和格式字符中間插入格式修飾符,用于指定輸出數(shù)據(jù)的域?qū)挘ㄋ嫉牧袛?shù)),如用“%5d”,指定輸出數(shù)據(jù)占5列,輸出的數(shù)據(jù)在域內(nèi)向右靠齊。如:
int a = 256,b = -125;
printf("%5d\n%5d",a,b);
輸出結(jié)果為:

其中256前面有2個空格,-125前面有一個空格。
若要輸出long(長整型)數(shù)據(jù),則在格式字符d前面加字母l(代表long),即“%ld”。
(2)f格式符
輸出一個實數(shù)(包括單精度、雙精度、長雙精度),以小數(shù)形式輸出,有以下幾種用法:
1)基本型,%f
不指定輸出數(shù)據(jù)的長度,由系統(tǒng)根據(jù)數(shù)據(jù)的實際情況決定數(shù)據(jù)所占的列數(shù)。系統(tǒng)處理的方法一般是:實數(shù)中的整數(shù)部分全部輸出,小數(shù)部分輸出6位。
如:
#include<stdio.h>
int main(){
double a = 1.0;
printf("%f\n",a/3);
return 0;
}
運行結(jié)果:

雖然a是double型,a/3的結(jié)果也是double型,但用 %f格式字符只能輸出6位小數(shù)。
2)指定數(shù)據(jù)寬度和小數(shù)位數(shù)用%m.nf 。
其中,m表示輸出數(shù)據(jù)的寬度,即占m列,n表示小數(shù)點后保留n位小數(shù)。(若不需強調(diào)輸出數(shù)據(jù)寬度,可直接用%.nf)
如:
#include<stdio.h>
int main(){
double a = 1.0;
printf("%20.15f\n",a/3);
return 0;
}
運行結(jié)果為:

其中,在0前面有3個空格,小數(shù)點后輸出了15位小數(shù)。
注意:一個double型數(shù)只能保證15位有效數(shù)字的精確度,即使指定小數(shù)位數(shù)為50(如用%.50f),也不能保證輸出的50位都是有效數(shù)值。
3)輸出的數(shù)據(jù)向左對齊,用%-m.nf。
即在m.n前面加一個負號,能夠讓輸出數(shù)據(jù)在域內(nèi)向左靠齊。
如:
#include<stdio.h>
int main(){
double a = 1.0;
printf("%-20.15f\n",a/3);
return 0;
}
運行結(jié)果:

(3)c格式字符
用于輸出一個字符,如:
#include<stdio.h>
int main(){
char ch = 'a';
printf("%c",ch);
return 0;
}
輸出結(jié)果:

也可以加格式修飾符指定域?qū)挘纾?/p>
#include<stdio.h>
int main(){
char ch = 'a';
printf("%5c",ch);
return 0;
}
輸出結(jié)果:

(4)s格式符
用于輸出一個字符串,如:
printf("%s","Hello!");
輸出結(jié)果:

3、使用printf函數(shù)時應注意的問題
(1)格式控制字符串中沒有%引導的格式字符時,不需要輸出值參數(shù)表,直接輸出字符串內(nèi)容,轉(zhuǎn)義字符按照轉(zhuǎn)義后的實際意義輸出,如:
#include<stdio.h>
int main(){
printf("Hello world!");
printf("\n");
printf("Hello,\nworld!");
return 0;
}
輸出結(jié)果:

(2)格式控制字符串中有%引導的格式字符時,輸出值參數(shù)表中的數(shù)量以及類型必須和格式字符一致,如:
#include<stdio.h>
int main(){
int a = 123;
double b = 35.8,c = 1.0;
printf("a = %d,b = %d\n",a,b);
printf("a = %d,c = %f\n",a);
return 0;
}
運行結(jié)果:

分析:第一個printf函數(shù)中的輸出參數(shù)b是double型,但對應的格式控制符為%d,當類型不一致時并不會進行類型轉(zhuǎn)換,而會將實際轉(zhuǎn)入的double型值當作需要的整形類型來理解,因此出現(xiàn)非預期結(jié)果;第二個printf函數(shù)中,格式控制字符串給出了兩個%引導的格式字符,但是輸出參數(shù)表中只有一個參數(shù)a。因此輸出c的值默認為內(nèi)存中a變量后面存儲單元的數(shù)據(jù)值,即c的值我們不能確定。
附表1:
printf函數(shù)中用到的格式字符
| 格式字符 | 說明 |
|---|---|
| d | 輸出帶符號的十進制整數(shù),正數(shù)的符號省略 |
| u | 以無符號的十進制整數(shù)形式輸出 |
| o | 以無符號的八進制整數(shù)形式輸出,不輸出前導符0 |
| x | 以無符號十六進制整數(shù)形式(小寫)輸出,不輸出前導符0x |
| X | 以無符號十六進制整數(shù)形式(大寫)輸出,不輸出前導符0X |
| f | 以小數(shù)形式輸出單、雙精度數(shù),隱含輸出6位小數(shù) |
| e | 以指數(shù)形式(小寫e表示指數(shù)部分)輸出實數(shù) |
| E | 以指數(shù)形式(大寫E表示指數(shù)部分)輸出實數(shù) |
| g | 自動選取f或e中輸出寬度較小的一種使用,且不輸出無意義的0 |
| c | 輸出一個字符 |
| s | 輸出字符串 |
附表2:
printf函數(shù)中用到的格式修飾符
| 格式修飾符 | 說明 |
|---|---|
| 英文字母l | 修飾格式字符d、u、o、x時,用于輸出long型數(shù)據(jù) |
| 英文字母L | 修飾格式字符f、e、g時,用于輸出long double型數(shù)據(jù) |
| 英文字母h | 修飾格式字符d、o、x時,用于輸出short型數(shù)據(jù) |
| 輸出域?qū)抦(m為整數(shù)) | 指定輸出項輸出時所占的列數(shù) |
| 顯示精度.n(n為整數(shù)) | 對于實數(shù),表示輸出n位小數(shù);對于字符串,表示截取的字符個數(shù) |
| -(減號) | 輸出數(shù)字或字符在域內(nèi)向左靠 |
到此這篇關(guān)于C語言基礎(chǔ)之C語言格式化輸出函數(shù)printf詳解的文章就介紹到這了,更多相關(guān)語言格式化輸出函數(shù)printf內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實現(xiàn)主機字節(jié)序和網(wǎng)絡字節(jié)序轉(zhuǎn)換示例
這篇文章主要為大家介紹了C++實現(xiàn)主機字節(jié)序和網(wǎng)絡字節(jié)序轉(zhuǎn)換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
C++動態(tài)調(diào)用動態(tài)鏈接庫(DLL或SO)的方法實現(xiàn)
動態(tài)鏈接庫是一種Windows操作系統(tǒng)下常見的可執(zhí)行文件格式,它包含了一些可被其他應用程序調(diào)用的函數(shù)和數(shù)據(jù),本文主要介紹了C++動態(tài)調(diào)用動態(tài)鏈接庫(DLL或SO),感興趣的可以了解一下2024-01-01

