【问题标题】:generating random printable ascii characters in c在c中生成随机可打印的ascii字符
【发布时间】:2010-11-21 04:29:38
【问题描述】:

我正在尝试编写一个用于测试目的的程序,该程序会生成一系列伪随机可打印 ASCII 字符,您可以在命令行中输入所需的字符数。现在它运行得不太好;序列几乎总是多数?s,它并不总是打印我告诉它打印的字符数。这是我的代码;它出什么问题了?我使用时间作为随机函数的种子。

注意:我不值得使用比使用 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;
}

谢谢!

【问题讨论】:

  • 虽然这个答案是C#的,但是转换成C应该比较容易:stackoverflow.com/questions/4221001/…
  • 为什么你认为 9 和 10 属于“可打印”?
  • 他的意思可能是'\n'
  • 尝试打印 c 的数值,你会发现问题出在哪里。

标签: c ascii random


【解决方案1】:

尝试修复这条线:

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

应该是:

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

但这可能会更好:

  if (!isprint(c)) {

【讨论】:

  • 真的,rand() 给出的值范围比 0..255 大得多,这种变化的典型行为是什么都不打印。
  • @horsh 问题中编写的代码一直选择随机数,直到找到要打印的内容,因此它不会打印任何内容,尽管它会浪费大量时间丢弃它没有的值' t 喜欢在打印的东西之间。
  • rand() / (RAND_MAX/128) 可能会提供更好的随机性。
猜你喜欢
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
相关资源
最近更新 更多