【问题标题】:Generate random numbers for member of struct为结构成员生成随机数
【发布时间】:2017-07-22 16:53:31
【问题描述】:

我想让用户定义他们希望存储在我的结构成员中的随机数的数量。 这是我目前所拥有的。

struct BigInt {
int A;
int rdm;
};
struct BigInt A[300];
struct BigInt rdm[10]={0,1,2,3,4,5,6,7,8,9};

printf("Number");
int len;
scanf("%i",&len);

srand(time(NULL));
int i=0;

while (i!=len){
int r=rand()%10;
A[i]=rdm[r];

printf("\nr:%i\n",r);
printf("A[i]:%i",A[i]);
i++;
}

但是我得到了奇怪的值,它并没有像我预期的那样工作。我不知道为什么,我做错了什么?

【问题讨论】:

  • 打开编译器警告。 注意这些警告,甚至将它们视为错误。编辑:编译器可能抱怨printf()调用中"%i"A[i]之间的不匹配。
  • struct BigInt 有两个成员。
  • 您将Ardm 用作成员名称和数组名称。表示你还没有掌握什么是结构,以及它是如何工作的。
  • 我很惊讶你的编译器竟然编译了这段代码。你需要更好地理解结构。
  • 请注意,struct BigInt rdm[10]={0,1,2,3,4,5,6,7,8,9}; 初始化了 10 元素数组 rdm 的前 5 个元素。这是因为每个BigInt 有两个成员,所以0 初始化rdm[0].A1 初始化rdm[0].rdm2 初始化rdm[1].A,等等。它也可以写成:struct BigInt rdm[10]={ { 0, 1 }, { 2, 3 }, { 4, 5 }, { 6, 7 }, { 8, 9 }, }; 并且会得到相同的效果。您还可以使用:struct BigInt rdm[10]={ { 0 }, { 1 }, { 2 }, { 3 }, { 4 }, { 5 }, { 6 }, { 7 }, { 8 }, { 9 } };,它将设置.A 成员,而将.rdm 置零。等等。

标签: c random struct


【解决方案1】:

以下 sn-p 代码根据您在下面的评论解决了您的问题。你可能还没有完全理解如何使用结构。请注意,要使用结构的成员,您必须使用 .符号

struct BigInt {
    int *A;
};

struct BigInt bigIntVar = {
    NULL
};

printf("Number");
int len;
scanf("%i", &len);

bigIntVar.A = (int*)malloc(len * sizeof(int));

srand(time(NULL));
int i = 0;

while (i != len) {
    int r = rand() % 10;
    bigIntVar.A[i] = r + 1;

    printf("\nr:%i\n", r);
    printf("A[i]:%d", bigIntVar.A[i]);
    i++;
}

【讨论】:

  • 我可以肯定修改后的结构定义不合适。当然,我可能是错的 - 从问题中不清楚想要什么,或者为什么数组大小的差异,或者......嗯,关于这个问题的很多内容都不清楚。
  • 我同意你的观点,这个问题并不完全清楚。我应该删除答案吗?我认为用户在 rdm 数组中的数字中最多需要 300 个随机数,在这种情况下有 10 个值。
  • {} 是无效的 C 初始化程序(尽管没有 -pedantic 的 gcc 接受它)。你可能想用{0}替换。
  • 对不起,我对……这里的一切都比较陌生。目标是让 BigInt 类型的成员 A 成为从 1 到 10 的任意大小的随机数的数组。自从我问了这个问题后,我对 struts 有了更好的把握,但对于如何实现我的目标仍然有点困惑我要去。 This 是我修改后的代码,但我仍然遇到问题。
猜你喜欢
  • 2015-02-26
  • 2015-02-26
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 2013-06-16
  • 2017-05-20
  • 1970-01-01
  • 2013-04-13
相关资源
最近更新 更多