久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6078|回復: 0
收起左側

sprintf()和 printf( ) 區別

[復制鏈接]
ID:80436 發表于 2015-5-21 00:09 | 顯示全部樓層 |閱讀模式
                                                                               

        sprintf()和 printf( )
                                                                                                                                            函數功能:把格式化的數據寫入某個字符串
函數原型:int sprintf( char *buffer, const char *format [, argument] … );
返回值:字符串長度(strlen)

例子:
char* who = "I";
char* whom = "CSDN";
sprintf(s, "%s love %s.", who, whom); //產生:"I love CSDN. "  這字符串寫到s中

sprintf(s, "%10.3f", 3.1415626); //產生:" 3.142"




C語言Printf格式
C中格式字符串的一般形式為: %[標志][輸出最小寬度][.精度][長度]類型, 其中方括號[]中的項為可選項。各項的意義介紹如下: 1.類型類型字符用以表示輸出數據的類型,其格式符和意義下表所示:
表示輸出類型的格式字符       格式字符意義
a                                                                  浮點數、十六進制數字和p-計數法(C99)
A                                                                  浮點數、十六進制數字和p-計數法(C99)
c                 輸出單個字符
d                 以十進制形式輸出帶符號整數(正數不輸出符號)
e                 以指數形式輸出單、雙精度實數
E                 以指數形式輸出單、雙精度實數
f                  以小數形式輸出單、雙精度實數
g                 以%f%e中較短的輸出寬度輸出單、雙精度實數,%e格式在指數小于-4或者大   于等于精度時使用
G                 以%f%e中較短的輸出寬度輸出單、雙精度實數,%e格式在指數小于-4或者大于等于精度時使用
i                                                                   有符號十進制整數(與%d相同)
o                 以八進制形式輸出無符號整數(不輸出前綴O)
p                                                                  指針
s                 輸出字符串
x                 以十六進制形式輸出無符號整數(不輸出前綴OX)
X                以十六進制形式輸出無符號整數(不輸出前綴OX)
u                 以十進制形式輸出無符號整數

/*   測試常見的輸出類型   */
#include "stdio.h"
#include "conio.h"
main()
{
     printf("The program test print style!\n");

     /*   以十進制形式輸出帶符號整數(正數不輸出符號)   */
     printf("%d\n" , 223);
     printf("%d\n" , -232);
     printf("\n");
     /*   以八進制形式輸出無符號整數(不輸出前綴O)   */
     printf("%o\n" , 223);
     printf("%o\n" , -232);
     printf("\n");
     /*   以十六進制形式輸出無符號整數(不輸出前綴OX)   */
     printf("%x\n" , 223);
     printf("%x\n" , -232);
     printf("\n");
     /*   以十進制形式輸出無符號整數   */
     printf("%u\n" , 223);
     printf("%u\n" , -232);
     printf("\n");
     /*   以小數形式輸出單、雙精度實數   */
     printf("%f\n" , 223.11);
     printf("%f\n" , 232.11111111);
     printf("%f\n" , -223.11);
     printf("%f\n" , -232.11111111);
     printf("\n");
     /*   以指數形式輸出單、雙精度實數   */
     printf("%e\n" , 223.11);
     printf("%e\n" , 232.11111111);
     printf("%e\n" , -223.11);
     printf("%e\n" , -232.11111111);
     printf("\n");
     /*   以%f%e中較短的輸出寬度輸出單、雙精度實數   */
     printf("%g\n" , 223.11);
     printf("%g\n" , 232.111111111111);
     printf("%g\n" , -223.11);
     printf("%g\n" , -232.111111111111);
     printf("\n");
     /*   輸出單個字符   */
     printf("%c\n" , 'a');
     printf("%c\n" , 97);
     printf("\n");
     /*   輸出單個字符   */
     printf("%s\n" , "this is a test!");
     printf("%s\n" , "2342o34uo23u");
     printf("\n");
     getch();
}
2.標志
標志字符為-、+、#、空格和0五種,其意義下表所示:
標志格式字符      標 志 意 義

