我需要在C / C ++中编写这样的定义
#define scanf( fscanf(inf,
为了用scanf(
文学
fscanf(inf,
但我不知道怎么......
由于
答案 0 :(得分:11)
答案 1 :(得分:4)
我需要在C ++中编写这样的定义
不,你没有。您真正想要做的是重定向stdin
。
freopen(inf, "r", stdin);
答案 2 :(得分:3)
使用fscanf编写所有代码,并使用宏定义文件名,如下所示:
#ifdef USE_SCANF
#define SCANF_FILE(file) stdin
#else
#define SCANF_FILE(file) file
#endif
fscanf(SCANF_FILE(blah), "%d", &a);
答案 3 :(得分:1)
当然不可能按照你的方式进行。
你必须做像
这样的事情#define scanf(S, ...) fscanf(inf, S, __VA_ARGS__)
参见例如here
编辑:GNU cpp也支持可变参数宏;它是VA_ARGS前面有双下划线并以双下划线结束......我必须在这里学习转义标记......
答案 4 :(得分:0)
您无法替换括号。如果您使用的是Visual C ++,则可以使用可变参数宏来完成您想要的任务:
#define scanf( format, ... ) fscanf( inf, format, __VA_ARGS__ )
其他编译器可能有类似的功能,但我不熟悉它们。