我之前曾问过一个与生成随机无符号字符相关的问题,但是由于我应用的简单性,所以提出了很好的建议。
srand((unsigned)time(NULL));
rand()%256;
我在程序开始时给srand打了一次电话,但是我一直在'?'对于一个随机的char。不是所有的时间,而是大多数时间,这使我失去了我的注意力。
答案 0 :(得分:9)
很可能你不断获得终端不需要如何打印和输出?
的随机字符。在打印前尝试将它们转换为int
:
std::cout << (int)my_random_char;
答案 1 :(得分:5)
你没得到'?'作为一个字符,它正在以这种方式打印,因为所选字符不可打印。将其打印为整数,您将看到该值是随机的。
答案 2 :(得分: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);
}
答案 3 :(得分:1)
需要考虑的一些事项:
srand()
之前不要致电rand()
。程序启动时调用一次(如果你真的想)。答案 4 :(得分:1)
无符号字符不是字符;他们是字节。你得到0到255(含)之间的随机字节,其中一些(或大多数,取决于编码)不是有效字符。
例如,如果您想要a和z之间的随机字符,请使用类似
的内容unsigned char c = 'a' + rand() % 26;
(rand() % 26
不是推荐的做法,但对大多数应用程序来说都是如此。请参阅联机帮助页。)