我有 8 个文件(文件%d-%d.dat),每个文件有 2 列和 1000 行:
File1-1 File1-2 File1-3 File1-4
x1a y1a x1b y1b x1c y1c x1d y1d
x2a y2a x2b y2b x2c y2c x2d y2d
x3a y3a x3b y3b x3c y3c x3d y3d
. . . .
. . . .
File2-1 File2-2 File2-3 File2-4
x1e y1e x1f y1f x1g y1g x1h y1h
x2e y2e x2f y2f x2g y2g x2h y2h
x3e y3e x3f y3f x3g y3g x3h y3h
. . . .
. . . .
我想逐行对每个文件File%d-1的第二列求和,并将求和结果写入一个新文件:Filesum1;文件%d-2 等也是如此,即
Filesum1 Filesum2 and so on ..
x1a+x1e y1a+y1e x1b+x1f y1b+y1f .
x2a+x3e y2a+y2e x2b+x2f y2b+y2f .
. . . .
. . . . .
我创建了 4 个新文件:
#include <stdio.h>
int main(void)
{
int numfiles=4;
int numfileread=8;
int i,yy1, yy2, x0, x1;
FILE *files[numfiles];
FILE *f[numfileread];
for (int n = 0; n < 4; n++)
{
char filename[4];
sprintf(filename, "filesum%d.dat", n);
files[n] = fopen(filename, "w");
}
然后我尝试了这个,但它不能正常工作:
for (int n = 0; n < 4; n++)
{
yy1=0;
yy2=0;
for(int r=1;r<4;r++)
{
char file[8];
sprintf(file, "file%d-%d.dat", r, n);
f[i] = fopen(file, "r");
fscanf(f," %d %d",&x0,&x1);
yy1+=x0;
yy2+=x1;
fclose(f);
i++;
}
fprintf(files,"%d %d\n",yy1, yy2);
fclose(files);
}
如果我有相同的作业,但要读取 50 个文件:
readFile1, readFile2, readFile3, ......., readFile50
如何更改代码?
最佳答案
有多个问题:
这个循环只会运行 3 次,我认为您打算让它运行 4 次。
for(int r=1;r<4;r++)
字符数组
file
没有足够的空间来容纳字符串“file%d-%d.dat”
fclose(f);
需要更改为fclose(f[i]);
您需要为
文件
指定索引。fprintf(files,"%d %d\n",yy1, yy2);
这就是我想出来的。你可以尝试一下。
#include <stdio.h>
int main(){
FILE *readFile1;
FILE *readFile2;
FILE *writeFile;
char inFile1[32] = {0};
char inFile2[32] = {0};
char sumFile[32] = {0};
int i,xa,xb,ya,yb;
int ret1;ret2;
for(i=0;i<4;i++){
sprintf(inFile1, "File1-%d", i);
sprintf(inFile2, "File2-%d", i);
sprintf(sumFile, "sumFile%d", i);
readFile1 = fopen(inFile1, "r");
readFile2 = fopen(inFile2, "r");
writeFile = fopen(sumFile, "w");
while(1){
ret1 = fscanf(readFile1, "%d %d", &xa, &ya);
ret2 = fscanf(readFile2, "%d %d", &xb, &yb);
if( (ret1 != 2) || (ret2 != 2) )
break;
fprintf(writeFile, "%d %d", xa+xb, ya+yb);
}
fclose(readFile1);
fclose(readFile2);
fclose(writeFile);
}
return 1;
}
关于c - 如何在 C 中对不同文件的列求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54763423/