-           結果左對齊,右邊填空格
+           輸出符號(正號或負號)
空格                                 輸出值為正時冠以空格,為負時冠以負號
#          對c,s,d,u類無影響;對o類,在輸出時加前綴0;對x類,
                                         在輸出時加前綴0x或者0X;對g,G 類防止尾隨0被刪除;
                                         對于所有的浮點形式,#保證了即使不跟任何數字,也打印一個小數點字符
0                                       對于所有的數字格式,用前導0填充字段寬度,若出現-標志或者指定了精度(對于整數),忽略
3.輸出最小寬度
用十進制整數來表示輸出的最少位數。若實際位數多于定義的寬度,則按實際位數輸出,若實際位數少于定義的寬度則補以空格或0。
/*   測試標志字符為-、+、#、空格四種   */
#include "stdio.h"
#include "conio.h"
main()
{
       /*   以十進制形式輸出帶符號整數(正數不輸出符號)   */
     printf("*%-10d*\n", 223);
     printf("*%+10d*\n" , -232);
     printf("*%2d*\n" , 223);
     printf("*%#d*\n" , -232);
     printf("\n");
     getch();
    /*   以八進制形式輸出無符號整數(不輸出前綴O)   */
     printf("*%-10o*\n" , 223);
     printf("*%+10o*\n" , -232);
     printf("*%o*\n" , 223);
     printf("*%#o*\n" , -232);
     printf("\n");
     getch();
     /*   以十六進制形式輸出無符號整數(不輸出前綴OX)   */
     printf("$%-10x$\n" , 223);
     printf("$%010x$\n" , -232);
     printf("$% x$\n" , 223);
     printf("$%#x$\n" , -232);
     printf("\n");

     /*   以十進制形式輸出無符號整數   */
     printf("%-10u\n" , 223);
     printf("%+10u\n" , -232);
     printf("% u\n" , 223);
     printf("%#u\n" , -232);
     printf("\n");
     getch();
     /*   以小數形式輸出單、雙精度實數   */
     printf("%-10f\n" , 223.11);
     printf("%+10f\n" , 232.11111111);
     printf("% f\n" , -223.11);
     printf("%#f\n" , -232.11111111);
     printf("\n");
     getch();
     /*   以指數形式輸出單、雙精度實數   */
     printf("%-10e\n" , 223.11);
     printf("%+10e\n" , 232.11111111);
     printf("% e\n" , -223.11);
     printf("%#e\n" , -232.11111111);
     printf("\n");
     getch();
     /*   以%f%e中較短的輸出寬度輸出單、雙精度實數   */
     printf("%-10g\n" , 223.11);
     printf("%+10g\n" , 232.111111111111);
     printf("% g\n" , -223.11);
     printf("%#g\n" , -232.111111111111);
     printf("\n");
     getch();
     /*   輸出單個字符   */
     printf("%-10c\n" , 'a');
     printf("%+10c\n" , 97);
     printf("% c\n" , 'a');
     printf("%#c\n" , 97);
     printf("\n");
     getch();
     /*   輸出單個字符   */
     printf("%-20s\n" , "this is a test!");
     printf("%+20s\n" , "2342o34uo23u");
     printf("% 20s\n" , "this is a test!");/* 不足補空格 */
     printf("%#s\n" , "2342o34uo23u");
     printf("\n");
     getch();
}

4.精度
精度格式符以“.”開頭,后跟十進制整數。本項的意義是:如果輸出數字,則表示小數的位數;如果輸出的是字符,則表示輸出字符的個數;若實際位數大于所定義的精度數,則截去超過的部分。
/*   測試精度   */
#include "stdio.h"
#include "conio.h"
main()
{
     printf("%.3d\n" , 5555);
     getch();
     printf("%.3f\n" , 0.88888);
     getch();
     printf("%.3f\n" , 0.9999);
     getch();
     printf("%.4s\n" , "this is a test!");
     getch();
}
5.長度
長度格式符為h,l兩種,h表示按短整型量輸出,l表示按長整型量輸出。
     h和整數轉換說明符一起使用,表示一個short   int 或者unsigned short int類型的數值 ,示例:
%hu,%hx,%6.4hd
     hh和整數轉換說明符一起使用,表示一個short   int 或者unsigned short類型的數值 ,示例:
