ページ 11

文字の表示について

Posted: 2010年12月24日(金) 00:43
by ポム
printfなどで0001と表示するさいに
printf("%04d",1);
と書くわけですが、
この%04dのところを自動で変更するようにはできないのでしょうか?

たとえば、
int start = 0;
int end;
scanf("%d",&end);
while(start <= end)
{
printf("%03d",start);
start++;
}
このようなコードだったとして、
今は%03dにしているので三桁ですが、
実際はendの桁数だけ表示桁数にしたいです。
なのでendに5555と入力されれば%04dに
endに845637と入力されれば%06dにしたいのです。

こんなのとできますか?

Re: 文字の表示について

Posted: 2010年12月24日(金) 01:06
by ISLe

コード:

#include <stdio.h>
int main(void)
{
	int start = 0;
	int end;
	int tmp, c;
	scanf("%d", &end);
	tmp = end;
	c = 0;
	while (tmp > 0) {
		tmp /= 10;
		c ++;
	}
	while (start <= end) {
		printf("%0*d\n", c, start);
		start++;
	}
	return 0;
}
これでどうでしょう。

Re: 文字の表示について

Posted: 2010年12月24日(金) 01:07
by パコネコ
intに6ケタの数なんて入ったっけ?っていう疑問はさておき、
いっそ%ldでいいのでは?
0は表示されないのならですが・・・
桁数を調べて0をその数描写ならできますが・・・桁数の数が同じなら0は描写されないと思います。

=======
intは最大0xffffだと思っていたのですが・・・

コード:

int main(void){
	printf("%d",0xffff);
	return 0;
}
↑により
65535
になりました。
通常のintだったらこうなると思っていたのですが・・・勘違いならすいませんでした。
====
うん。
間違えてた。
short型で考えてました。
しかも符号なしで計算してるし・・・0xffffffff/2ですね.
大変失礼しました。

Re: 文字の表示について

Posted: 2010年12月24日(金) 01:26
by ポム
ISLe さんが書きました:

コード:

#include <stdio.h>
int main(void)
{
	int start = 0;
	int end;
	int tmp, c;
	scanf("%d", &end);
	tmp = end;
	c = 0;
	while (tmp > 0) {
		tmp /= 10;
		c ++;
	}
	while (start <= end) {
		printf("%0*d\n", c, start);
		start++;
	}
	return 0;
}
これでどうでしょう。
ありがとうございます。
無事に完成しました。
%0*dなんてあったんですね・・・
初めて知りました。
ありがとうございます。

Re: 文字の表示について

Posted: 2010年12月24日(金) 17:03
by みけCAT
パコネコ さんが書きました:intに6ケタの数なんて入ったっけ?っていう疑問はさておき
32ビット整数型なら10進数6桁の数は入るはずです。
もしかして、あなたがお使いのコンパイラは「LSI C-86 試食版」ですか?