ООП 24 / std.strs

ru en cn

с начала прошло: 70 д. 05:47
страница обновлена: 2025-12-15 04:28:47.95999+00

std.strs: strs.c

#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;
}
Дальневосточный федеральный университет