乱数を使って

解決


int型  2005-11-16 23:36:42  No: 59599

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, );

  }
今このように作ってるのですが、まず合計文字数は出さずに配列に格納していくのを最初に作ったのですが、
それもうまくいかないのでどこを修正していいか混乱してわからないです。


Blue  2005-11-16 23:42:12  No: 59600

rand
http://www9.plala.or.jp/sgwr-t/lib/rand.html
を参考にしてみてください。

> srand(time(NULL));
はfor文の外のほうがいいです。


みい  2005-11-16 23:50:34  No: 59601

> 混乱してわからないです。
変数を何に使用しているかまとめてみませんか?
配列の要素番号:cnt
乱数を入れる配列の変数:
合計文字数:


int型  2005-11-17 00:01:53  No: 59602

変数はint number[10], cnt, i, *ptr, total;を使ってます。


みい  2005-11-17 00:38:35  No: 59603

> 変数はint number[10], cnt, i, *ptr, total;を使ってます。
その変数をどう使っているかというのが…。
例えば
> printf("値\t合計文字数\n");
> printf("%d\t%n\n", i, );
値にiを表示するようになってますよね?
ほんとにiが表示したい値かというのが問題。


みい  2005-11-17 02:24:08  No: 59604

ちなみにやりたいことはこーゆーことでよいのでしょうか?
合計文字数は「乱数の文字数」なのか「出力した文字数」なのか
分からなかったので、「乱数の文字数」にしてみましたが。

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);
}


まきじ  2005-11-17 08:51:13  No: 59605

>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型へのポインタが引数に必要です。


int型  2005-11-17 19:08:37  No: 59606

>%d\t%n だと \t も文字数に含まれます。
\tじゃなくてスペースにすればいいですか?


int型  2005-11-17 19:15:58  No: 59607

>みい
合計文字数は乱数の文字数です。
それを%nで出力します。そのために変数にポインタを作りました。


Blue  2005-11-17 19:25:37  No: 59608

ある数値の文字数(桁数)がほしいならば

int num = 100;
int len;

printf( "%d%n", num, &len );

としないと取れないのでは?

> \tじゃなくてスペースにすればいいですか?
やってみればいいのではないでしょうか?いちいち掲示板で聞くことではないです。


int型  2005-11-17 19:41:36  No: 59609

>Blue
すいません!気をつけます。
今できました!みなさんありがとうございました。また聞くときがあるかもしれないですが、よろしくお願いします。


Blue  2005-11-17 19:49:01  No: 59610

やりたいことはこんなもんかなぁと思いながら下のソースを書いてみました。
解決したので、ついでに載せておきます。

#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;
}


int型  2005-11-17 19:58:52  No: 59611

ありがとうございます!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加