ps臨摹網(wǎng)站防城港網(wǎng)站seo
前言:什么是printf
在百度百科中是這樣形容printf的:printf 是指格式化輸出函數(shù),主要功能是向標(biāo)準(zhǔn)輸出設(shè)備按規(guī)定格式輸出信息。printf 是C語言標(biāo)準(zhǔn)庫函數(shù),定義于頭文件 <stdio.h>。printf 函數(shù)的一般調(diào)用格式為:printf(“<格式化字符串>”, <參量表>) 。輸出的字符串除了可以是字母、數(shù)字、空格和一些數(shù)字符號以外,還可以使用一些轉(zhuǎn)義字符表示特殊的含義 ,那么我就簡單介紹一下printf這個庫函數(shù)。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、printf是格式輸出庫函數(shù)
如標(biāo)題所見printf是一個格式輸出庫函數(shù),因為它是庫函數(shù)所以它有一個頭文件,這個頭文件是***<stdio.h>***
,在使用時一定要引用這個頭文件。printf() 的作?是將參數(shù)?本輸出到屏幕。它名字??的 f 代表 format (格式化),表?可以定制輸出?本的格式。printf是不會在末尾加換行符號(\n)的,這一點和python不一樣,需要我們的需求來添加換行符(\n)如下面的代碼便能看出差別
#include <stdio.h>
int main ()
{
printf ("Hello,World!");
printf ("Hello,World!");
printf ("Hello,World!\n");
printf ("Hello,World!\n");
return 0;
}
這段代碼的輸出格式如下
可以明顯看出差別,但是因為printf是不會在末尾加換行符號(\n)的所以第一行有三個Hello,World不必感到驚奇,因為printf是格式輸出函數(shù)所以下面便將介紹printf的格式化的表現(xiàn)。
二:輸出格式化
格式符
格式輸出化的關(guān)鍵之一是格式符(說明符(specifier)用于規(guī)定輸出數(shù)據(jù)的類型)在c語言中有許多的格式符下面便是一些常見的格式符:
? %a :?六進(jìn)制浮點數(shù),字?輸出為?寫。
? %A :?六進(jìn)制浮點數(shù),字?輸出為?寫。
? %c :字符。
? %d :?進(jìn)制整數(shù)。
? %e :使?科學(xué)計數(shù)法的浮點數(shù),指數(shù)部分的 e 為?寫。
? %E :使?科學(xué)計數(shù)法的浮點數(shù),指數(shù)部分的 E 為?寫。
? %i :整數(shù),基本等同于 %d 。
? %f :?數(shù)(包含 float 類型和 double 類型)。
? %g :6個有效數(shù)字的浮點數(shù)。整數(shù)部分?旦超過6位,就會?動轉(zhuǎn)為科學(xué)計數(shù)法,指數(shù)部分的 e
為?寫。
? %G :等同于 %g ,唯?的區(qū)別是指數(shù)部分的 E 為?寫。
? %hd :?進(jìn)制 short int 類型。
? %ho :?進(jìn)制 short int 類型。
? %hx :?六進(jìn)制 short int 類型。
? %hu :unsigned short int 類型。
? %ld :?進(jìn)制 long int 類型。
? %lo :?進(jìn)制 long int 類型。
? %lx :?六進(jìn)制 long int 類型。
? %lu :unsigned long int 類型。
? %lld :?進(jìn)制 long long int 類型。
? %llo :?進(jìn)制 long long int 類型。
? %llx :?六進(jìn)制 long long int 類型。
? %llu :unsigned long long int 類型。
? %Le :科學(xué)計數(shù)法表?的 long double 類型浮點數(shù)。
? %Lf :long double 類型浮點數(shù)。
? %n :已輸出的字符串?dāng)?shù)量。該占位符本?不輸出,只將值存儲在指定變量之中。
? %o :?進(jìn)制整數(shù)。
? %p :指針。
? %s :字符串。
? %u :?符號整數(shù)(unsigned int)。
? %x :?六進(jìn)制整數(shù)。
? %zd : size_t 類型。
? %% :輸出?個百分號。
用格式符可以代替引用相關(guān)數(shù)據(jù),如下的一段簡單代碼
#include <stdio.h>
int main()
{char b[] = { "讀者都發(fā)財" };int a = 8;printf("%d\n", a);printf("%s\n", b);return 0;
}
它的顯示如下
它并沒有輸出%d,%s而是輸出了對應(yīng)的數(shù)據(jù)同時也規(guī)定了輸出數(shù)據(jù)的模式分別為?進(jìn)制整數(shù)(%d)和字符串(%s)。如果對此還有疑問的話可以看以下代碼
#include <stdio.h>
int main()
{printf("%d", 'a');return 0;
}
它的顯示為下
這段代碼打印的是字符’a’的ASCII碼值,而不是字符’a’本身這便是輸出格式化的一小點體會,當(dāng)然,輸出格式化可不會這么簡單,比如下面要說的限定寬度
限定寬度
限定寬度是指printf() 允許限定占位符的最?寬度。*** 而不是最終寬度***也許現(xiàn)在還不太理解但下面這段代碼將解決一些疑問
#include <stdio.h>
int main()
{printf("%5d\n", 78);printf("%5d\n", 78465476);return 0;
}
它的結(jié)果是這樣的
可以明顯看到這其中的差異輸出結(jié)果78因為沒有達(dá)到相應(yīng)的最?寬度(5位)所以向右輸出了3位才輸出78(右對齊),而78465476超過了5位沒有向右輸出多的位數(shù)但也沒有少位這便是最?寬度的意義(如果希望改成左對?,在輸出內(nèi)容后?添加空格,可以在占位符的 % 的后?插??個 - 號)下面便介紹最?寬度的使用方法
整數(shù)部分的最?寬度使用方法
整數(shù)部分的最?寬度使用方法很簡單便是在%后加入你想要的最?寬度值便行了如下面代碼所示(順便展示左對齊和右對齊的區(qū)別)
#include <stdio.h>
int main()
{printf("%5d\n", 78);printf("%-5d", 78);printf("hh");return 0;
}
輸出結(jié)果如圖所示
但我們不光有整數(shù)還有小數(shù),下面便介紹小數(shù)的最?寬度使用方法。
小數(shù)的最?寬度使用方法
如果只是限定整體的化很簡單和整形一樣只要在%后加最?寬度就行如下
#include <stdio.h>
int main()
{printf("%f\n", 1.2);printf("%15f\n", 1.2);return 0;
}
因為%f表?輸出的浮點數(shù)最少要占據(jù)12位所以加的15來表示差距,結(jié)果如下
但是小數(shù)部分始終沒有限定,下面便介紹小數(shù)部分的限定方法:便是在%后加.x(x為數(shù)字)如下代碼所示
#include <stdio.h>
int main()
{printf("%f\n", 1.2);printf("%.1f\n", 1.2);return 0;
}
輸出結(jié)果如下
但是每一次都要用X.X 的方式實在麻煩有沒有簡單的方法呢?
答案是有的那便是:最?寬度和?數(shù)位數(shù)這兩個限定值,都可以? * 代替,通過 printf() 的參數(shù)傳???赡艹橄竽敲从么a說話。
#include <stdio.h>
int main()
{printf("%f\n", 1.2);printf("%*.*f\n", 5,1,1.2);return 0;
}
在這段代碼中前面的兩個是控制整體最?寬度和小數(shù)的最?寬度最后是輸出值。結(jié)果如下
這下可以相對簡單的控制小數(shù)的位數(shù)
輸出部分字符串
占位符?來輸出字符串,默認(rèn)是全部輸出。如果只想輸出開頭的部分,可以? %.X指定輸出的?度,其中X代表?個數(shù)字,表?所要輸出的?度如下代碼所示
#include <stdio.h>
int main()
{printf("%.10s", "作者是帥哥,讀者是有錢人");return 0;
}
在這里運行的結(jié)果是作者是帥哥(中文一個字要兩個位置),而沒有輸出讀者是有錢人如下。
輸出符號
默認(rèn)情況下, printf() 不對正數(shù)顯? + 號,只對負(fù)數(shù)顯? - 號。如果想讓正數(shù)也輸出 + 號,可以在占位符的 % 后?加?個 +。
#include <stdio.h>
int main()
{printf("%+d\n", 12);printf("%-d", -12);return 0;
}
結(jié)果如下
這便是我對printf的了解歡迎大家的斧正