我想把一个带参数的函数作为参数传递给其他函数,但我不知道如何(或者是否)可以做到这一点。
我想做的是:
#include <stdio.h>
void getInput(char* request, int (*func)());
int main()
{
double input;
getInput("Input: ", scanf("%lf", &input));
}
void getInput(char* request, int (*func)())
{
// do stuff
func()
// do more stuff
}
不幸的是这不起作用。我想当我试图把它作为一个论点来传递的时候,scanf已经被执行了。
如何在getinput中运行此命令?
最佳答案
你不能在C语言中这样做,因为语言不支持这样的结构。
您通常可以再次使用变量参数函数来解决这类问题:
void getInput(const char *request, const char *fmt, ...)
{
va_list args;
printf("%s: ", request);
fflush(stdout);
va_start(fmt, args);
vscanf(fmt, args);
va_end(args);
}
用法如下:
int main(void)
{
double input;
getInput("Input", "%lf", &input);
return 0;
}
当然,您可能需要添加正确的返回值处理,否则就不可能知道嵌入的
vscanf()
是否成功,因此变量可以使用。