2010-11-21 23 views
1

私は、コマンドラインにいくつの文字を置くかという、擬似ランダム印刷可能なASCII文字のシーケンスを生成するテスト目的のプログラムを作成しようとしています。今はうまく動いていません。シーケンスはほとんど常に大多数ですか?s、それは私が印刷するよう指示する文字の数を常に印刷するとは限りません。ここに私のコードです。どうしたの?私は時間をランダム関数の種として使用します。ランダムな印刷可能なASCII文字をCで生成する

注:srand()とrand()を使用するアルゴリズムより複雑なアルゴリズムを使用する価値はありません。

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main(int argc, char *argv[]) { 
    int c; 
    int i; 
    int limit; 

    sscanf(argv[1], "%d", &limit); 
    srand((unsigned int)time(NULL)); 

    for (i = 0; i < limit; i++) { 
     c = rand(); 
     if (c != 9 && c != 10 && c <= 32 && c >= 127) { 
     i--; 
     } 
     else { 
     putchar(c); 
     } 
    } 
    return 0; 
} 

ありがとうございました!

+0

この答えはC#であるが、それは比較的にする必要がありますCに変換するのは簡単です:http://stackoverflow.com/questions/4221001/algorithm-for-generating-a-random-numeric-string-10-000-chars-in-length/42210 15#4221015 –

+2

9と10が「印刷可能」に該当すると判断したのはなぜですか? –

+0

恐らく彼は ''\ n''を意味していたでしょう – ruslik

答えて

1

は、この行を修正してみてください。

if (c != 9 && c != 10 && c <= 32 && c >= 127) { 

は次のようになります。

if (c != 9 && c != 10 && (c < 32 || c >= 127)) { 

しかし、これはおそらく良いだろう:

if (!isprint(c)) { 
+0

実際、rand()は0..255よりもはるかに広い範囲で値を返します。この変更の典型的な動作は何も印刷されません。 – horsh

+0

@horshは 'c = rand()&0x7F'を使って解くことができます。 – ruslik

+0

@horsh質問に書かれているコードは、何かが見つかるまで乱数を選択し続けるので、何も印刷しません。それは印刷物の間に好きではない値を投げ出すのに多くの時間を費やします。 –

関連する問題