在C程序中,将两个文件分成一行输出



我正在尝试制作一个主函数,该函数采用命令行参数,允许该程序打开两个文件(命令行上提供的路径(,并将两个文件一次一行合并为一个输出。提供的第一个文件是文本行。删除所有尾随空白、制表符和新行。第二个文件是一个数字列表,当打印到输出时,每个文件都必须添加一个数字。另外,这两列应该用制表符分隔。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
const int MAXLEN = 4096;
const int MAXLINES = 10;
int main(int argc, char *argv[]) {
  char buffer[MAXLEN];
  char buffer2[MAXLEN];
  FILE *fp = fopen(argv[1], "r");
  FILE *fp2 = fopen(argv[2], "r");
  if (!fp || !fp2) {
    perror ("Not Found");
    exit (EXIT_FAILURE);
  }
  int n = 0;
  while((n < MAXLINES) && (fgets (buffer, sizeof (buffer), fp)) && (fgets(buffer2, sizeof (buffer2), fp2))) {
    printf("%st%s", buffer, buffer2);
    n++;    
    }
  }
  fclose(fp);
  fclose(fp2);
  return 0;
}

例如输入和输出:

./c2 test/c2-testa test/c2-testb
  Test A  11
  Test B  51
  Test C  91
  Test D  26
  Test E  17
  Test F  76

这是我在gcc命令后收到的:

c2:
c2.c:53:7: warning: data definition has no type or storage class
       fclose(fp);
       ^~~~~~
c2.c:53:7: warning: type defaults to ‘int’ in declaration of ‘fclose’ [-Wimplicit-int]
c2.c:53:7: warning: parameter names (without types) in function declaration
c2.c:54:7: warning: data definition has no type or storage class
       fclose(fc2);
       ^~~~~~
c2.c:54:7: warning: type defaults to ‘int’ in declaration of ‘fclose’ [-Wimplicit-int]
c2.c:54:7: warning: parameter names (without types) in function declaration
c2.c:56:7: error: expected identifier or ‘(’ before ‘return’
       return 0;
       ^~~~~~
c2.c:58:7: error: expected identifier or ‘(’ before ‘}’ token
       }
       ^
make: *** [Makefile:31: c2.o] Error 1

您所做的是为第一个文件的每一行打印第二个文件中的所有行(嵌套循环(。你的循环应该是这样的:

  int n = 0;
  while((n < MAXLINES) && (fgets (buffer, sizeof (buffer), fp)) && (fgets(buffer2, sizeof (buffer2), fp2))) {
    printf("%st%s", buffer, buffer2);
    n++;    
  }

请注意,这并不考虑"删除尾部空白"。你可能需要做一些额外的处理。

此外,打开文件后的条件应该是if(!fp || !fp2),以确保两个文件都可以打开!!

最新更新