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