OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

int型をchar型に(右詰で)代入したい

  • すぐに回答を!
  • 質問No.156583
  • 閲覧数602
  • ありがとう数6
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 59% (34/57)

皆様いつもお世話になってマス(^^;
今回はint型の整数をchar型に(右詰で)入れる方法について

int counter = 100;
char input_kaisuu[10];

counter++;
↑今カウンターは101です。
これを「input_kaisuu」に右詰で設定したいのです。
"0000000101"←結果としてこんなかんじに。


-------------------------------------------------
ちなみにこんなことをやってみました。
sprintf(input_kaisuu, "%d", counter);

このやり方だと左詰で"1010000000"というようになってしまい、
全然違う数になってしまいました。(^^;

他にいい方法があれば教えてください!
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル9

ベストアンサー率 36% (37/102)

%d を %09d にすると、お望みのものが出せます。
10進数で、9桁で表示する。表示する数字が9桁以下のときは先頭に0を表示する。
といった意味です。

10桁入れたいときは、char input_kaisuu[11] としてくださいね。
#文字列の終わりを表す文字も入れなきゃいけないので
補足コメント
techtak

お礼率 59% (34/57)

なるほど!
では、「10進数で、10桁で表示する。表示する数字が10桁以下のときは先頭に0を表示する。」
としたい時は、%010d とすれば良いのですか?
投稿日時 - 2001-10-24 12:12:04
お礼コメント
techtak

お礼率 59% (34/57)

回答ありがとうございました。
今まで出力用書式フラグの事を知らずにいました。

結果
char input_kaisuu[11]として、
%010dとすることで、解決できました。
投稿日時 - 2001-10-24 13:37:40
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.2
レベル13

ベストアンサー率 37% (419/1115)

sprintf(input_kaisuu, "010%d", counter); では如何でしょうか。 但しinput_kaisuuは'\0'分も含めて11以上の配列にして下さいね。(^_^)
sprintf(input_kaisuu, "010%d", counter);

では如何でしょうか。
但しinput_kaisuuは'\0'分も含めて11以上の配列にして下さいね。(^_^)


  • 回答No.3
レベル13

ベストアンサー率 37% (419/1115)

ありゃ、回答がダブってしまいました。 回答欄を開いたときは0件だったんですが…。(^_^; お詫びに補足を。 sprintf(input_kaisuu, "10%d", counter); とすると、0埋め無しで右詰になりますよ。(^_^) (勿論この場合も'\0'分の領域は用意して下さいね) ...続きを読む
ありゃ、回答がダブってしまいました。
回答欄を開いたときは0件だったんですが…。(^_^;
お詫びに補足を。

sprintf(input_kaisuu, "10%d", counter);

とすると、0埋め無しで右詰になりますよ。(^_^)
(勿論この場合も'\0'分の領域は用意して下さいね)
お礼コメント
techtak

お礼率 59% (34/57)

補足ありがとうございます。(^^;
投稿日時 - 2001-10-24 13:48:08
  • 回答No.4
レベル13

ベストアンサー率 24% (357/1463)

「回答」はcherry moonさんとnaturalさんにおまかせして、質問の文章の中に、恐らく techtakさんが誤解されていると思われる個所がありますので、注意を喚起しておきます。 > sprintf(input_kaisuu, "%d", counter); > このやり方だと左詰で"1010000000"というようになってしまい ...続きを読む
「回答」はcherry moonさんとnaturalさんにおまかせして、質問の文章の中に、恐らく
techtakさんが誤解されていると思われる個所がありますので、注意を喚起しておきます。

> sprintf(input_kaisuu, "%d", counter);
> このやり方だと左詰で"1010000000"というようになってしまい

とはならないはずです。(ライブラリがバグっていない限り)
この場合、配列の1番目から3番目(添字の0~2)に"101"が入り、4番目に'\0'が入ります。
'0'と'\0'は同じではありません。後者はゼロですが、前者は48という値(16進数で30)
で'0'という文字を表します。また、配列の5番目から最後までに入る値は定義されていません。
親切な実装ならゼロを入れてくれるかもしれませんが、一般的には、前に使った時のゴミが
入っている場合が多いです。今回は、多分、最初なのでゼロ('0'ではなく'\0')が入って
いたのだと思います。
お礼コメント
techtak

お礼率 59% (34/57)

ご指摘の通りです。
16進で確認したところ101の後ろにはNULL文字が入っていました。

不適切な質問で正確な回答は返ってきませんよね。
次回からは問題を正確に把握してから質問したいとおもいます。
ありがとうございました。
投稿日時 - 2001-10-24 14:07:11
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