前言
testlib 是一款由 Mike Mirzayanov 开发的开源项目。本家在这里 -> https://github.com/MikeMirzayanov/testlib。另外,我制作了 WyOJ 复制版,在这里 -> https://oj.ryp.org.cn/blog/wfirstzhang/post/147。
OI-Wiki 上对于此已经有不少介绍了,我并不觉得我能写得更好。
因为 testlib 可以保证生成的数据在不同环境上一样,我推荐大家使用它造数据。
命令行参数
通常来说,我们在 OI 中会使用如下方式声明主函数:
int main();
不过,编写 testlib 程序时,我们一般用这种方式声明:
int main(int argc, char** argv);
其中 argc 表示命令行参数的数量,argv 即为命令行参数。
argv 下标从 0 开始。
读者可以尝试使用这个程序自己探究一下 argc 和 argv 中存在什么东西。
#include <iostream>
int main(int argc, char** argv) {
using namespace std;
cout << "argc = " << argc << endl;
for(int i = 0; i < argc; i++)
cout << argv[i] << endl;
return 0;
}
如果你在 Windows 中这样调用这个程序:
test.exe argv[1] argv[2] argv[3]
你应该得到这样的输出:
argc = 4 test.exe argv[1] argv[2] argv[3]
另外,testlib 具有解析命令行参数的功能,使用 opt 函数。
#include "testlib.h"
int main(int argc, char** argv) {
using namespace std;
registerGen(argc, argv, 1);
string filename = opt(1);
// 下面这是不行的
// const char* filename = opt<char*>(1);
long long n = opt<long long>(2);
int k = opt<int>("k");
bool is_full_t = opt<bool>("using-fullt");
double maxv = opt<double>("R");
printf("Destination = %s,\n"
"n = %lld, k = %d,\n"
"maxv = %f\n",
filename.c_str(), n, k, maxv);
if (is_full_t)
printf("Using Full T\n");
return 0;
}
如果你这样执行此程序:
./OI_Project_main fc2.in 161 -k8 -R=154.25 --using-fullt
应该会产生这样的输出:
Destination = fc2.in, n = 161, k = 8, maxv = 154.250000 Using Full T

鲁ICP备2025150228号