对于作业,我必须逐行将文本从2个文件输入到第3个文件中。因此,文件1第1行将是文件3第1行,文件2第3行将是文件3第2行。我已经尝试过此但似乎无法从每个文件中获取备用的行。我只能分别从每个文件中获取行。请帮助提出任何建议。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *file1, *file2, *file3;
char line [1000]; /* or other suitable maximum line size */
// check to make sure that all the file names are entered
if (argc != 4) {
perror("Error: ");
printf("Not enough files were entered!\n");
exit(0);
}
file1 = fopen(argv[1],"r");;
file2 = fopen(argv[2],"r");
file3 = fopen(argv[3],"w");
// check whether the file has been opened successfully
if (file1 == NULL)
{
perror("Error: ");
printf("Cannot open file1 %s!\n", argv[1]);
exit(-1);
}
// check whether the file has been opened successfully
if (file2 == NULL)
{
perror("Error: ");
printf("Cannot open file2 %s!\n", argv[2]);
exit(0);
}
// check whether the file has been opened successfully
if (file3 == NULL)
{
perror("Error: ");
printf("Cannot open file3 %s!\n", argv[3]);
exit(0);
}
int count = 0;
while (1)
{
if(fgets(line, sizeof line, file1) != NULL)
{
count+=1;
fprintf(file3, line);
}
else
{
break;
}
if(fgets(line, sizeof line, file2) != NULL)
{
count++;
fprintf(file3, line);
}
else
{
break;
}
}
fclose (file1);
fclose (file2);
fclose (file3);
}
答案 0 :(得分:0)
fprintf(FILE *, const char *format, ...)
期望格式作为第二个参数。
如果遇到fprintf(file3, line);
,使用line
将'%'
包含%
或至少缺少"%%"
时,将调用未定义的行为(UB)。
使用fputs()
// fprintf(file3, line);
fputs(line, file3);
高级编码的其他问题:
如果源文件包含空字符,则使用fgets()
是不够的,因为它不报告读取的长度。其他方法包括使用fgetc()
,fread()
或非标准C getline()
。
如果输入文件没有以'\n'
结尾,则该rump行可能看起来像是从另一个文件读取的行的预先修复。
正如OP所指出的,大约1000+的线路长度是个问题。
源文件的行尾,如果它们与代码不匹配,对行结尾的理解可能会导致问题。