我正在制作一个生成非常大的随机数(比如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);
但是我得到一个浮点异常并且我的代码被转储了。 任何人都可以帮助我。实际上,当它们作为字符串存储在文件中时,我实际上试图将这些随机数相乘。
答案 0 :(得分:1)
char buf1[50], *number;
number = rand() % 100000000000000000000000000000000000000000000000000000000000000000000000;
首先,number
是char *
,rand
返回int
。其次,由于int
不能超过2 的功率为32 - 1,因此使用模数如此之高的数字(10 ^ ??? )没用。我建议查看this answer以获取64位数字的可移植解决方案,但它仍然低于您尝试的数据
编辑第二个选项,可让您根据需要生成所需数字:
<强> 实施例 强>
#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)
声明一个字符数组,digits[]
足以保存您的号码并终止\ 0。
在范围内选择一个随机字符&#39; 1&#39; ...&#39; 9&#39;并将其放入digits[0]
。这可以避免前导零。
在范围内选择随机字符&#39; 0&#39; ...&#39; 9&#39;并将其放在digits[]
中的下一个空位。
重复#3直到digits[]
只有最后一个广告位未填充。
将终止\ 0插入digits[]
的最后位置。
现在您的字符数组/字符串中有大号。我假设您可以将字符串写入文件。