C语言比较两个文本文件,打印出它们第一个不相同的行。(每行不多于50个字符) 【输入形式】 无输入,两个文件名为file1.txt,file2.txt,可直接读取 【输出形式】 不相同的两行 【样例输入】 文件1: aaaaaaaaaa bbbbbbbbb ccccccccccc ddddddddd 文件2: aaaaaaaaaa bbbbbbbbb cccc ddddddddd 【样例输出】 ccccccccccc cccc
时间: 2023-11-29 19:04:56 浏览: 137
以下是C语言实现此功能的代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LINE_LEN 50
int main() {
FILE *f1 = fopen("file1.txt", "r");
FILE *f2 = fopen("file2.txt", "r");
char line1[MAX_LINE_LEN + 1] = "", line2[MAX_LINE_LEN + 1] = "";
int line_num = 0;
while (fgets(line1, MAX_LINE_LEN + 1, f1) && fgets(line2, MAX_LINE_LEN + 1, f2)) {
line_num++;
if (strcmp(line1, line2) != 0) {
printf("%s", line1);
printf("%s", line2);
break;
}
}
if (feof(f1) && !feof(f2))
printf("file2.txt has more lines than file1.txt\n");
else if (!feof(f1) && feof(f2))
printf("file1.txt has more lines than file2.txt\n");
fclose(f1);
fclose(f2);
return 0;
}
```
解释一下代码:
- `FILE *f1 = fopen("file1.txt", "r");` 打开文件 `file1.txt` 并将其赋值给指针 `f1`。
- `FILE *f2 = fopen("file2.txt", "r");` 打开文件 `file2.txt` 并将其赋值给指针 `f2`。
- `char line1[MAX_LINE_LEN + 1] = "", line2[MAX_LINE_LEN + 1] = "";` 定义两个字符数组 `line1` 和 `line2`,分别用于存储两个文件的一行。
- `int line_num = 0;` 定义一个整型变量 `line_num`,用于计算当前比较的是两个文件的第几行。
- `while (fgets(line1, MAX_LINE_LEN + 1, f1) && fgets(line2, MAX_LINE_LEN + 1, f2)) {` 使用 `fgets` 函数逐行读取两个文件的内容,并将每行内容存储到相应的字符数组中。
- `line_num++;` 计算当前比较的是两个文件的第几行。
- `if (strcmp(line1, line2) != 0) {` 如果两行不相同,则输出这两行并结束循环。
- `printf("%s", line1);` 输出第一个不相同的行。
- `printf("%s", line2);` 输出第二个不相同的行。
- `break;` 结束循环。
- `if (feof(f1) && !feof(f2))` 如果 `file1.txt` 结束了而 `file2.txt` 没有结束,则说明 `file2.txt` 有更多的行。
- `else if (!feof(f1) && feof(f2))` 如果 `file2.txt` 结束了而 `file1.txt` 没有结束,则说明 `file1.txt` 有更多的行。
- `fclose(f1);` 关闭文件 `file1.txt`。
- `fclose(f2);` 关闭文件 `file2.txt`。
需要注意的一点是,C语言中字符串的结尾是以 `\0`(空字符) 结束的,而不是以 `\n`(换行符) 结束的,因此在比较字符串时不需要去除行末的换行符。
阅读全文