%hhu,%hhx,%6.4hhd
     j和整數轉換說明符一起使用,表示一個intmax_t或者uintmax_t類型的數值 ,示例:
%jd,%8jx
     l和整數轉換說明符一起使用,表示一個long int 或者unsigned long int類型的數值 ,示例:
%ld,%8lu
     ll和整數轉換說明符一起使用,表示一個long int 或者unsigned long int類型的數值 (C99),示例:
%lld,%8llu
     L和浮點轉換說明符一起使用,表示一個long double的值,示例:%Lf,%10.4Le
     t和整數轉換說明符一起使用,表示一個ptrdiff_t值(兩個指針之間的差相對應的類型)(C99),示例:
%td,%12ti
     z和整數轉換說明符一起使用,表示一個size_t值(sizeof返回的類型)(C99),示例:%zd,%12zx
main(){
int a=15;
float b=138.3576278;
double c=35648256.3645687;
char d='p';
printf("a=%d,%5d,%o,%x\n",a,a,a,a);
printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b);
printf("c=%lf,%f,%8.4lf\n",c,c,c);
printf("d=%c,%8c\n",d,d);
}
a<--15
b<--138.3576278
c<--35648256.3645687
d<--'p'

main()
{
     int a=29;
     float b=1243.2341;
     double c=24212345.24232;
     char d='h';
     printf("a=%d,%5d,%o,%x\n",a,a,a,a);
   
     /* 其中“%f”和“%lf ”格式的輸出相同,說明“l”符對“f”類型無影響
      * “%5.4lf”指定輸出寬度為5,精度為4,由于實際長度超過5故應該按實際位數輸出,小數位數超過4位        *   部分被截去
      */
     printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b);
   
     /* 輸出雙精度實數,“%8.4lf ”由于指定精度為4位故截去了超過4位的部分 */
     printf("c=%lf,%f,%8.4lf\n",c,c,c);
   
     /* 輸出字符量d,其中“%8c ”指定輸出寬度為8故在輸出字符p之前補加7個空格 */
     printf("d=%c,%8c\n",d,d);
     getch();
}

使用printf函數時還要注意一個問題,那就是輸出表列中的求值順序。不同的編譯系統不一定相同,可以從左到右,也可從右到左。Turbo C是按從右到左進行的
main(){
int i=8;
printf("%d\n%d\n%d\n%d\n%d\n",++i,--i,i--,i++,-i--);
}

6.特殊用法

對于m.n的格式還可以用如下方法表示(例)
char ch[20];
printf("%*.*s\n",m,n,ch);
前邊的*定義的是總的寬度,后邊的定義的是輸出的個數。分別對應外面的參數m和n 。我想這種方法的好處是可以在語句之外對參數m和n賦值,從而控制輸出格式。
今天(06.6.9)又看到一種輸出格式 %n 可以將所輸出字符串的長度值賦紿一個變量, 見下例:

int slen;

printf("hello world%n", &slen);

執行后變量被賦值為11。

特別注意下%*.*s這種用法


                                                                                            

                                                                               

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99中文字幕 | 中文字幕在线视频播放 | 在线播放黄色 | 日韩中文在线视频 | 国产视频一 | 中文字幕免费 | 一级免费看 | 日韩大片在线观看 | 97久久精品人人澡人人爽 | 亚洲17p | 午夜影院福利 | 夫妻av| 成人动漫一区二区 | 国产一级片视频 | 亚洲欧美第一页 | 黄色一级视频免费看 | 国产一级特黄aaa大片 | 欧美精产国品一二三区 | 国产天天操| 毛片网站视频 | 九九热在线播放 | 天天操天天干天天 | 欧美在线一级 | 国产成人精品一区二区三区福利 | 午夜激情在线观看 | 私库av在线 | 国产精品久久久久久久久久久久久久久 | 精久久久久 | 美女久久久 | 人人爽人人爽人人 | 欧美在线视频一区二区 | 日本色视频 | 国产小视频网站 | www.四虎.com | 欧美黄色一级视频 | 免费看黄色录像 | 97人人视频 | 三级黄色在线观看 | 久久视频在线免费观看 | 黄色在线免费网站 | 国产欧美日韩综合精品 |