106

1 つは次のようなメッセージを生成し、もう 1 つStarting initialization...は戻りコードと出力をチェック"Ok""Warning"ます"Error"。ただし、生成される出力の長さは異なります。

Starting initialization...Ok.
Checking init scripts...Ok.

次のようなものを取得するにはどうすればよいですか?

Starting initialization...       Ok.
Checking init scripts...         Ok.
4

6 に答える 6

180

文字列フィールドに幅を指定できます。

printf("%-20s", "initialization...");

そして、そのフィールドで印刷されるものはすべて、指定した幅まで空白で埋められます。

-、そのフィールドのテキストを左揃えにします。

于 2009-11-27T15:42:31.420 に答える
28

printf幅指定子による書式設定を許可します。例えば、

printf( "%-30s %s\n", "Starting initialization...", "Ok." );

デフォルトでは右寄せが使用されるため、左寄せを示すには負の幅指定子を使用します。

于 2009-11-27T15:43:42.807 に答える
15

%n特定の状況で役立つ修飾子もあります。それまで文字列があった列を返します。例: 表のように、最初の行の幅内に複数の行を書きたいとします。

int width1, width2;
int values[6][2];
printf("|%s%n|%s%n|\n", header1, &width1, header2, &width2);

for(i=0; i<6; i++)
   printf("|%*d|%*d|\n", width1, values[i][0], width2, values[i][1]);

2 つの文字列の長さに関係なく、同じ幅の 2 つの列header1を出力しheader2ます。すべての実装に があるかどうかはわかりませんが%nSolarisと Linux にはあります。

于 2009-11-28T19:31:13.133 に答える
0

メッセージを並べるために手動でスペースを追加してカウントするという、かなりローテクなソリューションもあります。メッセージ文字列の末尾にいくつかのスペースを含めることを妨げるものは何もありません。

于 2009-11-27T15:44:15.457 に答える
-2

タブ( \t文字修飾子) の使用から始めます。固定された場所 (列、ターミナル用語) に進みます。

ただし、列幅を超える違いがある場合は役に立ちません (私の記憶が正しければ 4 文字)。

これを修正するには、一定数のタブを使用して「OK/NOK」を記述します (5? 6? 試してみてください)。次に、改行なしで ( \r ) を返し、メッセージを書きます。

于 2009-11-27T15:43:59.033 に答える