私はクラスの割り当てに取り組んでおり、動的に割り当てられた配列について助けが必要です。私は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が埋め込まれています。ここでは、入力ファイルは、次のとおりです。
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