在C编程中随机选择预设功能

时间:2017-11-11 16:53:38

标签: c stdio

我在main()中列出了不同的功能:

puzzle1(ar); 
puzzle2(ar); 
puzzle3(ar); 
puzzle4(ar); 
puzzle5(ar);

我想随机选择只有一个要调用的函数。我该怎么做才能实现这一目标?

谢谢!

编辑1:我的功能都是2D阵列

编辑2:从评论中获得更多帮助。

编辑3:在得到更多帮助后,我完成了以下工作:

srand(time(NULL));
int rand_output = rand()%5;
int (*fp[5])(char finalpuzzle[NROW][NCOL]);


int main();

char ar[NROW][NCOL];
int x,y,fp=0;

    fp[0]=puzzle1;
    fp[1]=puzzle2;
    fp[2]=puzzle3;
    fp[3]=puzzle4;
    fp[4]=puzzle5;
    (*fp[rand_output])(x,y);

我做错了什么? 我得到的错误是:

expected declaration specifier or '.....' before 'time'
srand

initializer element is not constant
int rand_output

subscripted value is neither array nor pointer nor vector
(*fp[rand_output])(x,y)

和一堆警告initialization from incompatible pointer type

1 个答案:

答案 0 :(得分:2)

使用rand()选择一个索引,并从函数指针列表中调用该索引处的函数。

srand(time(NULL));   // called once
int rand_output = rand()%5; 
int (*fp[5]) (int ar[]);

..
..
fp[0]=puzzle1;
fp[1]=puzzle2;
..

(*fp[rand_output])(arr);

或者只是一行: -

 int (*fp[5])(int[])={puzzle1, puzzle2,. ...., puzzle5};

一个小示例代码

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

void op1(int ar[][2]){
    printf("%s","ok");
}
void op2(int ar[][2]){
    printf("%s","ok2");
}
int main(){
    int z[2][2]={{0,1},{2,4}};
    srand(time(NULL));   // called once
    int rand_output = rand()%2; 
    void (*fp[2]) (int ar[][2]);
    fp[0]=op1;
    fp[1]=op2;
    (*fp[rand_output])(z);
}