经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C » 查看文章
testlib.h从入门到入坟
来源:cnblogs  作者:自为风月马前卒  时间:2018/9/26 18:01:14  对本文有异议

学了这么久OI连个spj都不会写真是惭愧啊。。。

趁着没退役赶紧学一波吧

配置

github下载地址

我是直接暴力复制粘贴的。。

然后扔到MingW的目录里

直接引用就好啦

 

基本语法

引用testlib.h后,我们可以从三个地方读入数据

inf:输入文件

ouf:选手输出

ans:标准输出

当然,肯定不能直接用scanf读入,testlib里内置了很多读入函数

基本上就够用了。。。

一个简单的例子

  1. #include "testlib.h"
  2.  
  3. // main 需要接收命令行参数
  4. int main(int argc, char *argv[])
  5. {
  6. // 初始化 checker 环境 —— 解析命令行参数、打开文件……
  7. registerTestlibCmd(argc, argv);
  8. // 三个全局变量 inf, ouf, ans 依次为输入、选手输出和参考输出
  9. int pans = ouf.readInt(-2000, 2000);
  10. int jans = ans.readInt();
  11. if (pans == jans)
  12. quitf(_ok, "The sum is correct.");
  13. else
  14. quitf(_wa, "The sum is wrong: expected = %d, found = %d", jans, pans);
  15. return 0;
  16. }

 

运行

运行的时候需要切换到checker所在的目录,输入以下命令

windows

  1. checker <input-file> <output-file> <answer-file>

Linux

  1. ./checker <input-file> <output-file> <answer-file>

根据输出结果可以判断程序的对错

 

注意事项

写这篇文章主要是为了记一下容易翻车的地方。。

  • 读入的时候必须把三个文件里的内容都读完,不然会出现

 

如果全都读完后仍然显示这个。。。。

zzq给了个解决方案Orz

 

 

  •  checker内尽量不要出现中文字符,不然上传到某些OJ的时候可能会出BUG

 

 自己写了个模板

  1. #include "testlib.h"
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. const int MAXN = 1005 + 10;
  5. void YES() {
  6. quitf(_ok, "The ans is correct.");
  7. }
  8. void NO() {
  9. quitf(_wa, "The ans is not correct.");
  10. exit(0);
  11. }
  12. void readInf() {
  13. }
  14. void readOuf() {
  15. }
  16. void readAns() {
  17. }
  18. int main(int argc, char *argv[]) {
  19. registerTestlibCmd(argc, argv);
  20. readInf();
  21. readOuf();
  22. readAns();
  23. return 0;
  24. }
板子
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号