我试图在一个范围内生成一些随机数并将这些数字写入文件,这是我写的,但它不是生成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;
}
}
答案 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;
我也冒昧地添加了一些空格。让代码呼吸!