uoj的数据检验器(val.cpp)使用testlib。
下面是A+B Problem的检验器:
#include "testlib.h" using namespace std; int main(void) { registerValidation(); inf.readInt(0,1000000000,"A"); inf.readSpace(); inf.readInt(0,1000000000,"B"); inf.readEoln(); inf.readEof(); return 0; }
上面的代码是这样工作的:
registerValidation():初始化。inf.readInt(0,1000000000,"A"):读入叫做“A”的整形变量,范围必须在[0,1000000000]以内。如果不满足要求,则判定数据无效。inf.readSpace():读取一个空格。inf.readEoln():读取一个换行符。inf.readEof():读取文件结束符。
上面的读取中,只要有任意一个出现了偏差,则判定数据无效。
如果数据需要保证某个要求,您可以使用ensuref():
ensuref(cmd=='Q' || cmd=='A' || cmd=='C' , "您输入的操作不合法");
在上面的代码中,如果cmd既不是'Q',也不是'A'或'C',则判定数据无效,并提示您输入的操作不合法。
val.cpp中不能出现中文!
函数表
| 函数 | 功能 |
|---|---|
void registerValidation() |
初始化,应该在程序开始时调用 |
char readChar() |
读取一个字符 |
char readChar(char ch) |
读取一个字符,必须是指定的ch |
char readSpace() |
读取一个空格 |
void unreadChar(char ch) |
将ch添加到输入流的最后面 |
string readToken() |
读取一个字符串,相当于scanf中的%s |
string readToken(string regex) |
读取一个字符串,必须满足给定的表达式regex,表达式语法类似于正则 |
string readWord() |
同readToken() |
string readWord(string regex) |
同readToken(string regex) |
long long readLong() |
读取一个long long变量 |
long long readLong(long long L, long long R) |
读取一个long long变量,必须在[L,R]以内 |
int readInt()或readInteger() |
读取一个int变量 |
int readInt(int L, int R) |
读取一个int变量,必须在[L,R]以内 |
double readDouble()或readReal() |
读取一个double类型变量 |
double readDouble(double L, double R) |
读取一个double类型变量,必须在[L,R]以内 |
string readLine()或readString() |
读取一整行,相当于gets() |
string readLine(string regex) |
读取一整行,必须满足给定的表达式regex |
void readEoln() |
读取一个换行符 |
void readEof() |
读取文件结束符 |
