1

以前、ランダムなunsigned charの生成に関連する質問をしましたが、途中でかなり良い提案がありましたが、単純さのために適用しました。 srand((unsigned)time(NULL)); rand()%256;

プログラムの冒頭で一度スランドに電話しましたが、「?」ランダムな文字の場合。いつもではありませんが、ほとんどの場合、それは私が私の焦点を失う原因になります。

4

5 に答える 5

9

ほとんどの場合、端末が印刷および出力する方法を必要としないランダムな文字を取得し続けます?int印刷する前に変換してみてください:

std::cout << (int)my_random_char;
于 2012-04-04T17:08:58.997 に答える
5

'?' を取得していません。選択した文字は印刷できないため、そのように印刷されています。整数として出力すると、期待どおりに値がランダムであることがわかります。

于 2012-04-04T17:09:46.063 に答える
3

プラットフォームによっては、値 [128 255] が有効な文字ではない場合があります。ランダムな印刷可能な ASCII 文字が必要な場合は、[32 127] の範囲で文字を生成する必要があります。

これは、印刷可能なASCII文字のみを選択するために、他の質問に対する私の回答から変更されたコードです。

int main() {
    std::random_device r;
    std::seed_seq seed{r(), r(), r(), r(), r(), r(), r(), r()};
    auto rand = std::bind(std::uniform_int_distribution<char>(' ','~'),
                          std::mt19937(seed));

    std::generate_n(std::ostream_iterator<char>(std::cout," "), 25, rand);
}
于 2012-04-04T17:09:43.237 に答える
1

考慮すべき点がいくつかあります。

  1. srand()の各呼び出しの前に呼び出さないでrand()ください。プログラムの開始時に一度呼び出します (本当に必要な場合)。
  2. unsigned chars を整数として出力して、何が起こるかを確認してください。
于 2012-04-04T17:09:52.190 に答える
1

符号なし文字は文字ではありません。それらはバイトです。0 から 255 (両端を含む) のランダムなバイトを取得していますが、これらの一部 (エンコーディングによってはほとんど) は有効な文字ではありません。

たとえば、a と z の間のランダムな文字が必要な場合は、次のようなものを使用します。

unsigned char c = 'a' + rand() % 26;

(rand() % 26これは推奨される方法ではありませんが、ほとんどのアプリケーションでは十分です。マンページを参照してください。)

于 2012-04-04T17:11:23.427 に答える