gpt4 book ai didi

c - 函数指针在 getopt 中不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 03:42:49 24 4
gpt4 key购买 nike

我有一些代码可以测试各种 PRNG 的稳健性,我想使用选项选择要测试的 PRNG。

我有一个函数指针类型:typedef double (*voidPRNG_ptr)(void);

我有一个测试函数:test_results* investigator_alloc(int N, voidPRNG_ptr RNGp)其中 test_results 是类型定义的结构。

我有 PRNG 函数:double box_muller(void)double rejection(void)double RNG(void) 等。 .

主要作品FINE中的以下代码:

int main(int argc, char** argv){ 
int N = atoi(argv[1]);
voidPRNG_ptr PRNGp = &box_muller;

test_results* results = investigator_alloc(N, PRNGp);

return 0;
}

使用box_muller函数作为RNG,数据符合预期。

这也很好用:

int main(int argc, char** argv){ 
int N = atoi(argv[1]);
voidPRNG_ptr PRNGp = &box_muller;

PRNGp = &rejection;

test_results* results = investigator_alloc(N, PRNGp);

return 0;
}

正如预期的那样,拒绝方法被用作 RNG。

但是,这行不通:

int main(int argc, char **argv){
int opt;
int atest = 0;
voidPRNG_ptr PRNGp = &RNG; //set default

while((opt = getopt(argc, argv, "abur")) != -1){
if(opt == 'a') {
PRNGp = &normal_approx;
atest = 1;
}
else if(opt == 'b') PRNGp = &box_muller;
else if(opt == 'u') PRNGp = &RNG;
else if(opt == 'r') PRNGp = &rejection;
}

printf("\n %d\n",atest);


int N = atoi(argv[1]);
//PRNGp = &rejection;
//PRNGp = &normal_approx;
//PRNGp = &box_muller;

test_results *results = investigator_alloc(N,PRNGp);
return 0;
}

我知道 getopt 正在工作,因为 atest 根据所选选项设置为正确的值。但是函数指针一定有问题,因为数据是空白的。

有什么想法吗?谢谢!

最佳答案

问题是您将 atoi() 应用于第一个命令行参数,这是告诉您的程序要使用哪个 RNG 的选项。由于 argv[1] 不是数字,您最终得到 N=0 并且没有数据。

argv[1] 更改为 argv[optind](参见 Using the getopt function)。

关于c - 函数指针在 getopt 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27204844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com