一、格式化輸出的作用
在C++中,格式化輸出是指以一定的格式向控制台輸出信息。相比於普通輸出,格式化輸出能夠使輸出信息更加直觀和易讀。比如可以將輸出的數字、字符串、日期等按照一定格式進行排版,以便用戶更好地理解信息。
大多數情況下,格式化輸出是用於向用戶展示計算的結果。例如,在計算器應用中,結果需要用規範的形式呈現給用戶。在遊戲開發中,我們需要向玩家提供遊戲狀態的輸出,以便他們更好地理解和玩遊戲。在數據分析領域,我們需要將處理後的數據以可讀性更高的方式輸出,以便數據分析師進一步分析其中的規律。
C++語言提供了強大的輸出庫,可以以多種方式對輸出進行格式化。主要包括流輸出、printf()和format()等方式。本篇文章主要介紹C++流輸出的方式。
二、C++流輸出的基本語法
C++中流輸出的語法比較簡單。流輸出運算符“<<”用於將需要輸出的元素拼接到一起。例如:
#include <iostream>
using namespace std;
int main() {
int a = 10;
cout << "hello" << "world" << a << endl;
return 0;
}
以上代碼會將“hello”,“world”和變量a的值拼接成一個字符串然後輸出,輸出結果為:“helloworld10”。通過“<<”運算符將多個元素拼接為一個字符串,不同類型的元素可以並列使用,編譯器會自動將它們轉換為字符串。
流輸出默認以空格符為分隔符,默認以換行符結尾。通過符號“endl”可以手動輸入回車符。例如:
#include <iostream>
using namespace std;
int main() {
cout << "hello" << endl;
cout << "world" << endl;
return 0;
}
以上代碼會將“hello”與“world”分別輸出並在每個字符串結尾輸入換行符。
三、C++流輸出的格式化
在實際使用中,通常需要進行更加複雜的格式化操作,包括輸出寬度、刷空格、輸出小數、設置精度等。C++流輸出提供了豐富的選項,可以實現各種複雜的輸出需求。
3.1 輸出寬度和填充字符
在輸出一個字符串或數字時,我們往往需要控制輸出場寬和填充字符。C++流輸出提供了 setw() 函數來設置輸出的寬度,fill() 函數來設置填充字符。例如,如果我們想要輸出一個數字,並讓它至少佔 6 個字符寬度,可以採用如下方式:
#include<iostream>
#include<iomanip> // 必須 include <iomanip> 頭文件才能使用 setw() 函數
using namespace std;
int main() {
int num = 10;
cout << "|" << setw(6) << num << "|" << endl;
return 0;
}
輸出結果:
| 10|
其中setw(6)指定了num所在輸出項的寬度為6個字符,左邊不足的補充空格。
類似地,如果我們希望輸出將左對齊的字符串,可以如下設置:
#include<iostream>
#include<iomanip> // 必須 include <iomanip> 頭文件才能使用 setw() 函數
using namespace std;
int main() {
string s = "hello";
cout << "|" << setw(10) << left << s << "|" << endl;
return 0;
}
輸出結果:
|hello |
其中left指定將字符串左對齊輸出,剩餘字符用空格填充。
3.2 輸出小數
在C++中,輸出小數需要使用到 float、double 和 long double 等類型。小數的輸出可以通過控制符“fixed”和“scientific”進行控制。
例如,如果我們想要以科學計數法形式輸出一個十進制小數,可以使用如下代碼:
#include<iostream>
#include<iomanip> // 必須 include <iomanip> 頭文件才能使用 setprecision() 函數
using namespace std;
int main() {
double num = 1000.0 / 3.0;
cout << scientific << setprecision(10) << num << endl;
return 0;
}
輸出結果:
3.3333333333e+002
在上面的代碼中,setprecision() 函數設置輸出精度到小數點後面的位數,scientific用於控制輸出結果是科學計數法。
3.3 輸出控制符
C++流輸出支持不同的控制符,用於控制輸出格式,如oct、dec、hex、left、right、flush等等。
下面是一些常用的控制符:
- boolalpha:true輸出為“true”,false輸出為“false”
- uppercase:輸出字母時強制大寫
- showbase:在輸出時顯示基數
- oct:以八進制輸出
- dec:以十進制輸出
- hex:以十六進制輸出
- left:左對齊輸出
- right:右對齊輸出
- setw():設置輸出場寬
- setprecision():設置輸出精度
- flush:刷新緩存區
3.4 流輸出和文件輸出
在C++中,我們可以將輸出重定向到文件中,這意味着我們可以將格式化後的輸出保存到文件中,而不是輸出到控制台。C++提供了兩種方式將輸出重定向到文件中,分別為流輸出和文件輸出。
對於流輸出,我們可以將輸出重定向到字符串緩存中,然後將其保存至文件中。流輸出到字符串緩存的核心是stringstream庫。
例如,我們可以通過如下代碼將輸出重定向到字符串中:
#include<iostream>
#include<fstream>
#include<sstream>
using namespace std;
int main(){
//將 cout 重定向到 buffer
stringstream buffer;
cout.rdbuf(buffer.rdbuf());
//執行輸出操作
cout<<"hello, world!"<<endl;
//從 buffer 中讀取輸出
string output = buffer.str();
//將輸出寫入文件中
ofstream outfile("output.txt");
outfile<<output<<endl;
outfile.close();
return 0;
}
在上面的代碼中,我們使用 cout.rdbuf() 將輸出流重定向到字符串緩存中,執行後打印出“hello, world!”。接着,在代碼中使用了 buffer.str() 方法從字符串緩存中讀出輸出,並將其保存到文件中。
類似地,C++中還可以通過文件輸出流重定向輸出到文件中。例如:
#include<iostream>
#include<fstream>
using namespace std;
int main(){
//將 cout 輸出重定向到文件
ofstream outfile("output.txt");
streambuf* old_cout_buf = cout.rdbuf(); //保存 cout 原有的 buf 指針
cout.rdbuf(outfile.rdbuf()); //將 cout 的 buf 指向 outfile 的 buf 指針
//執行輸出操作
cout<<"hello, file!"<<endl;
//恢復 cout 輸出到舊 buf
cout.rdbuf(old_cout_buf);
return 0;
}
以上程序會向當前目錄下的 output.txt 文件寫入一行文本“hello, file!”。
四、總結
本文主要介紹了C++流輸出的基本語法、格式化等操作。有了這些基本操作的掌握,我們可以更好地控制輸出信息的形式和布局,為用戶提供更好的使用體驗。
總之,格式化輸出不僅可以使程序具有更好的可讀性和易用性,還可以為用戶提供更直觀和良好的用戶體驗。C++流輸出是實現格式化輸出的重要手段之一,掌握其基本語法和格式化操作,能夠使我們的程序能夠更好地滿足用戶需求。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/189257.html