在c中生成随机数并写入文件

时间:2015-04-10 09:44:47

标签: c

我试图在一个范围内生成一些随机数并将这些数字写入文件,这是我写的,但它不是生成15组数字,而是只生成一组。我尝试使用另一个for循环来做一些人帮助我。

#include <stdio.h>
#include <math.h>
#include <time.h>

int main()
{
    FILE *fp;
    fp =fopen ("boundary.dat","w");
    srand((unsigned)time(0));
    double xmax,ymax,zmax;
    double x,y,z;
    int i=0;
    xmax = 4000;
    ymax =4000;
    zmax =4000;

    do 
    {
        i=0;
        i++;
        x=(rand()%4000 - 2000);
        y=(rand()%4000 -2000);
        z=1-x-y;
        printf("%.2f %.2f %.2f \n ", x,y,z);
        fprintf(fp, "%.2f %.2f %.2f \n ", x,y,z);
    }
    while ((abs(z)<=zmax) && (i<15));
        fclose(fp);

        return;
    }
}

2 个答案:

答案 0 :(得分:1)

您在循环开始时设置i = 0,然后立即递增它。这导致您的循环仅运行14次。事实上,我很惊讶甚至这样做,因为你从来没有大于1(因为你在循环开始时重置它。我猜其他测试条件(abs(z)&lt; = zmax ))导致循环退出。

从循环开始取出i = 0并将测试更改为i <16,因为您实际上是从1到15而不是0到14运行。

更好的是,不要使用do / while循环并使用

for(i=0;i<15;i++) {

    ... other stuff here...

    if(abs(z) > zmax) {
         break;
    }
}

答案 1 :(得分:1)

尚未经过测试。

您遇到的一个问题是在while循环的每次迭代中重置i。解决方案是删除循环内的行i=0;。但是,我建议使用for循环,因为你有三个语句;初始值,条件和增量。

那会把它变成。

for (int i = 0; i < 15 && abs(z) <= zmax; ++i) {
    x = (rand()%4000 - 2000);
    y = (rand()%4000 -2000);
    z = 1 - x - y;
    printf ("%.2f %.2f %.2f \n ", x,y,z);
    fprintf (fp, "%.2f %.2f %.2f \n ", x,y,z);
}
fclose(fp);

return 0;

我也冒昧地添加了一些空格。让代码呼吸!