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() |
读取文件结束符 |