bcmp.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include <cstdio>
  2. inline const char *englishEnding(int x)
  3. {
  4. x %= 100;
  5. if (x / 10 == 1)
  6. return "th";
  7. if (x % 10 == 1)
  8. return "st";
  9. if (x % 10 == 2)
  10. return "nd";
  11. if (x % 10 == 3)
  12. return "rd";
  13. return "th";
  14. }
  15. int main(int argc, char * argv[])
  16. {
  17. if (argc != 4)
  18. return 1;
  19. FILE *fout = fopen(argv[2], "r");
  20. FILE *fans = fopen(argv[3], "r");
  21. if (fout == NULL || fans == NULL)
  22. return 1;
  23. int n = 0;
  24. while (true)
  25. {
  26. n++;
  27. int c, d;
  28. c = fgetc(fout);
  29. d = fgetc(fans);
  30. if (c == EOF && d == EOF)
  31. break;
  32. if (c != d)
  33. {
  34. if (c == EOF)
  35. fprintf(stderr, "wrong answer %d%s byte differ - expected EOF found '%c'\n", n, englishEnding(n), (char)d);
  36. else if (d == EOF)
  37. fprintf(stderr, "wrong answer %d%s byte differ - expected '%c' found EOF\n", n, englishEnding(n), (char)c);
  38. else
  39. fprintf(stderr, "wrong answer %d%s byte differ - expected '%c' found '%c'\n", n, englishEnding(n), (char)c, (char)d);
  40. return 1;
  41. }
  42. }
  43. if (n == 0)
  44. fprintf(stderr, "ok empty file\n");
  45. else if (n == 1)
  46. fprintf(stderr, "ok single byte\n");
  47. else
  48. fprintf(stderr, "ok %d byte\n", n);
  49. return 0;
  50. }