青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 298  文章 - 377  trackbacks - 0
<2007年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用鏈接

留言簿(34)

隨筆分類

隨筆檔案

文章檔案

相冊

收藏夾

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

Format參數是一個格式字符串,用于格式化Args里面的值的。
Args又是什么呢,它是一個變體數組,即它里面可以有多個參數,而且每個參數可以不同。
如以下例子:
Format('my name is %6s',['wind']);
返回后就是
my name is wind

現在來看Format參數的詳細情況:
Format里面可以寫普通的字符串,比如'my name is'
但有些格式指令字符具有特殊意義,比如"%6s"

一、格式指令具有以下的形式:
"%" ["-"] [width] ["." prec] type
它是以"%"開始,而以type結束,type表示一個具體的類型。中間是用來
格式化type類型的指令字符,是可選的。

先來看看type,type可以是以下字符:
1.d 十制數,表示一個整型值

2.u 和d一樣是整型值,但它是無符號的,而如果它對應的值是負的,則返回時
是一個2的32次方減去這個絕對值的數
如:Format('this is %u',[-2]);
返回的是:this is 4294967294

3.f 對應浮點數

4.e 科學表示法,對應整型數和浮點數,
比如Format('this is %e',[-2.22]);
返回的是:this is -2.22000000000000E+000
等一下再說明如果將數的精度縮小

5.g 這個只能對應浮點型,且它會將值中多余的數去掉
比如Format('this is %g',[02.200]);
返回的是:this is 2.2

6.n 只能對應浮點型,將值轉化為號碼的形式。看一個例子就明白了
Format('this is %n',[4552.2176]);
返回的是this is 4,552.22
注意有兩點,一是只表示到小數后兩位,等一下說怎么消除這種情況
二是,即使小數沒有被截斷,它也不會也像整數部分一樣有逗號來分開的

7.m 錢幣類型,但關于貨幣類型有更好的格式化方法,這里只是簡單的格式化
另外它只對應于浮點值
Format('this is %m',[9552.21]);
返回:this is ¥9,552.21

8.p 對應于指針類型,返回的值是指針的地址,以十六進制的形式來表示
例如:
var X:integer;
p:^integer;
begin
X:=99;
p:=@X;

Edit1.Text:=Format('this is %p',[p]);
end;
Edit1的內容是:this is 0012F548

9.s 對應字符串類型,不用多說了吧

10.x 必須是一個整形值,以十六進制的形式返回
Edit1.Text:=Format('this is %X',[15]);
返回是:this is F

二、下面介紹格式化Type的指令:

1.[width] 指定將被格式化的值占的寬度,看一個例子就明白了
Format('this is %4d',[12]);
輸出是:this is 12
這個是比較容易,不過如果Width的值小于參數的長度,則沒有效果。
如:Format('this is %1d',[12]);
輸出是:this is 12
注:在width前可以加0表示不足長度部分使用0補齊,默認為用空格補齊;

2.[-] 這個指定參數向左齊,和[width]合在一起最可以看到效果:
Format('this is %-4d,yes',[12]);
輸出是:this is 12 ,yes

3.[l] 向右對齊;

