Я работаю над назначением класса и нуждаюсь в некоторой помощи с динамически распределенными массивами. Я использую 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
Как вы можете видеть, что в настоящее время дополняются дополнительной 0s. Вот входные файлы:
inputFile1:
1
3
7
9
inputFile2:
2
4
8
inputFile3:
5
6
10
0
Мне нужна помощь выяснить, что происходит с этим и где проблема есть. Я хочу избавиться от этих лишних 0, и я даже не уверен, откуда они. Помощь с сортировкой также будет оценена.
file_size:
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' – yano