Bài toán
So sánh hai file văn bản, báo dòng và vị trí ký tự đầu tiên khác nhau, đồng thời đếm tổng số lỗi.
Thuật toán
Bước 1: Mở hai file với con trỏ ở đầu Bước 2: Đọc từng ký tự từ cả hai file Bước 3: So sánh ký tự. Nếu khác → in dòng, vị trí, tăng bộ đếm lỗi Bước 4: Xử lý ký tự xuống dòng (\n) để cập nhật số dòng, reset vị trí Bước 5: In tổng số lỗi
Mã nguồn C
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void compareFiles(FILE *file1, FILE *file2) {
char ch1 = getc(file1);
char ch2 = getc(file2);
int error = 0, pos = 0, line = 1;
while (ch1 != EOF && ch2 != EOF) {
pos++;
if (ch1 == '\n' && ch2 == '\n') {
line++;
pos = 0;
}
if (ch1 != ch2) {
error++;
printf("Dòng: %d \t Vị trí lỗi: %d\n", line, pos);
}
ch1 = getc(file1);
ch2 = getc(file2);
}
printf("Tổng lỗi: %d\n", error);
}
int main() {
FILE *file1 = fopen("file1.txt", "r");
FILE *file2 = fopen("file2.txt", "r");
if (file1 == NULL || file2 == NULL) {
printf("Lỗi: Không mở được file");
exit(0);
}
compareFiles(file1, file2);
fclose(file1);
fclose(file2);
return 0;
}
Ví dụ kết quả
File1: Hello! Welcome to tutorials Point File2: Hello! Welcome to turoials point Dòng: 2 Vị trí: 15 Tổng lỗi: 1