ページ 11

int型について

Posted: 2007年3月21日(水) 22:45
by 憲吾
int num;
scanf("%d", &num);
printf("%d", num);

このプログラムを動かしたとき、scanfでたとえば00020と
入力すると、結果は20となります。
これを結果も00020とする方法はないのでしょうか?
char型に数字を入れる方法しかないのでしょうか?

Re:int型について

Posted: 2007年3月21日(水) 22:55
by 管理人
こんにちは。
printfにはさまざまなオプションがありますよ。

たとえば、それでしたら
http://www9.plala.or.jp/sgwr-t/c/sec05.html
の「フィールド幅」をご覧ください。

Re:int型について

Posted: 2007年3月21日(水) 23:36
by 憲吾
ありがとうございます。
すごいためになりました。

Re:int型について

Posted: 2007年3月21日(水) 23:40
by Justy
[color=#a89898" face="aria[/url]>これを結果も00020とする方法はないのでしょうか[/color]
 どうしたいのかにも依ります。
 printfの出力も、プログラム内部での扱いも 00020であって欲しいなら、
scanfの段階から(憲吾さんの考えておられるとおり)文字列で処理するしかありません。


 しかし、printfの出力時だけ 00020であって欲しいなら2通りあります。

 1つ目は scanfの段階では文字列として受け取った後、数値に変換し、
printfには文字列の方を出力します。
 これが一番スタンダードでしょうか。

 もう1つはちょっと特殊ですが、scanfと printfの機能をフル活用して
[color=#d0d0ff" face="monospace]    int value, length;
    if(scanf("%d%n", &value, &length) > 0)
        printf("value = %0*d\n", length, value);[/color]
 としても同様の結果が得られます。

Re:int型について

Posted: 2007年3月22日(木) 05:26
by 管理人
なるほど、色々な書き方が出来るものですね。
しかしprintfって最初に習う関数でありながらものすごい種類のオプションがありますね。
http://www.linux.or.jp/JM/html/LDP_man- ... ntf.3.html
改めて読んでみると知らなかったこともあったりしました^^;

「 `*' と `*m$' はそれぞれ、次の引き数と m 番目の引き数をフィールド幅として使うことを指定する」

ということは

printf("value = %0*d\n", length, value);

において7桁入力したときに表示する

printf("value = %07d\n", value);

と同じ意味になると言うことですね。
逆に勉強になりました^^;