3.["." prec] 指定精度,對于浮點數效果最佳:
Format('this is %.2f',['1.1234]);
輸出 this is 1.12
Format('this is %.7f',['1.1234]);
輸了 this is 1.1234000

而對于整型數,如果prec比如整型的位數小,則沒有效果
反之比整形值的位數大,則會在整型值的前面以0補之
Format('this is %.7d',[1234]);
輸出是:this is 0001234]

對于字符型,剛好和整型值相反,如果prec比字符串型的長度大
則沒有效果,反之比字符串型的長度小,則會截斷尾部的字符
Format('this is %.2s',['1234']);
輸出是 this is 12

而上面說的這個例子:
Format('this is %e',[-2.22]);
返回的是:this is -2.22000000000000E+000
怎么去掉多余的0呢,這個就行啦
Format('this is %.2e',[-2.22]);

 


%d 用來輸出十進制整數,可以有長度的修飾 

%5d   表示用5個數字的寬度顯示數字,這里的寬度表示顯示的寬度;如果輸入的參數長度小于5,前面用空格補齊;
%05d 表示用5個數字的寬度顯示數字,這里的寬度表示顯示的寬度;如果輸入的參數長度小于5,前面用0補齊;

%o和%x 分別表示8進制 和16進制   都表示無符號的整形 

%u 表示無符號10進制整形的輸入 

%c 字符輸出 

%s 字符串輸出(- 左對齊,l右對齊,"5.3" 5表示顯示這個字符的屏幕寬度,3表示要截取的字符數) 
      str.Format("%8ls","test");//右對齊       (右對齊時l在長度之后)
      str.Format("%-8s","test");//左對齊       (左對齊時-在長度之前)

%f 以小數格式輸出(-、l、5.3 同上) 

%e 浮點輸出

 

——————————————————————————————————————————————————————————————————————————

 在MFC程序中,使用CString來處理字符串是一個很不錯的選擇。CString既可以處理Unicode標準的字符串,也可以處理ANSI標準的字符串。CString的Format方法給我們進行字符串的轉換帶來了很大的方便,比如常見的int、float和double這些數字類型轉換為CString字符串只需一行代碼就可以實現。

  先看看Format用于轉換的格式字符:

  %c                 單個字符

  %d                 十進制整數(int)

  %ld                十進制整數(long)

  %f                 十進制浮點數(float)

  %lf                十進制浮點數(double)

  %o                 八進制數

  %s                 字符串

  %u                 無符號十進制數

  %x                 十六進制數

  1、int轉換為CString:

  CString str;

  int number=15;

  //str="15"

  str.Format(_T("%d"),number);

  //str=" 15"(前面有兩個空格;4表示將占用4位,如果數字超過4位將輸出所有數字,不會截斷)

  str.Format(_T("%4d"),number);

  //str="0015"(.4表示將占用4位,如果數字超過4位將輸出所有數字,不會截斷)

  str.Format(_T("%.4d"),number);

  long轉換為CString的方法與上面相似,只需要把%d改為%ld就可以了。

  2、double轉換為CString:

  CString str;

  double num=1.46;

  //str="1.46"

  str.Format(_T("%lf"),num);

  //str="1.5"(.1表示小數點后留1位,小數點后超過1位則四舍五入)

  str.Format(_T("%.1lf"),num);

  //str="1.4600"

  str.Format(_T("%.4f"),num);

  //str=" 1.4600"(前面有1個空格)

  str.Format(_T("%7.4f"),num);

  float轉換為CString的方法也同上面相似,將lf%改為f%就可以了。

  3、將十進制數轉換為八進制:

  CString str;

  int num=255;

  //str="377"

  str.Format(_T("%o"),num);

  //str="00000377"

  str.Format(_T("%.8o"),num);

 

 

 

 

 

 

Format是一個很常用,卻又似乎很煩的方法,以下是它的完整概貌,以供大家查詢之用:  

格式化字符串forma("%d",12)意思是將一個整形的格式化的字符(我認為是保持其形狀不變
1).
格式說明總是以%字符開始,以下是不同類型數據的格式方式%號后的說明
d
輸出帶符號十進制數 
o
輸出無符號八進制數 
x
輸出無符號十六進制數 
u
輸出無符號數 
c
輸出單個字符 
s
輸出一串字符 
f
輸出實數(6位小數) 
e
以指數形式輸出實數 
g
選用fe格式中輸出寬度較小的格式,不輸出
ld
輸入輸出long型數據 
lf
輸入輸出double型數據 
m
數據輸出寬度為
.n
輸出小數位數為


一、字符串 

首先看它的聲明:  
function Format(const Format: string; const Args: array of const): string; overload;  
事實上Format方法有兩個種形式,另外一種是三個參數的,主要區別在于它是線程安全的,  
但并不多用,所以這里只對第一個介紹:  

function Format(const Format: string; const Args: array of const): string; overload;  
Format
參數是一個格式字符串,用于格式化Args里面的值的。Args又是什么呢,  
它是一個變體數組,即它里面可以有多個參數,而且每個參數可以不同。  
如以下例子:  
Format("my name is %6s","wind");  
返回后就是  
my name is wind  

現在來看Format參數的詳細情況:  
Format
里面可以寫普通的字符串,比如"my name is"  
但有些格式指令字符具有特殊意義,比如"%6s"  

格式指令具有以下的形式:  
"%" [index ":"] ["-"] [width] ["." prec] type  
它是以"%"開始,而以type結束,type表示一個具體的類型。中間是用來  
格式化type類型的指令字符,是可選的。  

先來看看type,type可以是以下字符:  
十制數,表示一個整型值  
d一樣是整型值,但它是無符號的,而如果它對應的值是負的,則返回時  
是一個232次方減去這個絕對值的數  
如:Format("this is %u",-2);  
返回的是:this is 4294967294  
對應浮點數  
科學表示法,對應整型數和浮點數,  
比如Format("this is %e",-2.22);  
返回的是:this is -2.220000E+000  
等一下再說明如果將數的精度縮小  
這個只能對應浮點型,且它會將值中多余的數去掉  
比如Format("this is %g",02.200);  
返回的是:this is 2.2  
只能對應浮點型,將值轉化為號碼的形式。看一個例子就明白了  
Format("this is %n",4552.2176);  
返回的是this is 4,552.22  
注意有兩點,一是只表示到小數后兩位,等一下說怎么消除這種情況  
二是,即使小數沒有被截斷,它也不會也像整數部分一樣有逗號來分開的  
錢幣類型,但關于貨幣類型有更好的格式化方法,這里只是簡單的格式化  
另外它只對應于浮點值  
Format("this is %m",9552.21);  
返回:this is 9,552.21  
對應于指針類型,返回的值是指針的地址,以十六進制的形式來表示  
例如:  
Format("this is %p",p);  
Edit1
的內容是:this is 0012F548  
對應字符串類型,不用多說了吧  
必須是一個整形值,以十六進制的形式返回  
Format("this is %X",15);  
返回是:this is F  

類型講述完畢,下面介紹格式化Type的指令:  
[index ":"] 
這個要怎么表達呢,看一個例子  
Format("this is %d %d",12,13);  
其中第一個%d的索引是0,第二個%d1,所以字符顯示的時候  
是這樣 this is 12 13  

而如果你這樣定義:  
Format("this is %1:d %0:d",12,13);  
那么返回的字符串就變成了  
this is 13 12  
現在明白了嗎,[index ":"] 中的index指示Args中參數顯示的  
順序  

還有一種情況,如果這樣Format("%d %d %d %0:d %d", 1, 2, 3, 4) ; 
將返回1 2 3 1 2  
如果你想返回的是1 2 3 1 4,必須這樣定:  
Format("%d %d %d %0:d %3:d", 1, 2, 3, 4) ; 
但用的時候要注意,索引不能超出Args中的個數,不然會引起異常  
Format("this is %2:d %0:d",12,13);  //error
由于Args中只有12 13 兩個數,所以Index只能是01,這里為2就錯了  
[width] 
指定將被格式化的值占的寬度,看一個例子就明白了  
Format("this is %4d",12);  
輸出是:this is 12  
這個是比較容易,不過如果Width的值小于參數的長度,則沒有效果。  
如:Format("this is %1d",12);  
輸出是:this is 12  
["-"] 
這個指定參數向左齊,和[width]合在一起最可以看到效果:  
Format("this is %-4d,yes",12);  
輸出是:this is 12 ,yes  

["." prec] 
指定精度,對于浮點數效果最佳:  
Format('this is %.2f',['1.1234]);  
輸出 this is 1.12  
Format('this is %.7f',['1.1234]);  
輸了 this is 1.1234000  

而對于整型數,如果prec比如整型的位數小,則沒有效果  
反之比整形值的位數大,則會在整型值的前面以0補之  
Format('this is %.7d',[1234]);  
輸出是:this is 0001234]  

對于字符型,剛好和整型值相反,如果prec比字符串型的長度大  
則沒有效果,反之比字符串型的長度小,則會截斷尾部的字符  
Format('this is %.2s',['1234']);  
輸出是 this is 12  

而上面說的這個例子:  
Format('this is %e',[-2.22]);  
返回的是:this is -2.22000000000000E+000  
怎么去掉多余的0呢,這個就行啦  
Format('this is %.2e',[-2.22]);  

好了,第一個總算講完了,應該對他的應用很熟悉了吧  

m_result.Format("
您選的城市是:/r/n %s,/r/n您選的人是:/r/n%s",city1 +  city2 +  city3,people); 
  UpdateData(0);

格式小結: 
1)最常用的格式是%d,含義是以10進制形式打印一個整數。 
如果輸出的整數是負數,則,輸出的第一個字符就是‘-’ 
2%u格式與%d格式類似,只不過要求打印無符號10進制整數。 
3%o格式請求輸出8進制整數 
4%x%X格式請求輸出16進制整數。 
%x
格式中用小寫字母a,b,c,d,e,f來表示1015之間的數 
%X
格式中用大寫字母A,B,C,D,E,F來表示1015之間的數 
共同點:8進制和16進制整數總是作為無符號數處理的。 
5%s格式用于打印字符串,與之對應的參數應該是一個字符指針,待輸出的字符始于該指針所指向的地址,直到出現一個空字符('/0' 
才終止。 
6%c格式用于打印單個字符:例如: 
printf("%c",c); 
等價于 putchar©; 
7%g,%f%e這三個格式用于打印浮點值。 
%g
格式用于打印那些不需要按列對齊的浮點數特別有用。其作用有二: 
一,去掉該數尾多余的零(沒有達到六位的數) 
二,保留六位有效數字(多余六位的) 
%e
格式用于打印浮點數時,一律顯示地使用指數形式:例如:輸出圓周率時是:3.141593e+00 
兩者的區別: 
%g
格式打印出的數是總共6位有效數字 
%e
格式打印出小數點后的6位有效數字 
%f
禁止使用指數形式來表示浮點數。因此圓周率輸出為:3.141593 
(但注意它的精度要求:也是小數點后6位有效數字) 
8%%格式用于打印一個%字符。 
9%E%G只是在輸出時用大寫字母(E)代替了小寫字母(e) 
另外需要注意的一些知識點

*************************************** 
對齊規則: 
1)當指定寬度大于要輸出位數時,數右對齊,左端補空格 
當前綴'-'號時,想要數左對齊,右端補空格 
大大的前提:只有當指定寬度存在時,前綴'-'才有意義。 
經驗:一般來說,左端對齊的形式看上去要美觀整齊一點。 
*************************************** 
輸出正負號的技巧:(記住)例如: 
printf("%+d %+d %+d/n",-5,0,5); 
只要在中間加個“+”號就行。作用是輸出符號位(即,數的正負號) 
如果不希望正數的前面出現‘+’號,可用下面的方法 

*************************************** 
只要在中間加個“ ”號(即:空格)就行。(記住)例如: 
作用:如果一個數是非負數,就在它的前面插入一個空格。 
int i; 
for(i=-3;i<=3;i++) 
 printf("% d/n",i); //
注意%d之間有一個空格 
輸出結果如下: 
-3 
-2 
-1 




問題:如果‘+’‘ ’同時出現在中間時,要以‘+’為準。 
兩個符號的共同點:用于對齊輸出的數:(尤其對于小數來說) 
 
兩種格式:%+e% e 
C
語言中基本的輸入輸出函數有: 
putchar ():
把變量中的一個字符常量輸出到顯示器屏幕上
getchar ();
從鍵盤上輸入一個字符常量,此常量就是該函數的值
printf ();
把鍵盤中的各類數據,加以格式控制輸出到顯示器屏幕上
scanf ();
從鍵盤上輸入各類數據,并存放到程序變量中
puts ():
把數組變量中的一個字符串常量輸出到顯示器屏幕上
gets ():
從鍵盤上輸入一個字符串常量并放到程序的數組中
sscanf(); 
從一個字符串中提取各類數據。 
 putchar() 
 getchar() 顧名思議就是從輸入流中獲取一個字符和輸出一個字符,比較簡單,不再多講。 
例子如下: 
char c = getchar(); 
putchar©; 
 
格式化輸入輸出scanf()printf()是最有用的,所以重點講一下。 
printf(): 
一般形式
printf("
格式控制".輸出列表);  
eg : printf("a=%d,b=%f,c=%c/n",a,b,c); 
1;
格式控制
格式控制是用雙引號括起來的字符串,也稱"轉換控制字符串",它包含以下兩部分信息
格式說明:由"%"和格式字符組成,%d,%f,%c,他的作用是把輸出數據轉換為指定格式輸出,格式的說明總是由"%"字符開始的.

普通字符:需要原樣輸出的字符,或者是一些有特殊含義的字符,如/n,/t 
2;
輸出列表 
就是需要輸出的一些數據,也可以是表達式,如果在函數中需要輸出多個變量或表達式,則要用逗號隔開
 
一些特殊字符的輸出: 
單引號,雙引號,和反斜杠的輸出在前面加轉義字符”/” 
如:”/’” , “/”” , “//” 
%
的輸出用兩個連在一起的%%,即printf(“%%”); 

常用的格式說明如下
格式字符 
以十進制形式輸出帶符號整數(正數不輸出符號)  
以八進制形式輸出無符號整數(不輸出前綴O)  
以十六進制形式輸出無符號整數(不輸出前綴OX)  
以十進制形式輸出無符號整數  
以小數形式輸出單精度實數  
lf
以小數形式輸出雙精度實數 
以指數形式輸出單、雙精度實數  
%f%e中較短的輸出寬度輸出單、雙精度實數  
輸出單個字符  
輸出字符串  
 
這里強調一下:網上很多文章都說lf是一樣的,即不管單精度,雙精度浮點數,都可以用f, 但我在POJ上做過測試,輸出Double時用f確實也可以 ,但讀入時,用f就報WA,所以大家如果對Double進行讀寫的話,都用lf吧。 
說到Double,再啰嗦一句,建議大家要用到浮點數時都用Double,不要用float,因為在很多情況下,float精度不夠會導致WA 
特殊: 
64位整數的輸入輸出,在POJ上的C++環境下(VC)64位整數是: 
__int64 
(注意int前面是兩個下劃線) 
輸入輸出格式為”%I64d”. 
G++環境下(Dev C++) 64位整數是 
long long 
輸入輸出格式為”%lld”. 

輸出寬度 
  用十進制整數來表示輸出的最少位數。 注意若實際位數多于定義的寬度,則按實際位數輸出, 若實際位數少于定義的寬度則補以空格或0 
精度 
  精度格式符以“.”開頭,后跟十進制整數。意義是:如果輸出數字,則表示小數的位數;如果輸出的是字符, 則表示輸出字符的個數;若實際位數大于所定義的精度數,則截去超過的部分。 
標志格式字符  
結果左對齊,右邊填空格  
輸出符號(正號或負號)空格輸出值為正時冠以空格,為負時冠以負號 
例如: 
double c=24212345.24232; 
printf(“%020.4”); 
表示輸出精確到小數點后4位,輸出占20位,若有空余的位補0. 
 scanf
 
scanf
的很多用法都是和printf對應的,故不再贅述。 
說一下scanf一個特別好用的地方,就是可以濾去一些不想要的東西。 
舉例說明如下: 
比如輸入為日期 yyyy-mm-dd,就可以這樣寫: 
int year,moth,day; 
scanf(“%d-%d-%d”,&year,&moth,&day); 
再比如: 
scanf("%3d %*3d %2d",&m,&n); 
輸入113 118 69回車(系統將113賦予m,69賦予n,因為*號表示跳過它相應的數據所以118不賦予任何變量
puts()
用的不多,且基本都能用printf()代替,故不再多說。 
gets()
是從輸入流中獲取一行字符串放入字符數組中
char in[100]; 
gets(in); 
大家可能最容易出錯的地方就是字符串的輸入,所以強調一下: 
能進行字符,字符串輸入的有: 
getchar(), scanf(“%c”); scanf(“%s”), gets() 
其中getchar()  scanf(“%c”)的功能是一樣的。 
需要注意的是,這兩個函數讀入的是輸入流中當前位置的字符, 
比如: 
 scanf(“%d”,&n); 
 c = getchar(); 
假設輸入 67/ (假設“/”代表回車),則第一個scanf讀入一個整數67后,當前輸入流的位置是67之后,即指向回車符,所以第二個getchar()讀入的就是一個回車符了,即 c = ‘/n’ 
同樣,gets()也是從當前位置讀入一行字符串。 
比如: 
scanf(“%d”,&n); 
gets(str); 
此時讀入字符數組中的字符串就是“/n”  
所以通常在用scanf讀入一個非字符串的類型之后,如果要讀入字符,或字符數組,都用一個額外的getchar()把回車符讀掉,若后面跟的不止一個回車符,可能還有多余的空格的話,就用gets()讀掉。 
 
和以上不同的是,scanf(“%s”) 讀入的時候是會忽略掉空格,回車和制表符的。并且以空格,回車和制表符作為字符串結束的標志。 
 
經常會有這樣的題,輸入第一行是一個整數,接下來每行的第一個是一個字符,用來表示某種操作,后面再跟一些數據,比如: 

A 100 2 
B 23 
A 23 89 
B 34 
像這種輸入就需要小心,讀入字符時不要讀成回車符。 
為了防止意外,我一般是這樣處理這類輸入的: 
char model[2]; 
Scanf(“%d”,&n); 
for(…,…,…){ 
 scanf(“%s”,model); 
 if(model[0] == ‘A’){ 

else{ 


 sscanf(): 
sscanf()
經常用來分解字符串,功能非常強大,但很多功能都需要正則表達式的知識,所以就介紹一下最簡單的幾種用法,大家如果想了解更多的話,自己去網上找吧。 
1. 
char str[100],str1[100],str2[100]; 
gets(str); 
sscanf(str,”%s%s”,str1,str2); 
將讀入的一整行字符串按空格,制表符或回車符分割成兩個字符串。 

取指定長度的字符串。如在下例中,取最大長度為4字節的字符串。 
  sscanf("123456 ", "%4s", str);



——————————————————————————————————————————————————————————————————————————
  1. 列左對齊

printf("%-*s", 20, string); 表示輸出字符串左對齊輸出20,如果字符串不夠20個,以空格補齊。 -表示左對齊。


例:

struct help_struct
{
char *option_name;
char *option_value;
char *option_ext;
};


struct help_struct options[] =
{
{"set_node_id", "node_id", "set the node id"},
{"set_debug_level", "debug_level", "4:DEBUG 3:INFO 2:WARNING 1:ERR 0:NESS"},
{"flush_pool", "pool_name", ""},
{"get_lu_count", "", ""},
{"check_pools", "pool_name", ""},
{"invalid_pool", "pool_name", ""},
{"set_mirror", "mirror_state", "0:disable 1:enable"},
{(char*)NULL,  (char*)NULL, (char*)NULL}
};


static void show_usage(const char *execname)
{
struct help_struct *opt = NULL;
printf("Usage: %s [options] ...\n", execname);
printf("Options:\n");
for(opt = options; opt->option_name; opt++)
{
printf("  --");
printf("%-*s",25, opt->option_name);
printf("%-*s",20, opt->option_value);
printf("%-*s",50, opt->option_ext);
printf("\n");
}
}

show_usage輸出結果為:

Usage: ./vicm_test [options] ...
Options:
  --set_node_id              node_id             set the node id                                   
  --set_debug_level       debug_level      4:DEBUG 3:INFO 2:WARNING 1:ERR 0:NESS             
  --flush_pool                  pool_name                                                             
  --get_lu_count                                                                                   
  --check_pools              pool_name                                                             
  --invalid_pool               pool_name                                                             
  --set_mirror                  mirror_state       0:disable 1:enable  



2. 右對齊

printf("%*s", 20, string); 表示輸出字符串右對齊輸出20,如果字符串不夠20個,以空格補齊。 沒有-表示右對齊。


例:

static void show_usage(const char *execname)
{
struct help_struct *opt = NULL;
printf("Usage: %s [options] ...\n", execname);
printf("Options:\n");
for(opt = options; opt->option_name; opt++)
{
printf("  --");
printf("%*s",25, opt->option_name);
printf("%*s",20, opt->option_value);
printf("%*s",50, opt->option_ext);
printf("\n");
}
}

show_usage輸出結果為:

Usage: ./vicm_test [options] ...
Options:

  --                 set_node_id                 node_id                                                                    set the node id
  --          set_debug_level          debug_level             4:DEBUG 3:INFO 2:WARNING 1:ERR 0:NESS
  --                     flush_pool            pool_name                                                  
  --                 get_lu_count                                                                      
  --                  check_pools           pool_name                                                  
  --                   invalid_pool            pool_name                                                  
  --                      set_mirror           mirror_state                                                           0:disable 1:enable


——————————————————————————————————————————————————————————————————————————

C\C++格式化輸出

有時候我們為了使輸出的數整齊地排列,而這些數值又大小不等,有的是一位,有的是兩位,還有多位的,怎么辦呢?
在C語言中,我們可以能過在%號后加數字來限定輸出的數字的位數長度。先復習一下各種格式的表示方法如下:
%d 十進制有符號整數
%u 十進制無符號整數 
%f 浮點數 
%s 字符串 
%c 單個字符 
%p 指針的值 
%e 指數形式的浮點數 
%x, %X 無符號以十六進制表示的整數 
%0 無符號以八進制表示的整數 
%g 自動選擇合適的表示法

可以在"%"和字母之間插進數字表示最大字寬。
例如: 
%3d 表示輸出3位整型數, 不夠3位右對齊。 
%9.2f 表示輸出場寬為9的浮點數, 其中小數位為2, 整數位為6, 小數點占一位, 不夠9位右對齊。 
%8s 表示輸出8個字符的字符串, 不夠8個字符右對齊。 如果字符串的長度、或整型數位數超過說明的寬度, 將按其實際長度輸出。 但對浮點數, 若整數部分位數超過了說明的整數位寬度, 將按實際整數位輸出; 若小數部分位數超過了說明的小數位寬度, 則按說明的寬度以四舍五入輸出。 
另外, 若想在輸出值前加一些0, 就應在場寬項前加個0。 
例如: 
%04d 表示在輸出一個小于4位的數值時, 將在前面補0使其總寬度 為4位。 
如果用浮點數表示字符或整型量的輸出格式, 小數點后的數字代表最大寬度, 小數點前的數字代表最小寬度。 例如: 
%6.9s 表示顯示一個長度不小于6且不大于9的字符串。若大于9, 則 第9個字符以后的內容將被刪除。 

可以在"%"和字母之間加小寫字母l, 表示輸出的是長型數。 
例如: 
%ld 表示輸出long整數 
%lf 表示輸出double浮點數 

可以控制輸出左對齊或右對齊, 即在"%"和字母之間加入一個"-" 號可說明輸出為左對齊, 否則為右對齊。 
例如: 
%-7d 表示輸出7位整數左對齊 %-10s 表示輸出10個字符左對齊

在C++語言中,我們可以這樣做:
cout<<setw(10)<<i<<endl;
表示輸出補足十個字節寬,右對齊。

cout<<setw(-10)<<i<<endl;
表示輸出補足十個字節寬,左對齊。
另外要注意,在文件在開頭要加上一個頭文件
#include <iomanip>
以使setw()函數能正常工作。

示例:

#include <iostream>
#include <iomanip>

using namespace std;

const double d1 = 1.23456789;
const long      l1 = 65536;
int     base = 10;


int main( int argc, char* argv[] )
{
//右對齊
cout<<setw(10)<<d1<<endl;
cout<<setw(10)<<l1<<endl;
cout<<setw(10)<<base<<endl;
//左對齊
cout<<setw(-10)<<d1<<endl;
cout<<setw(-10)<<l1<<endl;
cout<<setw(-10)<<base<<endl;

return   0;
}


——————————————————————————————————————————————————————————————————————————

"格式描述串"是由一系列的"格式轉換說明符號"組成,格式轉換說明符號的描述形式如下:
% [+][-] 0 m[.n] [輸出精度] <形式字母>
(1)形式字母:制定輸出格式,如表
d:十進制整型數
i:十進制整型數
x:十六進制整型數
o:八進制整型數
u:無符號十進制整型數
c:單個字符;
s:字符串
e:指數形式的浮點數
f:小數形式的浮點數
g:e和f中比較短的一種
p:顯示變量所在的內存地址
n:它不是向printf()傳遞格式化信息,而是令printf()把自己已經輸出的字符總數放到相應變元指
的整形變量中
%:符號%本身;
(2):輸出精度如果形式字母是d,x,o.u,則可以指定如下兩類精度
l:long型輸出精度
h:short型輸出精度
默認時為int型精度
如:long x=123454578;printf("%d",x);
如果形式字母為e,f,g的時候,則指定l的 時候為double精度,不指定為float精度;
(3):m[.n]指定輸出長度,如果輸出的是實例,則m表示該項輸出占用字符位置的總長度,n表示小數部分的字

符長度,如float x=4.56;printf("%7.4f",x);
(4)0:指定不被使用的空位置填寫0,入股不指定使用0,則不使用的位置為空白.該項僅僅對樹枝輸出時才可

以指定,對字符串輸出不用指定.例如
int x=234;
printf("%05d",x);//00234
printf("%5d",x);//**234
(5)[+][-]:指定輸出位置,如果指定+或者缺省時為右對齊,如果為"-"的時候為左對齊;


——————————————————————————————————————————————————————————————————————————
posted on 2013-04-28 12:03 聶文龍 閱讀(2929) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产美女精品视频免费观看| 亚洲欧洲久久| 国内精品久久久久影院优| 欧美成人高清| 欧美高清视频在线| 欧美日韩精品久久| 国产精品美女久久久浪潮软件 | 久久精品91久久香蕉加勒比| 欧美在线视频二区| 老司机午夜精品视频| 欧美福利视频一区| 国产精品v欧美精品v日本精品动漫| 欧美视频二区36p| 国产欧美一区视频| 亚洲国产一区在线观看| 日韩一级在线| 久久不射中文字幕| 欧美福利电影网| 一本久久a久久免费精品不卡| 亚洲男女毛片无遮挡| 久久全国免费视频| 国产精品福利片| 亚洲高清三级视频| 午夜激情综合网| 欧美夫妇交换俱乐部在线观看| 正在播放欧美一区| 美女主播一区| 国产人久久人人人人爽| 亚洲精品欧美| 久久久精品动漫| 99ri日韩精品视频| 麻豆精品精品国产自在97香蕉| 国产精品久久久久久久电影| 亚洲国产精品成人综合| 午夜精品久久久久久久久久久久久| 欧美成人在线影院| 午夜欧美精品| 欧美日韩国产片| 亚洲国产精品成人va在线观看| 亚欧成人精品| 99国内精品| 欧美日韩成人在线观看| 在线观看欧美激情| 久久久免费精品| 午夜精品一区二区在线观看| 欧美日韩91| 亚洲精品一区二区三区四区高清| 久久久另类综合| 午夜一区不卡| 国产精品亚洲综合一区在线观看 | 亚洲视频一区二区在线观看 | 欧美日本中文| 91久久久久久国产精品| 久久性天堂网| 欧美在线看片| 国产一区二区久久久| 久久高清国产| 欧美一级理论片| 国产日韩免费| 久久精品中文字幕免费mv| 午夜精品久久久久久久99樱桃| 国产精品久久久久永久免费观看| 亚洲一区二区三区涩| 99re热这里只有精品视频| 欧美片在线播放| 一区二区久久| 亚洲一区精品电影| 国产一区二区黄色| 蜜臀av在线播放一区二区三区| 久久久久久久综合日本| 亚洲国产精品第一区二区| 欧美激情在线免费观看| 欧美韩国日本一区| 亚洲制服少妇| 欧美在线黄色| 亚洲片在线资源| 日韩视频二区| 国产欧美日韩综合| 欧美福利一区二区三区| 欧美美女操人视频| 午夜精品久久久久久99热软件| 欧美一区三区二区在线观看| 亚洲第一网站免费视频| 亚洲国产欧美精品| 国产精品女人毛片| 免费国产自线拍一欧美视频| 欧美激情1区2区3区| 午夜国产精品视频| 久久久久久久久久久一区| 亚洲最新在线| 亚洲欧美日韩在线| 亚洲日韩第九十九页| 亚洲一区高清| 亚洲人午夜精品免费| 亚洲一区日韩在线| 亚洲高清在线视频| 亚洲婷婷综合久久一本伊一区| 精品不卡一区| av不卡在线| …久久精品99久久香蕉国产 | 欧美aⅴ一区二区三区视频| 欧美激情偷拍| 久久久久久久精| 欧美日韩人人澡狠狠躁视频| 久久影视三级福利片| 欧美日韩一区二区在线| 鲁大师成人一区二区三区| 亚洲一区二区精品在线观看| 国产综合久久久久影院| 一本久道综合久久精品| 91久久极品少妇xxxxⅹ软件| 性欧美1819性猛交| 一区二区三区三区在线| 蜜臀va亚洲va欧美va天堂| 欧美一区二区在线看| 欧美日韩免费看| 亚洲国产精品久久久久婷婷老年| 国产欧美视频在线观看| 日韩一区二区高清| 1000部精品久久久久久久久| 欧美一级欧美一级在线播放| 亚洲一区二区免费| 欧美剧在线观看| 亚洲国产精品v| 在线精品国产成人综合| 久久福利资源站| 久久久久久久综合狠狠综合| 国产精品日韩欧美一区二区三区| 亚洲三级影院| 亚洲国产日韩欧美在线99| 久久av红桃一区二区小说| 欧美一区二粉嫩精品国产一线天| 欧美日韩精品一区视频| 亚洲大胆人体在线| 亚洲高清不卡av| 美脚丝袜一区二区三区在线观看| 久久一本综合频道| 尤物九九久久国产精品的分类| 欧美一区二区三区婷婷月色 | 在线成人性视频| 久久深夜福利免费观看| 蜜桃视频一区| 亚洲国产精品毛片| 欧美成人激情在线| 亚洲国产精选| 一本不卡影院| 国产精品男gay被猛男狂揉视频| 亚洲专区欧美专区| 欧美中文在线字幕| 狠狠色狠狠色综合日日tαg| 久久成人国产精品| 欧美成人精品一区二区| 亚洲免费播放| 国产精品日日摸夜夜摸av| 午夜视频在线观看一区二区| 久久夜色精品国产欧美乱| 亚洲第一中文字幕| 欧美日本国产一区| 亚洲欧美美女| 美日韩免费视频| 99精品国产在热久久| 国产精品视频成人| 久久一区激情| 中文亚洲字幕| 免费日韩av电影| 亚洲免费中文字幕| 在线观看日韩专区| 国产精品hd| 久久久国产视频91| 日韩一级片网址| 久久综合一区二区三区| 亚洲私人影院| 国外精品视频| 亚洲欧美国产毛片在线| 欧美成人精品高清在线播放| 亚洲主播在线| 亚洲国产欧美一区二区三区同亚洲 | 91久久黄色| 夜夜嗨av一区二区三区网页| 国产精品午夜在线观看| 欧美99久久| 欧美在线一二三| 99精品视频免费观看| 女女同性精品视频| 欧美一区亚洲| 日韩视频在线一区| 在线播放一区| 国产日韩欧美成人| 欧美日韩一区二区视频在线观看| 亚洲一区亚洲二区| 亚洲人成免费| 欧美va亚洲va国产综合| 欧美在线免费| 亚洲在线免费| 一二三区精品福利视频| 在线视频国内自拍亚洲视频| 国产日韩欧美一区二区三区在线观看| 欧美另类变人与禽xxxxx| 久久五月婷婷丁香社区| 久久gogo国模裸体人体|