У меня есть вопрос об этом алгоритме, который объединяет 2 отсортированных входных двоичных файла в 1, новый двоичный файл.Структура представляет собой целое число:
typedef struct intero_s
{
int dato;
} intero_t;
Чтение, запись и сортировка 2 входных файлов не проблема, вместо этого иногда объединение файлов не работает.
void fusioneNaturale(const char *input1, const char *input2, const char *output)
{
FILE *finput1 = fopen(input1, "rb");
if(finput1 == NULL) {
printf("Impossibile aprire il file!\n");
exit(1);
}
FILE *finput2 = fopen(input2, "rb");
if(finput2 == NULL) {
printf("Impossibile aprire il file!\n");
exit(1);
}
FILE *foutput = fopen(output, "wb");
intero_t recordTemp1, recordTemp2;
bool prosegui = true;
while(prosegui) {
fread(&recordTemp1, sizeof(recordTemp1), 1, finput1);
fread(&recordTemp2, sizeof(recordTemp2), 1, finput2);
if(recordTemp1.dato < recordTemp2.dato) {
fwrite(&recordTemp1, sizeof(recordTemp1), 1, foutput);
fseek(finput2, sizeof(recordTemp2) * (-1), SEEK_CUR);
}
else {
fwrite(&recordTemp2, sizeof(recordTemp2), 1, foutput);
fseek(finput1, sizeof(recordTemp1) * (-1), SEEK_CUR);
}
if(feof(finput1)) {
fseek(finput2, sizeof(recordTemp2), SEEK_CUR);
while(fread(&recordTemp2, sizeof(recordTemp2), 1, finput2)) {
fwrite(&recordTemp2, sizeof(recordTemp2), 1, foutput);
}
prosegui = false;
}
if(feof(finput2)) {
fseek(finput1, sizeof(recordTemp1), SEEK_CUR);
while(fread(&recordTemp1, sizeof(recordTemp1), 1, finput1)) {
fwrite(&recordTemp1, sizeof(recordTemp1), 1, foutput);
}
prosegui = false;
}
}
fclose(finput1);
fclose(finput2);
fclose(foutput);
}
Параметры - это имя первого файла, имя второго файла и имя третьего файла.Например, если 2 входных файла содержат соответственно {1;3;4;7;9} и {2;4;5;6;9;9} выходной файл является правильным, вместо этого, если 2 входных файла содержат соответственно {3;6} и {0;2;4;6;7;9} выходной файл неверен.