【问题标题】:C generate random address from different arraysC从不同的数组生成随机地址
【发布时间】:2013-06-13 16:26:58
【问题描述】:

我有以下代码。我想要完成的是从头文件中的所有数组中“生成”一个随机名称/地址/Zip。问题是我任何时候都得到相同的地址,所以我做错了。

xtmtrx@server:~/coding/c/work$ ./randaddr
Olivier|Suh|28 King Street Apt 21|11934
xtmtrx@server:~/coding/c/work$ ./randaddr
Olivier|Suh|28 King Street Apt 21|11934
xtmtrx@server:~/coding/c/work$ ./randaddr
Olivier|Suh|28 King Street Apt 21|11934
xtmtrx@server:~/coding/c/work$

randaddr.c

#include <stdio.h>
#include <stdlib.h>
#include "first.h"
#include "last.h"
#include "streets.h"
#include "zips.h"

int main() {
    const size_t firsts_count = sizeof(firsts) / sizeof(firsts[0]);
    const size_t lasts_count = sizeof(lasts) / sizeof(lasts[0]);
    const size_t streets_count = sizeof(streets) / sizeof(streets[0]);
    const size_t zips_count = sizeof(zips) / sizeof(zips[0]);
    printf("%s|%s|%s|%s\n", firsts[rand() % firsts_count], lasts[rand() % lasts_count], streets[rand() % streets_count], zips[rand() % zips_count]);
    return 0;
}

first.h

const char *firsts[] = {
        "Asgar",
        "Aadit",
        "Aanand",
        "Aaron",
        "Aarti",
        "Aasha",
        "Abby",
        "Abdel",
        "Abdoulaye"
};

最后一个.h

const char *lasts[] = {
        "ALI",
        "ALZAYED",
        "ARSAN",
        "Abdelmaseeh",
        "Abdulla",
        "Abebe",
        "Aber",
        "Abeshi",
        "Abraham"
};

街道.h

const char *streets[] = {
        "1000 Park Ave",
        "1001 Park Avenue",
        "1003 St. Nicholas Ave.",
        "100 Bleecker St",
        "100 E31st St",
        "100 East 68th Street Apt. 14E",
        "100 Jane St.",
        "100 Jane St PH-J",
        "100 John St. Apt 2208"
};

zips.h

const char *zips[] = {
        "00501",
        "00544",
        "06390",
        "10001",
        "10002",
        "10003",
        "10004",
        "10005",
        "10006"
};

【问题讨论】:

标签: c


【解决方案1】:

这是因为您没有播种随机数生成器。

一个常见的简单方法是调用:

srand(time(NULL));

第一次调用rand()之前。

这使用srand()(我猜是“种子随机”)函数,向它传递一个数字(当前时间),每次运行程序时都可能不同。

阅读wikipedia article on pseudorandom number generators 以了解有关幕后内容的更多信息。随机性很难。

【讨论】:

  • 哇!我怎么会忘记? :)
【解决方案2】:

这是因为每次调用程序时 rand() 都会使用相同的seed 开始生成伪随机数。

在 main() 开始时调用一次 srand() 以将种子初始化为不同的值,例如

srand(time(NULL));

(由于 time() 的分辨率为秒,如果您在同一秒内多次调用该程序,您将获得相同的随机数)另一种选择可能是

srand((int)getpid());

【讨论】:

    猜你喜欢
    • 2017-10-02
    • 2012-03-03
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    相关资源
    最近更新 更多