S2OJ/judger/uoj_judger/builtin/checker/bcmp.cpp

56 lines
1.1 KiB
C++
Raw Normal View History

2016-07-18 16:39:37 +00:00
#include <cstdio>
inline const char *englishEnding(int x)
{
x %= 100;
if (x / 10 == 1)
return "th";
if (x % 10 == 1)
return "st";
if (x % 10 == 2)
return "nd";
if (x % 10 == 3)
return "rd";
return "th";
}
int main(int argc, char * argv[])
{
if (argc != 4)
return 1;
FILE *fout = fopen(argv[2], "r");
FILE *fans = fopen(argv[3], "r");
if (fout == NULL || fans == NULL)
return 1;
int n = 0;
while (true)
{
n++;
int c, d;
c = fgetc(fout);
d = fgetc(fans);
if (c == EOF && d == EOF)
break;
if (c != d)
{
if (c == EOF)
fprintf(stderr, "wrong answer %d%s byte differ - expected EOF found '%c'\n", n, englishEnding(n), (char)d);
else if (d == EOF)
fprintf(stderr, "wrong answer %d%s byte differ - expected '%c' found EOF\n", n, englishEnding(n), (char)c);
else
fprintf(stderr, "wrong answer %d%s byte differ - expected '%c' found '%c'\n", n, englishEnding(n), (char)c, (char)d);
return 1;
}
}
if (n == 0)
fprintf(stderr, "ok empty file\n");
else if (n == 1)
fprintf(stderr, "ok single byte\n");
else
fprintf(stderr, "ok %d byte\n", n);
return 0;
}