#include <stdio.h>
#include <string.h>
#define MAX_LINE_LENGTH 1024
void check_files(const char *bom_file, const char *user_file) {
FILE *bom, *user;
char bom_line[MAX_LINE_LENGTH], user_line[MAX_LINE_LENGTH];
int line_number = 1;
// เปิดไฟล์ BOM และไฟล์ที่ผู้ใช้เขียนขึ้น
bom
= fopen(bom_file
, "r"); if (bom == NULL) {
printf("ไม่พบไฟล์ BOM: %s\n", bom_file
); return;
}
user
= fopen(user_file
, "r"); if (user == NULL) {
printf("ไม่พบไฟล์ที่ผู้ใช้เขียนขึ้น: %s\n", user_file
); return;
}
// อ่านบรรทัดทีละบรรทัดและตรวจสอบความถูกต้อง
while (fgets(bom_line
, MAX_LINE_LENGTH
, bom
) != NULL
&& fgets(user_line
, MAX_LINE_LENGTH
, user
) != NULL
) { // ตัดเครื่องหมาย newline ออกจากท้ายบรรทัด
bom_line
[strcspn(bom_line
, "\n")] = '\0'; user_line
[strcspn(user_line
, "\n")] = '\0';
// เปรียบเทียบบรรทัดจากไฟล์ BOM และไฟล์ที่ผู้ใช้เขียนขึ้น
if (strcmp(bom_line
, user_line
) != 0) { printf("บรรทัดที่ %d ไม่ถูกต้อง โปรดตรวจสอบ\n", line_number
); }
line_number++;
}
// ตรวจสอบหากจำนวนบรรทัดไม่ตรงกัน
if (fgets(bom_line
, MAX_LINE_LENGTH
, bom
) != NULL
|| fgets(user_line
, MAX_LINE_LENGTH
, user
) != NULL
) { printf("จำนวนบรรทัดในไฟล์ไม่เท่ากัน!\n"); }
// ปิดไฟล์
}
int main() {
const char *bom_file = "bom_file.txt";
const char *user_file = "user_file.txt";
// เรียกฟังก์ชันเพื่อเปรียบเทียบไฟล์
check_files(bom_file, user_file);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgTUFYX0xJTkVfTEVOR1RIIDEwMjQKCnZvaWQgY2hlY2tfZmlsZXMoY29uc3QgY2hhciAqYm9tX2ZpbGUsIGNvbnN0IGNoYXIgKnVzZXJfZmlsZSkgewogICAgRklMRSAqYm9tLCAqdXNlcjsKICAgIGNoYXIgYm9tX2xpbmVbTUFYX0xJTkVfTEVOR1RIXSwgdXNlcl9saW5lW01BWF9MSU5FX0xFTkdUSF07CiAgICBpbnQgbGluZV9udW1iZXIgPSAxOwoKICAgIC8vIOC5gOC4m+C4tOC4lOC5hOC4n+C4peC5jCBCT00g4LmB4Lil4Liw4LmE4Lif4Lil4LmM4LiX4Li14LmI4Lic4Li54LmJ4LmD4LiK4LmJ4LmA4LiC4Li14Lii4LiZ4LiC4Li24LmJ4LiZCiAgICBib20gPSBmb3Blbihib21fZmlsZSwgInIiKTsKICAgIGlmIChib20gPT0gTlVMTCkgewogICAgICAgIHByaW50Zigi4LmE4Lih4LmI4Lie4Lia4LmE4Lif4Lil4LmMIEJPTTogJXNcbiIsIGJvbV9maWxlKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgdXNlciA9IGZvcGVuKHVzZXJfZmlsZSwgInIiKTsKICAgIGlmICh1c2VyID09IE5VTEwpIHsKICAgICAgICBwcmludGYoIuC5hOC4oeC5iOC4nuC4muC5hOC4n+C4peC5jOC4l+C4teC5iOC4nOC4ueC5ieC5g+C4iuC5ieC5gOC4guC4teC4ouC4meC4guC4tuC5ieC4mTogJXNcbiIsIHVzZXJfZmlsZSk7CiAgICAgICAgZmNsb3NlKGJvbSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIOC4reC5iOC4suC4meC4muC4o+C4o+C4l+C4seC4lOC4l+C4teC4peC4sOC4muC4o+C4o+C4l+C4seC4lOC5geC4peC4sOC4leC4o+C4p+C4iOC4quC4reC4muC4hOC4p+C4suC4oeC4luC4ueC4geC4leC5ieC4reC4hwogICAgd2hpbGUgKGZnZXRzKGJvbV9saW5lLCBNQVhfTElORV9MRU5HVEgsIGJvbSkgIT0gTlVMTCAmJiBmZ2V0cyh1c2VyX2xpbmUsIE1BWF9MSU5FX0xFTkdUSCwgdXNlcikgIT0gTlVMTCkgewogICAgICAgIC8vIOC4leC4seC4lOC5gOC4hOC4o+C4t+C5iOC4reC4h+C4q+C4oeC4suC4oiBuZXdsaW5lIOC4reC4reC4geC4iOC4suC4geC4l+C5ieC4suC4ouC4muC4o+C4o+C4l+C4seC4lAogICAgICAgIGJvbV9saW5lW3N0cmNzcG4oYm9tX2xpbmUsICJcbiIpXSA9ICdcMCc7CiAgICAgICAgdXNlcl9saW5lW3N0cmNzcG4odXNlcl9saW5lLCAiXG4iKV0gPSAnXDAnOwoKICAgICAgICAvLyDguYDguJvguKPguLXguKLguJrguYDguJfguLXguKLguJrguJrguKPguKPguJfguLHguJTguIjguLLguIHguYTguJ/guKXguYwgQk9NIOC5geC4peC4sOC5hOC4n+C4peC5jOC4l+C4teC5iOC4nOC4ueC5ieC5g+C4iuC5ieC5gOC4guC4teC4ouC4meC4guC4tuC5ieC4mQogICAgICAgIGlmIChzdHJjbXAoYm9tX2xpbmUsIHVzZXJfbGluZSkgIT0gMCkgewogICAgICAgICAgICBwcmludGYoIuC4muC4o+C4o+C4l+C4seC4lOC4l+C4teC5iCAlZCDguYTguKHguYjguJbguLnguIHguJXguYnguK3guIcg4LmC4Lib4Lij4LiU4LiV4Lij4Lin4LiI4Liq4Lit4LiaXG4iLCBsaW5lX251bWJlcik7CiAgICAgICAgfQoKICAgICAgICBsaW5lX251bWJlcisrOwogICAgfQoKICAgIC8vIOC4leC4o+C4p+C4iOC4quC4reC4muC4q+C4suC4geC4iOC4s+C4meC4p+C4meC4muC4o+C4o+C4l+C4seC4lOC5hOC4oeC5iOC4leC4o+C4h+C4geC4seC4mQogICAgaWYgKGZnZXRzKGJvbV9saW5lLCBNQVhfTElORV9MRU5HVEgsIGJvbSkgIT0gTlVMTCB8fCBmZ2V0cyh1c2VyX2xpbmUsIE1BWF9MSU5FX0xFTkdUSCwgdXNlcikgIT0gTlVMTCkgewogICAgICAgIHByaW50Zigi4LiI4Liz4LiZ4Lin4LiZ4Lia4Lij4Lij4LiX4Lix4LiU4LmD4LiZ4LmE4Lif4Lil4LmM4LmE4Lih4LmI4LmA4LiX4LmI4Liy4LiB4Lix4LiZIVxuIik7CiAgICB9CgogICAgLy8g4Lib4Li04LiU4LmE4Lif4Lil4LmMCiAgICBmY2xvc2UoYm9tKTsKICAgIGZjbG9zZSh1c2VyKTsKfQoKaW50IG1haW4oKSB7CiAgICBjb25zdCBjaGFyICpib21fZmlsZSA9ICJib21fZmlsZS50eHQiOwogICAgY29uc3QgY2hhciAqdXNlcl9maWxlID0gInVzZXJfZmlsZS50eHQiOwoKICAgIC8vIOC5gOC4o+C4teC4ouC4geC4n+C4seC4h+C4geC5jOC4iuC4seC4meC5gOC4nuC4t+C5iOC4reC5gOC4m+C4o+C4teC4ouC4muC5gOC4l+C4teC4ouC4muC5hOC4n+C4peC5jAogICAgY2hlY2tfZmlsZXMoYm9tX2ZpbGUsIHVzZXJfZmlsZSk7CgogICAgcmV0dXJuIDA7Cn0=