簡體   English   中英

如何將此C行轉換為C ++? 使用cout命令

[英]How do I convert this C line to C++? using cout command

printf("%-8s - %s\n", c->name ? c->name : "", c->help);

我想你要找的是

cout << left << setw(8) << (c->name ? c->name : "") << " - " << c->help << endl;

leftsetw(8)操縱器一起具有與printf%-8s格式化說明符相同的效果。 但是,由於使用了setw ,您需要#include <iomanip>才能使其正常工作。

編輯 :正如Matthieu M.所指出的,上面將永久改變cout以便任何填充操作打印出左對齊。 請注意,這並不像看起來那么糟糕; 它僅適用於您明確使用setw設置一些填充。 您有幾個選項可以解決這個問題。 首先,你可以強制執行在使用setw之前的規則,你總是使用leftright操縱器分別左右對齊文本。 或者,您可以使用flagssetf函數捕獲cout標志的當前狀態:

ios_base::fmtflags currFlags = cout.flags();
cout << left << setw(8) << (c->name ? c->name : "") << " - " << c->help << endl;
cout.setf(currFlags, ios_base::adjustfield);

這分三步進行。 第一行從cout讀取當前格式化標志,包括它當前如何對齊填充輸出。 第二行實際打印出值。 最后,最后一行將cout的輸出標志重置為舊值。

就個人而言,我認為第一種選擇更具吸引力,但知道第二種選擇存在是絕對好的,因為它在技術上更正確。

如果你有Boost庫:

std::cout << boost::format("%-8s - %s\n") % (c->name ? c->name : "") % c->help;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM