C编程文件的问题,
一个文件中有以下信息1201 0103 小李
1203 0102 小王
1202 0105 我
1201 0104 你
编程从文件中读信息,然后排序
排序完输出为:
1201 0103 小李
1201 0104 你
1202 0105 我
1203 0102 小王
FILE *p; p=fopen("D:\\1.txt","r"); if(p==NULL) return 0; char a[4][20],b[20]; int i,t,n[4],j; for(i=0;i<4;i++) {fscanf(p,"%d ",&n[i]); fgets(a[i],18,p); } for(i=0;i<4;i++) for(j=i;j<4;j++) if(n[i]>n[j]) {t=n[i];n[i]=n[j];n[j]=t; strcpy(b,a[i]); strcpy(a[i],a[j]); strcpy(a[j],b);} for(i=0;i<4;i++) {printf("%d ",n[i]); printf("%s",a[i]); }
#include <stdio.h> #include <stdlib.h> #include <string.h> #define INIT_ROWS 100 #define INCREMENT 50 typedef struct { unsigned num1; unsigned num2; char name[9]; } DATA, * PDATA; void insertion_sort(void * data, unsigned num, unsigned size, int (* compare)(const void *, const void *)) { int i, j, k; void * temp = malloc(size); for(i = 1; i < num; i++) { for(j = 0; j < i; j++) if(compare(data + j * size, data + i * size) > 0) break; memcpy(temp, data + i * size, size); for(k = i; k > j; k--) memcpy(data + k * size, data + (k - 1) * size, size); memcpy(data + j * size, temp, size); } free(temp); } int compare1(const void * p1, const void * p2) { unsigned var1 = ((PDATA)(p1))->num1, var2 = ((PDATA)(p2))->num1; if(var1 == var2) return 0; if(var1 > var2) return 1; return -1; } int compare2(const void * p1, const void * p2) { unsigned var1 = ((PDATA)(p1))->num2, var2 = ((PDATA)(p2))->num2; if(var1 == var2) return 0; if(var1 > var2) return 1; return -1; } int main(void) { FILE * fp_in = NULL; FILE * fp_out = NULL; char in_file_name[128]; char out_file_name[128]; PDATA pdatas = (PDATA)malloc(sizeof(DATA) * INIT_ROWS); unsigned rows = 0; unsigned size = INIT_ROWS; unsigned i; printf("请输入需要排序的源文件名:"); fflush(stdout); scanf("%s", in_file_name); printf("请输入排序后存放的文件名:"); fflush(stdout); scanf("%s", out_file_name); if((fp_in = fopen(in_file_name, "r")) == NULL) { printf("%s 打开失败,程序将结束!\n"); exit(1); } if((fp_out = fopen(out_file_name, "w")) == NULL) { printf("%s 打开失败,程序将结束!\n"); exit(1); } while(fscanf(fp_in, "%u%u%s", &pdatas[rows].num1, &pdatas[rows].num2, pdatas[rows].name) != EOF) { if(++rows == size) { pdatas = realloc(pdatas, size += INCREMENT); if(pdatas == NULL) exit(1); // ....... } } insertion_sort(pdatas, rows, sizeof(DATA), compare2); insertion_sort(pdatas, rows, sizeof(DATA), compare1); for(i = 0; i < rows; i++) fprintf(fp_out, "%u %u %s\n", pdatas[i].num1, pdatas[i].num2, pdatas[i].name); fclose(fp_in); fclose(fp_out); return 0; }