天天看點

69 C++ - 标準輸出流

1. 字元輸出

cout.flush()

//重新整理緩沖區 Linux下有效

cout.put()

//向緩沖區寫字元

cout.write()

//從buffer中寫num個位元組到目前輸出流中。
//cout.flush 重新整理緩沖區,linux下有效
void test01(){	
	cout << "hello world";
	//重新整理緩沖區
	cout.flush(); 
}

//cout.put 輸出一個字元
void test02(){
	
	cout.put('a');
	//鍊式程式設計
	cout.put('h').put('e').put('l');
}

//cout.write 輸出字元串 buf,輸出多少個
void test03(){
	
	//char* str = "hello world!";
	//cout.write(str, strlen(str));
	char* str = "*************";
	for (int i = 1; i <= strlen(str); i ++){
		cout.write(str, i);
		cout << endl;
	}

	for (int i = strlen(str); i > 0; i --){
		cout.write(str, i);
		cout << endl;
	}

}
           

2. 格式化輸出

在輸出資料時,為簡便起見,往往不指定輸出的格式,由系統根據資料的類型采取預設的格式,但有時希望資料按指定的格式輸出,如要求以十六進制或八進制形式輸出一個整數,對輸出的小數隻保留兩位小數等。有兩種方法可以達到此目的。

  1. 使用控制符的方法;
  2. 使用流對象的有關成員函數。

2.1 使用流對象的有關成員函數

通過調用流對象cout中用于控制輸出格式的成員函數來控制輸出格式。用于控制輸出格式的常用的成員函數如下:

69 C++ - 标準輸出流

流成員函數setf和控制符setiosflags括号中的參數表示格式狀态,它是通過格式标志來指定的。格式标志在類ios中被定義為枚舉值。是以在引用這些格式标志時要在前面加上類名ios和域運算符“::”。格式标志見表13.5。

69 C++ - 标準輸出流

2.2 控制符格式化輸出

C++提供了在輸入輸出流中使用的控制符(有的書中稱為操縱符)。

69 C++ - 标準輸出流
//通過流成員函數
void test01(){
	
	int number = 99;
	cout.width(20);
	cout.fill('*');
	cout.setf(ios::left);
	cout.unsetf(ios::dec); //解除安裝十進制
	cout.setf(ios::hex);
	cout.setf(ios::showbase);
	cout.unsetf(ios::hex);
	cout.setf(ios::oct);
	cout << number << endl;

}

//使用控制符
void test02(){

	int number = 99;
	cout << setw(20)
		<< setfill('~')
		<< setiosflags(ios::showbase)
		<< setiosflags(ios::left)
		<< hex
		<< number
		<< endl;

}
           

2.3 對程式的幾點說明

  1. 成員函數width(n)和控制符setw(n)隻對其後的第一個輸出項有效。如:
cout. width(6);
cout <<20 <<3.14<<endl;

輸出結果為 203.14
           

在輸出第一個輸出項20時,域寬為6,是以在20前面有4個空格,在輸出3.14時,width (6)已不起作用,此時按系統預設的域寬輸出(按資料實際長度輸出)。如果要求在輸出資料時都按指定的同一域寬n輸出,不能隻調用一次width(n), 而必須在輸出每一項前都調用一次width(n>,上面的程式中就是這樣做的。

cout.setf(ios::internal I ios::showpos);  //包含兩個狀态标志,用"|"組合