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

int counter = 100;
char input_kaisuu[10];

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


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

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

他にいい方法があれば教えてください!

このQ&Aに関連する最新のQ&A

A 回答 (4件)

%d を %09d にすると、お望みのものが出せます。


10進数で、9桁で表示する。表示する数字が9桁以下のときは先頭に0を表示する。
といった意味です。

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

この回答への補足

なるほど!
では、「10進数で、10桁で表示する。表示する数字が10桁以下のときは先頭に0を表示する。」
としたい時は、%010d とすれば良いのですか?

補足日時:2001/10/24 12:12
    • good
    • 0
この回答へのお礼

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

結果
char input_kaisuu[11]として、
%010dとすることで、解決できました。

お礼日時:2001/10/24 13:37

「回答」は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')が入って
いたのだと思います。
    • good
    • 0
この回答へのお礼

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

不適切な質問で正確な回答は返ってきませんよね。
次回からは問題を正確に把握してから質問したいとおもいます。
ありがとうございました。

お礼日時:2001/10/24 14:07

ありゃ、回答がダブってしまいました。


回答欄を開いたときは0件だったんですが…。(^_^;
お詫びに補足を。

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

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

補足ありがとうございます。(^^;

お礼日時:2001/10/24 13:48

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



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

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q右クリックGoogle検索,結果が英語サイトに

ホームページ内の単語を,指定(カラー反転)し,「右クリックのGoogleで検索」から検索すると,結果が英語Googleサイトで表示されてしまいます。

iGoogleは日本語です。
英語表示状態で→Language tools→Use the Google Interface in Your Language→Japaneseで一旦日本語にしても,やはり右クリックから検索すると,結果が英語Googleサイトになってしまいます。

右クリック検索の結果を,日本語Googleサイト表示にするには,どうしたらいいのでしょうか。

Aベストアンサー

検索プロバイダが、google.comになっていませんか?

右上にある検索バーから検索しても英語サイトになるのではないかと思います。
検索プロバイダの管理を開き、検索アドレスがなにになっているか確認してみてください。
google.comではありませんか?
これをgoogle.co.jpを追加してそちらを既定にすれば、日本語で表示されるかと思います。
すでにgoogle.co.jpがリストにあるのなら、そちらを既定に変更してください。
それでもおかしい場合は、一旦Googleを検索プロバイダから削除してGoogle日本を追加します。

尚、現在「検索プロバイダの追加」をしようとすると私の環境では、Server is too busyとなって繋がりません。
質問者さんも繋がらない場合は別ルートから追加することができるかもしれませんが、まずは上記確認して下さい。

Qchar型+char型ってint型? if(char型==int型)?

C言語の「汎整数拡張(インテグラルプロモーション)」というものに関するものだと思います。

char型とchar型を加えた結果は、char型でしょうか。それともint型でしょうか。
(下のプログラムの
printf("sizeof(a[0]+a[1])は%d\n", sizeof(a[0]+a[1])); /* char型+char型 */
という部分の結果は4なので、int型と考えるべきなのかな。)

私は、char型とint型の加算の結果はint型だと思っていましたが、
char型とchar型の加算の結果はやはりchar型だと思っていました。
(それが間違えているのでしょうか。)


if(a[0]==i) /* char型とint型の比較(?) */
の部分では、左辺はchar型、右辺はint型ですが、このように型の違う変数を比較しても文法上構わないのでしょうか。
(私は、「比較は必ず型の同じもの同士でしかできない」と思っていました。)
左辺はchar型のように見えて、じつはint型ですか。


#include <stdio.h>
int main(void)
{
char a[4];
int i=77;
printf("sizeof(int)は%d\n", sizeof(int));
printf("sizeof(char)は%d\n", sizeof(char));
printf("sizeof('M')は%d\n", sizeof('M'));
printf("sizeof(a[0])は%d\n", sizeof(a[0]));

a[0]='M';
a[1]=7+6;
a[2]=a[0]+a[1];
printf("sizeof(a[0]+a[1])は%d\n", sizeof(a[0]+a[1])); /* char型+char型 */
printf("sizeof(+a[0])=%d\n", sizeof(+a[0]));

if(a[0]==i) /* char型とint型の比較(?) */
puts("a[0]==i");
else
puts("a[0]!=i");

return(0);
}

ちなみにワーニングもエラーもなんにもでません。

C言語の「汎整数拡張(インテグラルプロモーション)」というものに関するものだと思います。

char型とchar型を加えた結果は、char型でしょうか。それともint型でしょうか。
(下のプログラムの
printf("sizeof(a[0]+a[1])は%d\n", sizeof(a[0]+a[1])); /* char型+char型 */
という部分の結果は4なので、int型と考えるべきなのかな。)

私は、char型とint型の加算の結果はint型だと思っていましたが、
char型とchar型の加算の結果はやはりchar型だと思っていました。
(それが間違えているのでしょう...続きを読む

Aベストアンサー

「sizeof 単項式」について補足です。

これは sizeof 演算子が「単項演算子」であるために書かれたものだと思われます。
例えば同様に単項演算子である ++ も、「++ 単項式」です。

では単項式とは何なのかというと、これは以下のようなものを指します。(抜けがあるかもしれませんが。)
・定数
・名前(変数名や関数名など)
・( 式 )
・後置式

( 式 ) はおなじみの「式の結果を返す」ものですが、実はこれ全体で単項式です。
本来「sizeof 単項式」では ( ) を必要としないので、sizeof より優先順位の低い演算子を含む式を裸で渡すことはませんが、( ) で囲めばどんな式でも書けるわけです。

後置式は「配列構文によるアドレス参照式」や「関数呼び出し式」、「メンバ参照式」「後置型インクリメント/デクリメント式」です。
なので、
> sizeof(a[0])
> と書いたら、[ ] という演算子は2項演算子だから、a[0]は単項式になっていない
は、わざわざ ( ) で囲まず sizeof a[0] と書いても、正しい単項式なので問題ありません。
(これらの演算子は、全て sizeof より優先順位が上になっています。)

先に ++ も単項式を取る、ということを書きましたが、++ だって
  ++*(p + n)
のような記述が通るのだから、sizeof でも問題がなくて当然です。

また、例えば ++ では「オペランドは左辺値でなければならない」という原則があり、左辺値でない式に ++ を適用するとコンパイルエラーが発生します。
しかし、sizeof に「オペランドはオブジェクトでなければならない」などという原則を聞いたことがありません。
無論コンパイルエラーも起きませんし、期待通りに式の値のサイズが返ります。
「式の値のサイズ」というのはコンパイル時に判明しているものなので、取得できて当然といえば当然ですが、これがCで定められた仕様かどうかというのは残念ながら見つけることはできませんでした。
ただし、質問にあるような sizeof の文法は全て正しく、警告が出ないのは仕様通りだというのは間違いありません。

「sizeof 単項式」について補足です。

これは sizeof 演算子が「単項演算子」であるために書かれたものだと思われます。
例えば同様に単項演算子である ++ も、「++ 単項式」です。

では単項式とは何なのかというと、これは以下のようなものを指します。(抜けがあるかもしれませんが。)
・定数
・名前(変数名や関数名など)
・( 式 )
・後置式

( 式 ) はおなじみの「式の結果を返す」ものですが、実はこれ全体で単項式です。
本来「sizeof 単項式」では ( ) を必要としないので、sizeof より優...続きを読む

Q「右クリック→送る」に相当する英語

XPを使っています。
某フリーソフトを入れたところ
ファイルやフォルダを「右クリック→送る」に余計なものがつけられていました。
再インストールなども考えるので
「右クリック→送る」に相当する英語を教えてください。

Aベストアンサー

right click → send to

... ですか?

Qchar c = 'a'; char h[1] = c; エラー

char型のものを char[]型に代入したいです。

char c = 'a';
char h[1] = c;

として、

h[0] は \x97
h[1] は \x00

にしたいです。
型変換の方法を教えてください。

Aベストアンサー

とりあえず、確認を。

C では、'a'の表す値は 0x61 = 97 であって、 \x97 ではないと思います。
(\xnnn を、十六進数の意味に取りましたが、あってますでしょうか?
この場合、C では通常 0xnnn のように書くと思います。)
ので、 これは 0x61 のことをおっしゃっていると仮定します。

> char h[1] = c;
っと、これではたぶんコンパイルが通りません。

char h[1] = {c};

のように、配列であることを明示して代入してください。
この式では、前半でh という名前の、*長さ1 の* char の配列変数を確保します。
後半で、その中を初期化しています。
添え字は 0 からはじまるので、この場合、h[0] に c の内容が代入されます。
1個しか場所を確保していないので、 h[1] の位置のデータは内容が不定です。
文字列として h を扱いたいのであれば、 C の文字列には終端として 0 が必要ですから、
char c = 'a';
char h[2] = { c, '\0'};

のような書き方が必要になります。
これで、お望みのデータになると思います。

とりあえず、確認を。

C では、'a'の表す値は 0x61 = 97 であって、 \x97 ではないと思います。
(\xnnn を、十六進数の意味に取りましたが、あってますでしょうか?
この場合、C では通常 0xnnn のように書くと思います。)
ので、 これは 0x61 のことをおっしゃっていると仮定します。

> char h[1] = c;
っと、これではたぶんコンパイルが通りません。

char h[1] = {c};

のように、配列であることを明示して代入してください。
この式では、前半でh という名前の、*長さ1 の* char の配列変数...続きを読む

Q右投左打って英語で何と書くのでしょうか?

野球グッズのデザイン中に困ってます。

野球選手の情報に「右投左打」とか「右投右打」などと書いてありますが、コレについて「内野手=Infielder」みたいな感じの専門英語?は無いのでしょうか?

色々検索してみたのですが、見つけられませんでした。
宜しくお願いします。

Aベストアンサー

厳密に言えば
BATS AT LEFT
TROWS AT RIGHT

名鑑などでよく目にするのは
B/Tと上にあって

L/R
L/L
R/R

と選手ごとに並んでいる感じですね(参考URL)

ひとりごとなら
B/T L/R
で右投げ左打ちという表記になるんじゃないかと

参考URL:http://tampabay.devilrays.mlb.com/NASApp/mlb/team/roster_active.jsp?c_id=tb

Qint kosuu; とstruct tanka_kosuu kosuu[10]; の関係は

同プログラムの内容で現在3個の質問をしておりますが!
 その質問を解決する上で4つ目の質問をさせていただきます。
 悪しからず・・・
 さて
以下のサイトのプログラムで 些細な疑問がございます。
https://oshiete.goo.ne.jp/qa/9062058.html
 で
 struct tanka_kosuu {
int tanka; 
int kosuu; 
int kingaku; /
以上の中にあるkosuuと
 struct tanka_kosuu kosuu[10];のkosuu[10]とは直接関係がありますか?
 馬鹿な質問ばかりで申し訳ございませんがよろしくお願いいたします。

Aベストアンサー

#No.1です。

>kosuu[10];をakb[10];変えたところ 以下の errorでてコンパイルできません!?
> example10.c(15) : error C2065: 'kosuu' : 定義されていない識別子です。


宣言している変数名を変更したら、その変数を利用している場所(エラーメッセージで15行目と書かれています)の変数名も変更する必要があると思いませんか?

下の例で、1行目も変数をaからbに変えたら、2行目,3行目のaも、bに変える必要があのはご理解いただけますよね?
01: int a;
02: a = 10;
03: printf("a=%d\n", a);

Q右クリックしたときに出てくるメニューが英語

マウスを右クリックしたときの文字を英語から日本語に変えることはできますか?

お分かりの方教えてください。

Aベストアンサー

実際の設定にも拘らずロケールが日本以外なのでしょう。
生産国が日本国内以外のPCで日本語環境の場合によくあらわれる症状ですね。

スタート → コントロールパネルの中の

時計、言語、および地域 を選び

地域と言語の表示言語の変更で
「形式」タブで「形式」が「日本」であっても一旦「英語(米国)」にする
次に「場所」タブで「現在の場所」が「日本」であっても一旦「米国」にする

「OK」をクリックし再起動する。

再起動後同じ設定を全て「日本」に戻し「OK」をクリックする。
再起動は不要ですが少々時間がかかって元に戻ります。

これで治りませんか?

Qchar *str; と char* str;

char *str; と char* str;
どっちも同じことを意味しているんですか?

Aベストアンサー

同じことを指している、というのは、先の回答の通りです。

また、ひとつの宣言で変数を複数宣言したときに、char* str という表記は間違い
易いじゃないか、ということが言われているのも事実です。実際、いろいろな C のソースを
見ていても、まずアスタリスクを型につけて書くのは、まずお目にかかれません。

ただ C++ では、char* str という宣言も良く使われています。

C++ に限らずオブジェクト指向の言語は、強く型を意識するので、「文字のポインタ型」と
いう意味で、まとめて書く方が馴染むのでしょう。ちなみにそういう風な人たちは

char *str1, *str2;

とは、書けない体になっています。

char* str1;
char* str2;


変数の宣言だと、C に慣れていれば、char* str というのはちょっと違和感があるのは
私も分かりますが、関数のプロトタイプ宣言だと、どちらの方がすっきりしますか?

extern char *memcpy(char *, const char *);

extern char* memcpy(char*, const char*);


# まあ、どっちが正しい、っていうんじゃ無いんですよね

同じことを指している、というのは、先の回答の通りです。

また、ひとつの宣言で変数を複数宣言したときに、char* str という表記は間違い
易いじゃないか、ということが言われているのも事実です。実際、いろいろな C のソースを
見ていても、まずアスタリスクを型につけて書くのは、まずお目にかかれません。

ただ C++ では、char* str という宣言も良く使われています。

C++ に限らずオブジェクト指向の言語は、強く型を意識するので、「文字のポインタ型」と
いう意味で、まとめて書く方が馴染む...続きを読む

Q右クリックから出てくる言葉が英語で困っています。

画面上で右クリックすると、コピー貼り付け、など、□で囲んでいろんな言葉がでてきますけど、
それが英語表示になっています。日本語に直すにはどうしたらよいでしょうか?

Aベストアンサー

「画面」がデスクトップならわかりません。
IE上での右クリックのことを「画面」と表記しているなら、英語版のIEが導入されたようですので、日本語版に入れ直しましょう。

●Windows Vista または Windows Server 2008 で意図せず英語版の Internet Explorer 8 がインストールされる
http://support.microsoft.com/kb/971414/ja

事象が異なるなら、どの「画面」で右クリックしているのかを補足しましょう。

Qint select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)について

見当違いな質問かもしれませんがお願いします。

複数のソケットを監視する際にselectを使う場合のことですが、
selectの動作と戻り値について疑問があります。

http://www.linux.or.jp/JM/html/LDP_man-pages/man2/select.2.html
ここを参照すると、selectの戻り値は
「更新された 3 つのディスクリプタ集合に含まれているディスクリプタの数 (つまり、 readfds, writefds, exceptfds 中の 1 になっているビットの総数) を返す。」
とあります。
私の中でselectは登録してあるFDのうち、一つでも動きがあれば即座にselectを抜けるもの、という認識です。
この認識だとreadfds,writefdsが引数として与えられているとしても、
どちらかのfd_setのうち、一つでも動きがあればselect文は
抜けてしまうことになります。とすると、戻り値として
「readfds, writefds, exceptfds 中の 1 になっているビットの総数」
は常に1ということになってしまいます。しかし、総数というからには
複数同時に1になることもあるはずです。

私の認識が間違っているとは思うのですが、どう間違っているのかわかりません。
select文の動きについて詳しく教えていただけないでしょうか。
または良いページがあれば教えてください。

見当違いな質問かもしれませんがお願いします。

複数のソケットを監視する際にselectを使う場合のことですが、
selectの動作と戻り値について疑問があります。

http://www.linux.or.jp/JM/html/LDP_man-pages/man2/select.2.html
ここを参照すると、selectの戻り値は
「更新された 3 つのディスクリプタ集合に含まれているディスクリプタの数 (つまり、 readfds, writefds, exceptfds 中の 1 になっているビットの総数) を返す。」
とあります。
私の中でselectは登録してあるFDのうち、一つでも動きが...続きを読む

Aベストアンサー

>私の中でselectは登録してあるFDのうち、一つでも動きがあれば即座にselectを抜けるもの、という認識です。
この認識はあっています。
しかし、selectを呼び出す以前にOKになっているFDがあれば、それらは全てビットがONになります。

話しを簡単にする為に、受信のみのソケットを3つ作成したとします。
これらの3つのソケットに向けて相手が電文を送ったとします。
その状態でまだ、こちらはselectを呼び出さずにいます。しばらくしてから、selectを呼び出すと、selectは即座にリターンし、3つのビットが一度にONになっているはずです。
一方、相手が、一切電文を送ってない状態で、selectを呼び出した場合は、何れかのビットがONになればリターンするので、そのときは、貴方が想像しているように
ビットの総数は1になる可能性が高いです。
従って、相手が電文を送る前にselectを呼び出すか、送った後にselectを呼び出すかは、その時のタイミングにより異なります。従って、ビット数の総和が常に1であるとは、考えない方が無難です。(1つのソケットしか使用しない場合は別ですが・・・)

>私の中でselectは登録してあるFDのうち、一つでも動きがあれば即座にselectを抜けるもの、という認識です。
この認識はあっています。
しかし、selectを呼び出す以前にOKになっているFDがあれば、それらは全てビットがONになります。

話しを簡単にする為に、受信のみのソケットを3つ作成したとします。
これらの3つのソケットに向けて相手が電文を送ったとします。
その状態でまだ、こちらはselectを呼び出さずにいます。しばらくしてから、selectを呼び出すと、selectは即座にリターンし、3つのビ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング