最近在一些程式,需要用到命令提示字元模式來印出結果,有時候我們會像表格一樣要每一筆資料可能有兩到三個欄位,但這時候,印出時都會因為印出的文字或數字太長而使排版跑掉
但是在C++中其實有提供一個很方便的功能可以解決你這個問題
前言
最近在一些程式,需要用到命令提示字元模式來印出結果,有時候我們會像表格一樣要每一筆資料可能有兩到三個欄位,但這時候,印出時都會因為印出的文字或數字太長而使排版跑掉,如下:
我希望我的人物的名字與ID可以對其標題的欄位,但是預設使用cout時,是會由左向右印出的,所以長度是與欄位的格式會跑掉
但是在C++中其實有提供一個很方便的功能可以解決你這個問題
透過setw方法來完成欄位的格式對齊
setw定義在iomanip標頭檔中,是用來設定輸出資料在螢幕時,他的字元欄位的寬度(取自CPlusPlus),所以要先
#include <iomanip>
其中輸入的參數便是你要求的最大寬度字元
如下面的例子,Name的字元長度是4,此時我在Name輸出前打上setw(5),則就表示我要對Name設定5個字元長度,然後後面輸出的資料便會靠右對齊了,但是如果你設定的字元寬度小於實際的輸出長度,setw便不會有任何反應
cout <<"Name" << "|" << 123456 <<endl;
cout << "\nUsing setw... \n" <<endl;
cout << setw(5) << "Name" << "|" <<setw(4) << 123456 <<endl;
這邊稍微記得一件事,每一次對setw做呼叫來使用,都只會對應到後面要輸出的一筆資料而已
如上面的第一個setw(5)只對字串Name作用
透過上述的Setw功能,來實際實踐一下後,原先的範例便會成為如下的結果:
程式碼部分
map<string,int> students;
students["Mark"] = 123456;
students["Eason"] = 123455;
students["Jackson"] = 101454;
students["Jessica"] = 100450000;
students["zoe"] = 10025;
map<string, int>::iterator it;
cout << " Name" << "|" << " ID" <<endl;
cout << "----------" << "-" << "----------" <<endl;
for(it = students.begin() ; it != students.end() ; it++)
cout << it->first << "|" << it->second <<endl;
cout << "\nUsing setw...\n" <<endl;
cout << " Name" << "|" << " ID" <<endl;
cout << "----------" << "-" << "----------" <<endl;
or(it = students.begin() ; it != students.end() ; it++)
cout << setw(10) << it->first << "|" << setw(10) << it->second <<endl;
結論
當然除了使用setw以外,也是可以使用C的printf調整印出格式也是另一項不錯的選擇唷^^
參考資料
文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)
另外要轉載請附上出處 感謝