1から1000までの乱数を10要素の整数型配列に格納するプログラムを作っているのですが、
その値の文字数を%nを使って足していきます。
for (cnt = 0; cnt < 10; cnt++)
{
srand(time(NULL));
for (i = 1; i <= 1000; i++)
{
number[cnt] = i;
}
printf("値\t合計文字数\n");
printf("%d\t%n\n", i, );
}
今このように作ってるのですが、まず合計文字数は出さずに配列に格納していくのを最初に作ったのですが、
それもうまくいかないのでどこを修正していいか混乱してわからないです。
rand
http://www9.plala.or.jp/sgwr-t/lib/rand.html
を参考にしてみてください。
> srand(time(NULL));
はfor文の外のほうがいいです。
> 混乱してわからないです。
変数を何に使用しているかまとめてみませんか?
配列の要素番号:cnt
乱数を入れる配列の変数:
合計文字数:
変数はint number[10], cnt, i, *ptr, total;を使ってます。
> 変数はint number[10], cnt, i, *ptr, total;を使ってます。
その変数をどう使っているかというのが…。
例えば
> printf("値\t合計文字数\n");
> printf("%d\t%n\n", i, );
値にiを表示するようになってますよね?
ほんとにiが表示したい値かというのが問題。
ちなみにやりたいことはこーゆーことでよいのでしょうか?
合計文字数は「乱数の文字数」なのか「出力した文字数」なのか
分からなかったので、「乱数の文字数」にしてみましたが。
int number[10], cnt, total;
char buf[16];
// 初期化
total = 0;
srand(time(NULL));
printf("値\t合計文字数\n");
for (cnt = 0; cnt < 10; cnt++)
{
// 乱数
number[cnt] = rand()%1000 + 1;
// 乱数の文字数を合計
total += sprintf(buf, "%d", number[cnt]);
// 出力
printf("%d\t%d\n", number[cnt], total);
}
>for (i = 1; i <= 1000; i++)
>{
> number[cnt] = i;
>}
では、number[0] から number[9] まで全て 1000 が入ります。
>printf("%d\t%n\n", i, );
%d\t%n だと \t も文字数に含まれます。
%n は int型へのポインタが引数に必要です。
>%d\t%n だと \t も文字数に含まれます。
\tじゃなくてスペースにすればいいですか?
>みい
合計文字数は乱数の文字数です。
それを%nで出力します。そのために変数にポインタを作りました。
ある数値の文字数(桁数)がほしいならば
int num = 100;
int len;
printf( "%d%n", num, &len );
としないと取れないのでは?
> \tじゃなくてスペースにすればいいですか?
やってみればいいのではないでしょうか?いちいち掲示板で聞くことではないです。
>Blue
すいません!気をつけます。
今できました!みなさんありがとうございました。また聞くときがあるかもしれないですが、よろしくお願いします。
やりたいことはこんなもんかなぁと思いながら下のソースを書いてみました。
解決したので、ついでに載せておきます。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main( void )
{
int total = 0, len;
int number[ 10 ];
int cnt;
srand( ( unsigned )time( NULL ) );
for ( cnt = 0; cnt < sizeof( number ) / sizeof( int ); cnt++ )
{
number[ cnt ] = 1 + ( int )( rand() / ( RAND_MAX + 1.0 ) * 1000 );
printf( "値\t合計文字数\n" );
printf( "%d%n", number[ cnt ], &len );
total += len;
printf( "\t%d\n", total );
}
return 0;
}
ありがとうございます!
ツイート | ![]() |