为了玩蒙特卡罗模拟,我在和C++做斗争。我是个数学家,这是我第一次和C++在一起。
/* The main routine
*/
int main(int argc,char *argv[])
{
struct timeval tv;
struct timezone tz;
double res,err;
int loops,n,i;
/* require correct number of arguments
*/
if (argc != 3)
{
fprintf(stderr,usage);
exit(0);
}
n = atoi(argv[1]); /* first int */
loops = atoi(argv[2]); /* 2nd int */
/* seed the random number using system time
* tv.tv_sec contains time in seconds, tv.tv_usec in microseconds
*/
if((r = gsl_rng_alloc(gsl_rng_mt19937)) == NULL) {
printf("ERROR: Could not create random number generator\n");
exit(1);
}
gettimeofday( &tv, &tz );
gsl_rng_set(r, tv.tv_sec + tv.tv_usec );
for (i=0; i<100000; i++) gsl_rng_get (r);
for (i=0; i<loops; i++)
{
res = mcint(n,&err);
printf("%d %g %g\n",i,res,err);
}
return(1);
}其中mcint是我的蒙特卡罗函数。
问题是argc没有正确的参数数(3)。我该如何解决这个问题?
发布于 2014-11-30 16:45:09
argc是从命令行调用程序时的参数数。
你的节目需要三个论点。第一个始终是可执行程序的名称。因此,它需要额外的参数,您必须提供:第一个是第一个intereger (n),第二个是您希望它执行的迭代次数。
解决问题的最简单方法是编译程序并从命令行调用它:
MYMONTECARLO 100 1000 如果您在IDE下,请在手册中查看如何提供这样的运行时参数。例如,对于代码::块,请查看this question
https://stackoverflow.com/questions/27215343
复制相似问题