编写一个c语言程序,交替合并两个文件a.txt和b.txt中的行,并将结果写入c.txt中。如果一个文件的行数少于另一个文件,那么大文件中剩余的行数应该逐行地复制到c.txt中。
时间: 2024-12-23 16:13:53 浏览: 10
在C语言中编写这样的程序,我们可以使用标准输入输出流以及`fgets`函数来逐行读取文件内容。下面是一个简单的示例,它首先检查文件大小,然后合并文件内容:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 100
// 函数用于合并两文件并保存至第三个文件
void merge_files(char *file_a, char *file_b, char *output_file) {
FILE *fp_a = fopen(file_a, "r");
FILE *fp_b = fopen(file_b, "r");
FILE *fp_out = fopen(output_file, "w");
if (fp_a == NULL || fp_b == NULL || fp_out == NULL) {
perror("Error opening files");
exit(1);
}
// 计算每个文件需要读取的最大行数
int line_num_a = 0, line_num_b = 0;
fseek(fp_a, 0L, SEEK_END);
line_num_a = ftell(fp_a) / sizeof(char *);
rewind(fp_a);
fseek(fp_b, 0L, SEEK_END);
line_num_b = ftell(fp_b) / sizeof(char *);
rewind(fp_b);
// 交错合并行
int a_index = 0, b_index = 0;
while ((a_index < line_num_a && b_index < line_num_b)) {
char line_a[MAX_LINE_LENGTH], line_b[MAX_LINE_LENGTH];
// 读取当前文件的行
fgets(line_a, MAX_LINE_LENGTH, fp_a);
fgets(line_b, MAX_LINE_LENGTH, fp_b);
// 写入输出文件
fprintf(fp_out, "%s\n", a_index % 2 ? line_a : line_b);
a_index++;
b_index++;
}
// 如果其中一个文件还有剩余行,追加到输出文件
while (a_index < line_num_a) {
fgets(line_a, MAX_LINE_LENGTH, fp_a);
fprintf(fp_out, "%s\n", line_a);
a_index++;
}
while (b_index < line_num_b) {
fgets(line_b, MAX_LINE_LENGTH, fp_b);
fprintf(fp_out, "%s\n", line_b);
b_index++;
}
fclose(fp_a);
fclose(fp_b);
fclose(fp_out);
if (ferror(fp_out)) {
perror("Error writing to output file");
exit(1);
}
}
int main() {
const char* file_a = "a.txt";
const char* file_b = "b.txt";
const char* output_file = "c.txt";
merge_files(file_a, file_b, output_file);
printf("Files merged successfully into %s.\n", output_file);
return 0;
}
```
阅读全文