なぜ printf("%8d\n", intval);
なのか あなたのために働いていませんか?
「機能しない」例のフォーマット文字列を示していないため、他に何を伝えればよいかわかりません。
#include <stdio.h>
int
main(void)
{
int i;
for (i = 1; i <= 10000; i*=10) {
printf("[%8d]\n", i);
}
return (0);
}
$ ./printftest
[ 1]
[ 10]
[ 100]
[ 1000]
[ 10000]
編集: 質問の明確化への回答:
#include <math.h>
int maxval = 1000;
int width = round(1+log(maxval)/log(10));
...
printf("%*d\n", width, intval);
幅の計算では、対数底 10 + 1 が計算され、桁数が得られます。ファンシーな *
フォーマット文字列の値に変数を使用できます。
与えられた実行の最大値を知る必要がありますが、どの言語でも紙と鉛筆でもそれを回避する方法はありません.
私の便利な Harbison &Steele でこれを調べてください....
フィールドの最大幅を決定します。
int max_width, value_to_print;
max_width = 8;
value_to_print = 1000;
printf("%*d\n", max_width, value_to_print);
max_width は int
型でなければならないことに注意してください アスタリスクを使用するには、必要なスペースの量に基づいて計算する必要があります。あなたの場合、最大数の最大幅を計算し、4 を追加する必要があります。
printf("%8d\n",1);
printf("%8d\n",10);
printf("%8d\n",100);
printf("%8d\n",1000);