生成一个非常大的随机数并将其存储在字符串缓冲区中并将其写入文件

时间:2016-08-10 07:01:55

标签: c file random

我正在制作一个生成非常大的随机数(比如50位数)的C代码,然后将其存储在字符串缓冲区中并将其复制到文本文件中。 请参考我为此编写的代码:

FILE *fp;
char first_num[MAX];
char second_num[MAX];
char *answer;
int i,test_cases,numbers;


fp = fopen("data.txt", "w+");
if(fp==NULL)
{
    printf("Error opening file\n");
    exit(1);
}  
printf("How many number combinations you wish to enter?\n");
scanf("%d",&numbers);
for(i=0;i<(2*numbers);i++)
{
    char buf1[50], *number;
    number = rand() % 100000000000000000000000000000000000000000000000000000000000000000000000;
    sprintf(buf1, "%s", number);
    fprintf(fp,"%s",buf1);
}

fclose(fp);

但是我得到一个浮点异常并且我的代码被转储了。 任何人都可以帮助我。实际上,当它们作为字符串存储在文件中时,我实际上试图将这些随机数相乘。

3 个答案:

答案 0 :(得分:1)

char buf1[50], *number;
number = rand() % 100000000000000000000000000000000000000000000000000000000000000000000000;

首先,numberchar *rand返回int。其次,由于int不能超过2 的功率为32 - 1,因此使用模数如此之高的数字(10 ^ ??? )没用。我建议查看this answer以获取64位数字的可移植解决方案,但它仍然低于您尝试的数据

编辑第二个选项,可让您根据需要生成所需数字:

  1. 创建一个大数组(位数)
  2. 生成随机数字(0 <= x <= 9)
  3. 将此数字附加到数组
  4. 重复,直到您拥有所需的位数
  5. <强> 实施例

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main(void) {
    time_t t;
    int i = 0;
    srand((unsigned) time(&t));
    
    const int SIZE = 1500;
    char num[SIZE];
    for(i = 0; i < SIZE; i++)
        num[i] = (char)(rand() % 10 + 48);
    num[SIZE] = '\0';
    printf("%s", num);
    getchar();
    }
    

答案 1 :(得分:1)

为什么不在一个字符串中连接几个随机生成的unsigned int,直到你有一个&#34;数字&#34;用正确的位数?

答案 2 :(得分:0)

  1. 声明一个字符数组,digits[]足以保存您的号码并终止\ 0。

  2. 在范围内选择一个随机字符&#39; 1&#39; ...&#39; 9&#39;并将其放入digits[0]。这可以避免前导零。

  3. 在范围内选择随机字符&#39; 0&#39; ...&#39; 9&#39;并将其放在digits[]中的下一个空位。

  4. 重复#3直到digits[]只有最后一个广告位未填充。

  5. 将终止\ 0插入digits[]的最后位置。

  6. 现在您的字符数组/字符串中有大号。我假设您可以将字符串写入文件。