1. 程式人生 > >C++輸入/輸出操作符簡介

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++輸入/輸出混用的要求。