c&c++輸入輸出控制格式ios
許多狀況下,都須要控制輸出結果的表現形式。如輸出寬度、輸出精度、輸出格式等。C++的iomanip.h中定義了許多控制符,這些控制符能夠直接插入到流中,控制數據的輸出格式。控制符有兩種:控制常量和控制函數,控制常量定義在iostream.h中,控制函數定義在iomanip.h中。c++
經常使用控制符在iostream.h中,函數控制符在iomainip.h中。函數
控制符 描述spa
dec 10進制設計
hex 16進制3d
oct 8進制code
setfill(c) 設填充字符爲cblog
setprecision(n) 設置顯示小數精度爲n位ip
setw(n) 設域寬爲n個子符內存
setiosflags(ios::fixed) 小數方式表示
setiosflags(ios::scientific) 指數表示
setiosflags(ios::left) 左對齊
setiosflags(ios::right) 右對齊
setiosflags(ios::skipws) 忽略前導空白(用於輸入)
setiosflags(ios::uppercase) 16進制數大寫輸出
setiosflags(ios::lowercase) 16進制數小寫輸出
注意:除了setw(n)控制符以外,其餘控制符對後面的全部輸出起控制做用,直到改變輸出格式爲止。
例一、輸出8進制和16進制數
常量dec、hex和oct用來控制必須按10進制、16進制或8進制形式輸出。
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int number=15; 6 cout<<dec<<number<<"\n"<<hex<< number<<"\n"<<oct<<number<<"\n"; 7 return 0; 8 }
結果爲:
15
f
17
注意:因爲這三個標識符已經被定義爲系統常量,注意不能在定義爲其餘變量使用。
上面這段代碼沒有加#include<iomanip>也能正確運行,可是假如想下面這一段代碼使用了setw就要加這個類引用了。
例二、設置值的輸出寬度
函數setw(n)用來控制輸出寬度,若是數據實際寬度大於設置寬度,將按實際寬讀輸出;若是設置寬度大於實際輸出寬度,數據輸出時將在前面補相應數量的空格。另外,該控制符只對一次輸出起做用。
1 #include <iostream> 2 #include <iomanip> 3 using namespace std; 4 int main( ) 5 { 6 int number=1234; 7 cout<<setw(5)<<number<<setw(5)<<564<<endl; 8 return 0; 9 }
運行結果:
_1234_ _564
例三、設置填充字符
setfill(c)函數用來設置填充的字符,默認狀況下爲空格。
1 #include <iostream> 2 #include <iomanip> 3 using namespace std; 4 int main() 5 { 6 int number=1234; 7 cout <<setfill('*')<<setw(5)<<number<<endl; 8 return 0; 9 }
輸出結果:
*1234
例四、設置對齊格式
函數setiosflags(ios::left)和setiosflags(ios::right)用來控制輸出左右對齊格式。當數據實際寬度小於輸出寬度時該控制才起做用。默認狀況下數據輸出是右對齊。
1 #include<iostream> 2 #include<iomanip> 3 using namespace std; 4 int main() 5 { 6 int number=1234; 7 cout<<setiosflags(ios::left)<<setfill('*')<<setw(6)<<number<<endl; 8 cout<<setiosflags(ios::right)<<setfill('*')<<setw(6)<<number<<endl; 9 return 0; 10 }
輸出結果:
1234**
**1234
例五、控制浮點數顯示
函數setprecision(n)可用來控制輸出流顯示浮點數的數字個數(整數部分加小數部分)。
c++默認的流輸出數值的有效位是6。當小數截短顯示時,進行四捨五入處理。
函數setiosflags(ios::fixed)用來控制符點數是按純小數方式顯示。系統默認爲純小數方式輸出。
函數setiosflags(ios::scientific)用來控制符點數是按科學記數法方式顯示。
函數setiosflags(ios::showpoint) 用來強制顯示小數點和符號。
1 #include<iostream> 2 #include<iomanip> 3 using namespace std; 4 int main() 5 { 6 const float x=20.0/7,y=18.0/6; 7 8 cout<<"x:\n"; 9 cout<<x<<endl; 10 cout<<setiosflags(ios::scientific)<<x<<endl; 11 cout<<setiosflags(ios::fixed)<<x<<endl; 12 13 cout<<"\ny:\n"; 14 cout<<y<<endl; 15 cout<<setiosflags(ios::showpoint)<<y<<endl; 16 return 0; 17 }
輸出結果爲:
2.85714 (默認6位,整數部分加小數部分)
2.857143e+000 (默認6位,指小數部分)
3 (默認0不輸出)
3.00000 (強制輸出0)
標準輸入輸出函數printf與scanf
在程序設計中輸入輸出是不可缺乏的內容,所以在C語言中提供了printf與scanf標準函數來知足輸入輸出要求。須要說明的是,在C++中提供了更方便的輸入輸出控制,這就是I/O流。但爲了知足一些對printf與scanf使用習慣的要求,C++中仍保留了這兩個函數。
<1>、printf函數
格式:
printf (格式控制字符串,輸出項1,輸出項2,…)
說明:
(1)格式控制字符串決定了數據輸出的結果。它由「格式說明字符」和「普通字符」組成。普通字符按原樣輸出,格式說明字符將對應輸出數據轉換成指定的格式輸出。格式控制字符串的形式爲:
%[域寬]格式字符
域寬部分是可選的,每一個格式說明對應於一個輸出參數,該參數被轉換成由格式說明規定的數據格式後輸出。
例如:
1 #include <iostream> 2 #include <iomanip> 3 using namespace std; 4 int main() 5 { 6 int a=10; 7 float b=-5.2; 8 printf("a=%d,b=%8.3f\n",a,b); 9 return 0; 10 }
輸出結果以下:
a=10,b= -5.200
(2)格式說明字符及其規定的輸出格式
printf的格式說明字符見下表
格式說明符 參數類型 輸出格式
d,I int 十進制整數
o int 八進制數(無前導0)
x,X int 十六進制數(無前綴0x或0X)
u int 無符號十進制數
c int 單個字符
s char * 字符串(必須以’\0’結束或給定長度)
f double 小數形式的的浮點數(小數位數由精度決定,缺省爲6位)
e,E double 標準指數形式的浮點數(小數位數由精度決定,缺省爲6位)
% 不轉換 輸出一個%
域寬說明字符 意義
- 在指定的區域內以左對齊方式輸出(無’-’號時爲右對齊)
+ 輸出正值時前面冠以符號+
空格 輸出的第一個字符不是符號時,要輸出一個空格作前綴
0(零) 在域寬範圍內用前導0填補空位
# 對於o格式輸出前導0,對於x或X輸出0x或0X前綴。
m(正整數) 指出輸出數據的最小寬度。
.(小數點) 分隔域寬與精度,小數點前面能夠沒有與寬說明
n(正整數) 數據輸出的精度即小數部分的位數,
h 指出輸出數據是短整型
l 指出輸出數據是長整型
L 指出輸出數據是高精度浮點型(long double)
例1
1 #include<stdio.h> 2 int main() 3 { 4 int a=10; 5 float b=-5.2; 6 printf("a=%#o,b=%08.3f",a,b); 7 return 0; 8 }
輸出結果爲:
a=012,b=-008.200
例2
1 #include<stdio.h> 2 int main() 3 { 4 int a=28,b=38; 5 long c=289868; 6 printf("%5d,%5d\n%ld\n",a,b,c); 7 printf("%3ld\n%7ld\n%d\n",c,c,c); 8 return 0; 9 }
結果:
28, 38
289868
289868
289868
289868 //16位機輸出27724
例3
1 #include<stdio.h> 2 int main() 3 { 4 int a=-3; 5 printf("%d,%o,%x,%X,%6x\n",a,a,a,a,a); 6 return 0; 7 }
在16位機上輸出結果爲:
-3,177775,fffd,FFFD,fffd
在32位機上輸出結果爲:
-3,37777777775,fffffffd,FFFFFFFD,fffffffd
例4
1 #include<stdio.h> 2 int main() 3 { 4 char ch='a'; 5 int a=65; 6 printf("%c,%d,%3c\n",ch,ch,ch); 7 printf("%c,%d,%3d\n",a,a,a); 8 return 0; 9 }
輸出結果爲:
a,97, a
A,65, 65
例5
1 #include<stdio.h> 2 int main() 3 { 4 printf("%3s,%-5.3s,%5.2s\n","hello","hello","hello"); 5 return 0; 6 }
輸出結果爲:
hello,hel , he
說明:第一個"hello"按%3s輸出,因爲"hello"長度超過3,所以按實際長度輸出。第二個"hello"輸出寬度爲5,且從前面截取3個字符左對齊輸出,第三個"hello"的輸出寬度仍爲5,從"hello"中截取2個字符右對齊輸出。
<2>scanf函數
通常形式:
scanf(格式控制字符串,地址1,地址2,…);
說明:格式控制字符串同前面的printf函數。地址是指變量的地址,格式是變量的前面加&符號。
例如:
1 #include<stdio.h> 2 int main() 3 { 4 int i; 5 printf("please input i:\n"); 6 scanf("%d",&i); 7 printf("i=%d\n",i); 8 return 0; 9 }
變量的定義與初始化
看下面例子:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int num; 6 char ch='a'; 7 for (num=ch;num<='z';num++) 8 cout<<num<<","; 9 return 0; 10 }
程序輸出什麼結果?
答:將輸出97,98,...,122
在c++中,任何一個變量在被引用以前必須被定義。
c++中變量能夠在程序中隨時定義,沒必要集中在程序以前。
定義格式:
〈類型〉〈變量名錶〉;
當有多個變量時,其間用逗號隔開。
例如:
int i,j,k; float x,y,z; char c1,c2,c3;
注意:在同一個內存塊中不容許定義同名變量,即不容許重複定義一個變量。
變量在定義時可直接給變量一個初始值,稱爲變量初始化。變量初始化也可放在須要的時候進行。變量被初始化後其值將保存到被改變爲止。變量定義之後,若是沒有被初始化,並不意味着這個變量中沒值,該變量中要麼是默認值,要麼是無效值。在後面將要講到,對外部和靜態變量定義後其默認值對int型的爲0,對浮點型的爲0.0;對char型爲空。而其餘內部變量未初始化時其值是無效的,這是由於該變量所在地址中的內容是先前保留下來的無心義的值。在定義變量時可一次初始化多個變量。
例如:
float x,y=3.14,z=0.0;
char ch1='a', ch2='\n';
這裏,y,z,ch1,ch2在定義的同時就進行了初始化。
而x只是作了變量說明並無賦初值。