我只是想得到一组有序的数字(虽然我发布的代码不是我要使用的方法,但我确实需要将输出写入二进制文件,就像代码中所做的那样)。
一切正常,除了“ordenar”的最后一次迭代:当我在订购后再次打印数字时,除了最后一行之外的所有东西都是有序的,我已经验证了 ordenar 正确完成,并且fwrite()
在最后一次迭代中是返回值 10,但似乎它没有写入最后一个输出。
代码是:
#define _CRT_SECURE_NO_DEPRECATE
#define SIZE 10
#define MAX 10
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int numbers[SIZE];
int genera_numeros() {
unsigned long i, j;
FILE *file;
file = fopen("number.dat", "wb");
if (!file) {
perror("fopen");
return 1;
}
srand(time(0));
for (i = 0; i < MAX; i++) {
for (j = 0; j < SIZE; j++) {
numbers[j] = rand()%1000;
printf("%i ", numbers[j]);
}
fwrite(numbers, sizeof(int), SIZE, file);
printf("\n");
}
fclose(file);
return 0;
}
int imprime_numeros() {
unsigned long i, j;
int numbers[SIZE];
FILE *file;
file = fopen("number.dat", "rb");
if (!file) {
perror("fopen");
return 1;
}
for (i = 0; i < MAX; i++) {
fread(numbers, sizeof(int), SIZE, file);
for (j = 0; j < SIZE; j++) {
printf("%i ",numbers[j]);
}
printf("\n");
}
fclose(file);
return 0;
}
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int ordenar(FILE* file, long int num_bloque)
{
int byte=0, written=0;
fseek(file, num_bloque * sizeof(int) * SIZE, SEEK_SET);
fread(numbers, sizeof(int), SIZE, file);
qsort (numbers, SIZE, sizeof(int), compare);
fseek(file, num_bloque * sizeof(int) * SIZE, SEEK_SET);
byte=ftell(file);
written=fwrite(numbers, sizeof(int), SIZE, file);
return 0;
}
int main(int argc, char* argv[]) {
FILE *file;
file = fopen("number.dat", "rb+");
long int i;
genera_numeros();
printf("\n\n Los numeros son:\n\n");
imprime_numeros();
printf("\n\n Ordenando...");
for (i=0; i<MAX; i++)
{
ordenar(file, i);
}
printf("\n\n Los numeros son:\n\n");
imprime_numeros();
printf("\n");
fclose(file);
system("PAUSE");
return 0;
}