【发布时间】:2017-02-02 20:59:31
【问题描述】:
我正在处理一个类分配,需要一些关于动态分配数组的帮助。我正在使用 file_size 尝试从 3 个文件中提取文件大小以将数组分配给该大小,然后我需要写入数组中的数据并对其进行排序。我现在的问题是数组的大小;现在我的输出(忽略排序)是:
1
3
7
9
0
0
0
0
2
4
8
0
0
0
5
6
10
0
0
0
0
0
0
如您所见,它被额外的 0 填充。以下是输入文件:
输入文件1:
1
3
7
9
输入文件2:
2
4
8
输入文件3:
5
6
10
0
我需要一些帮助来弄清楚这是怎么回事以及问题出在哪里。我想摆脱那些额外的 0,我什至不确定它们来自哪里。排序方面的帮助也将不胜感激。
文件大小:
long file_size(FILE *inputFile)
{
if(inputFile == NULL)
return -1;
long pos = ftell(inputFile);
fseek(inputFile, 0, SEEK_END);
long size = ftell(inputFile);
fseek(inputFile, pos, SEEK_SET);
return size;
}
主要:
int main(void)
{
FILE *file0 = fopen("list0.txt", "r");
FILE *file1 = fopen("list1.txt", "r");
FILE *file2 = fopen("list2.txt", "r");
FILE *output = fopen("hw3.out", "w");
long size0 = file_size(file0);
long size1 = file_size(file1);
long size2 = file_size(file2);
long totalSize = size0 + size1 + size2;
int *numbers = malloc(totalSize * sizeof(int));
int i;
int index = 0;
for(i = 0; i < file_size(file0); i++)
{
if(!feof(file0))
{
fscanf(file0, "%i", &numbers[index]);
index++;
}
else
break;
}
for(i = 0; i < file_size(file1); i++)
{
if(!feof(file1))
{
fscanf(file1, "%i", &numbers[index]);
index++;
}
else
break;
}
for(i = 0; i < file_size(file2); i++)
{
if(!feof(file2))
{
fscanf(file2, "%i", &numbers[index]);
index++;
}
else
break;
}
for(i = 0; i < totalSize; i++)
{
fprintf(output, "%i\n", numbers[i]);
}
fclose(file0);
fclose(file1);
fclose(file2);
fclose(output);
free(numbers);
return 0;
}
【问题讨论】:
-
不相关,但是您已经使用函数捕获了一次文件大小,实际上不需要为每个循环再次调用该函数,只需使用
size0、size1和size2
标签: c arrays sorting dynamic file-io