#include #include #include void exit_with_message(const char* message, int exit_code, int line_num) { if (line_num >= 0) { printf("%s @ %d\n", message, line_num); } else { printf("%s\n", message); } exit(exit_code); } int main(int argc, char* argv[]) { if (argc < 4) { exit_with_message("Usage: checker ", 3, -1); } FILE* fin = fopen(argv[1], "r"); if (!fin) { exit_with_message("Error opening input", 3, -1); } FILE* fout = fopen(argv[2], "r"); if (!fout) { fclose(fin); exit_with_message("Can't open output", 2, -1); } FILE* fans = fopen(argv[3], "r"); if (!fans) { fclose(fin); fclose(fout); exit_with_message("Error opening answer", 3, -1); } char line1[1024], line2[1024]; int line_num = 0; char *ret1, *ret2; while (1) { ret1 = fgets(line1, sizeof(line1), fout); ret2 = fgets(line2, sizeof(line2), fans); line_num++; if (ret1 && ret2) { // Remove trailing newlines for consistent comparison line1[strcspn(line1, "\r\n")] = 0; line2[strcspn(line2, "\r\n")] = 0; if (strcmp(line1, line2) != 0) { exit_with_message("WA", 1, line_num); } } else { // Check if one file has more lines than the other if (ret1 && !ret2) { exit_with_message("Extra lines", 2, line_num); } if (!ret1 && ret2) { exit_with_message("Too few lines", 2, line_num); } break; } } fclose(fin); fclose(fout); fclose(fans); exit_with_message("", 0, -1); return 0; }