Cでこのような数値を整列するにはどうすればよいですか?

なぜ 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);