職稱計算機考試輔導:字符串格式定義

字號:

printf()函數
    printf()函數是格式化輸出函數, 一般用于向標準輸出設備按規(guī)定格式輸出信息。在編寫程序時經常會用到此函數。printf()函數的調用格式為:
    printf("<格式化字符串>", <參量表>);
    其中格式化字符串包括兩部分內容: 一部分是正常字符, 這些字符將按原樣輸出; 另一部分是格式化規(guī)定字符, 以"%"開始, 后跟一個或幾個規(guī)定字符,用來確定輸出內容格式。
    參量表是需要輸出的一系列參數, 其個數必須與格式化字符串所說明的輸出參數個數一樣多, 各參數之間用","分開, 且順序一一對應, 否則將會出現意想不到的錯誤。
    format-string 的形式:%[flags][width].[precision] [{h|l|i|232|264}] type
    [flags]----->{ - , + , 0, # , blank }
    left align , sign, 補0 , 輸出前加空格
    [width]----->輸出的最少字符數
    [precision]----->
    {c,C :無影響。
    {d,i,u,o,x,X :輸出字符的最少個數,如果個數不夠,則在前面補0。
    {f :指定'.'后輸出字符個數,如果precision為0或無,則無小數。
    {s,S :輸出字符的個數,缺省輸出到NULL結束。
    [{h|...|264}]---->指定后面參數的大小。
    1. 格式化規(guī)定符
    Turbo C2.0提供的格式化規(guī)定符如下:
    ━━━━━━━━━━━━━━━━━━━━━━━━━━
     符號 作用
    ──────────────────────────
     %d 十進制有符號整數
     %u 十進制無符號整數
     %f 浮點數
     %s 字符串
     %c 單個字符
     %p 指針的值
     %e 指數形式的浮點數
     %x, %X 無符號以十六進制表示的整數
     %0 無符號以八進制表示的整數
     %g 自動選擇合適的表示法
    ━━━━━━━━━━━━━━━━━━━━━━━━━━
    說明:
     (1). 可以在"%"和字母之間插進數字表示場寬。
    例如: %3d 表示輸出3位整型數, 不夠3位右對齊。%9.2f 表示輸出場寬為9的浮點數, 其中小數位為2, 整數位為6,小數點占一位, 不夠9位右對齊。%8s 表示輸出8個字符的字符串, 不夠8個字符右對齊。
    如果字符串的長度、或整型數位數超過說明的場寬, 將按其實際長度輸出。但對浮點數, 若整數部分位數超過了說明的整數位寬度, 將按實際整數位輸出;若小數部分位數超過了說明的小數位寬度, 則按說明的寬度以四舍五入輸出。
    另外, 若想在輸出值前加一些0, 就應在場寬項前加個0。
    例如: %04d 表示在輸出一個小于4位的數值時, 將在前面補0使其總寬度為4位。
    如果用浮點數表示字符或整型量的輸出格式, 小數點后的數字代表寬度,小數點前的數字代表最小寬度。
     例如: %6.9s 表示顯示一個長度不小于6且不大于9的字符串。若大于9, 則第9個字符以后的內容將被刪除。
     (2). 可以在"%"和字母之間加小寫字母l, 表示輸出的是長型數。
    例如: %ld 表示輸出long整數%lf 表示輸出double浮點數
     (3). 可以控制輸出左對齊或右對齊, 即在"%"和字母之間加入一個"-" 號可說明輸出為左對齊, 否則為右對齊。
    例如: %-7d 表示輸出7位整數左對齊 %-10s 表示輸出10個字符左對齊
    2. 一些特殊規(guī)定字符
    ━━━━━━━━━━━━━━━━━━━━━━━━━━
     字符 作用
    ──────────────────────────
     \n 換行
     \f 清屏并換頁
     \r 回車
     \t Tab符
     \xhh 表示一個ASCII碼用16進表示,
     其中hh是1到2個16進制數
    ━━━━━━━━━━━━━━━━━━━━━━━━━━
    討論:例如串口接收單片機發(fā)送的16進制的數據,則我們要這樣接收:
    byte buf[56];
    recv(comm->handle,buf);
    buf[strlen(buf)]=0;//打上結束標志
    //將接收的數字轉化為16進制串
    char *pstr=new char[256];
    byte *pb=&buf[0];
    while(!pb)
    sprintf(pstr++,"%02x",*pb++);