C++輸入/輸出操作符簡介
操縱符
操縱符 | 功能 |
---|---|
dec | 以十進位制輸入或輸出 |
endl | 換行重新整理輸出流 |
fixed | 用定點符號表示浮點數d.ddd |
flush | 重新整理輸出流 |
hex | 以十六進位制輸入或輸出 |
left | 左對齊 |
oct | 以八進位制輸入或輸出 |
right | 右對齊 |
scientific | 用科學記數法表示浮點數d.dddedd |
setfill© | 把c用做填充字元 |
setprecision(n) | 設定浮點精度為n位 |
setw(n) | 設定欄位位數為n |
showpoint | 總是列印小數點和尾隨零 |
noshowpoint | 不列印尾隨零,若可能,則去掉小數點 |
showpos | 在非負數前顯示+ |
noshowpos | 在非負數前不顯示+ |
skipws | 忽略輸入前的空白 |
noskipws | 不忽略輸入前的空白 |
ws | 刪除空白 |
操縱符dec,hex和oct
#include<iostream>
using namespace std;
int main()
{
int i=91;
cout<<dec<<i<<endl; //十進位制 91
cout<< oct<<i<<endl; //八進位制 133
cout<<hex<<i<<endl; //十六進位制 5b
cout<<i<<endl; //仍然十六進位制 5b
return 0;
}
在最後一行中不加操縱符,最後的輸出仍是十六進位制形式。原因是一旦cout的狀態被操縱符(除了setw)改變,這種狀態將保持不變,直到發生另一次改變。
操縱符setw
setw可以設定域寬。如果域寬少於所需位數,則仍將輸出該項;如果大於所需位數,則該項將在它的最左邊用空格填滿指定的位數。域寬的預設值為0,所以每個資料項都是按其最小的位數輸出的。setw在某一資料輸出後,域寬又重新設為0.所以如果幾個資料項都是要按某一特定的域寬進行寫入,必須在每個項寫入前進行設定。
for(int i=1;i<=1000;i*=10)
{
cout<<setw(6)<<i<<endl;
}
結果:
1
10
100
1000
操縱符setfill
用來定義特定的填充字元,當域寬大於輸出項寬度時用該字元填充多餘的位。填充符一旦設定,它的作用將一直持續到重新設定為止。
cout<<setfill('*');
for(int i=1;i<=1000;i*=10)
{
cout<<setw(6)<<i<<endl;
}
結果:
*****1
****10
***100
**1000
操縱符setprecision與fixed
setprecision用來定義浮點數的精度,預設值為6
fixed用來定義浮點數的小數位數,預設值為6
兩個一起用,可以設定浮點數的小數位數
double a=1.05,b=10.15,c=200.87787;
cout<<setprecision(5); //設定數字精度為5
cout<<a<<endl;//1.05
cout<<b<<endl;//10.15
cout<<c<<endl;//200.88
double a=1.05,b=10.15,c=200.87787;
cout<<fixed<<setprecision(4); //設定小數位數為4
cout<<a<<endl; //1.0500
cout<<b<<endl; //10.1500
cout<<c<<endl; //200.8779
操縱符left和right
用來設定域對齊方式是左對齊或右對齊
操縱符showpoint
操縱符showpoint強制顯示小數點以及全部尾部0.預設值為6,預設情況下,浮點數以定點數列印還是以科學(指數)計數法列印,要以哪種方式列印佔用更小的域寬來決定。使用操縱符showpoint可以強制浮點數以科學計數法列印,使用操縱符fixed強制浮點數以定點數列印。
float a=5,b=43.3,c=1024.31;
cout<<showpoint<<fixed<<setprecision(2);
cout<<a<<endl; //5.00
cout<<b<<endl; //43.30
cout<<c<<endl; //1024.31
如果不使用操縱符showpoint和fixed,則程式碼段
float a=5,b=43.3,c=1024.31;
cout<<setprecision(2);
cout<<a<<endl; //5
cout<<b<<endl; //43
cout<<c<<endl; //1e03
操縱符noskipws
撤銷在輸入前跳過空格操作,及讀入空格。輸入操作符>>的預設動作是在讀入下一個輸入項前忽略後面的空格,與c庫函式scanf很相似,但有點差別:即使變數是char型別,操作符>>仍會在讀入字元前忽略空格。而操作符noskipws可以取消該操作.
char c[10];
cin>>noskipws;
for(int i=0;i<5;i++)
{
cin>>c[i]; //輸入: a b c d e
}
for(int i=0;i<5;i++)
{
cout<<c[i]; //輸出:abcde
}
cout<<endl;
混合使用c和c++的輸入/輸出
ios::sync_with_stdio()
在程式中同時使用c的輸入/輸出庫函式(如printf)和c++類庫(如cout)會出現問題,因為這兩個庫中的讀寫操作不會自動同步。如果確實需要同時使用這兩個庫,應在呼叫任何輸入輸出函式前首先呼叫以上函式。該函式能滿足c和c++輸入/輸出混用的要求。