假定你用MS VC++ 6.0 編譯器,不是TC. 假定 第1、2、3、4位元組表示分數, 是 int 型 檔名 abc.txt 如果還沒有2進位制檔案,則可以自己建1個,假定資料為: // int mark[1000]={60,70,80,95,30}; // char m[1000][25]={"zhang","wang","Li","Zhao","Fang"}; 開啟寫入: // fin=fopen(namein,"wb+"); // for (i=0;i<n;i++) { fwrite(&mark[i],4,1,fin);fwrite(m[i],25,1,fin);} // fclose(fin); 再執行。 下面沒有使用“結構”,分數存 mark[], 人名存 m[][25]. #include <stdio.h> int main() { FILE *fin; char namein[80]="abc.txt"; int mark[1000],t; char m[1000][25],ts[25]; int i,j,n=0; fin=fopen(namein,"rb+"); if (!fin){ printf("open %s error\n",namein); } while(1){ fread(&mark[n],4,1,fin); if (feof(fin)) break; fread(&m[n],25,1,fin); if (feof(fin)) break; n++; } printf("I read %d data\n",n); for (i=0;i<n;i++) printf("%d %s\n",mark[i],m[i]); for (i=0;i<n-1;i++) for (j=i+1;j<n;j++){ if (mark[j]>mark[i]){ t = mark[i];mark[i]=mark[j];mark[j]=t; strcpy(ts,m[i]); strcpy(m[i],m[j]);strcpy(m[j],ts); } } rewind(fin); for (i=0;i<n;i++) { fwrite(&mark[i],4,1,fin);fwrite(m[i],25,1,fin);} fclose(fin); return 0; }
假定你用MS VC++ 6.0 編譯器,不是TC. 假定 第1、2、3、4位元組表示分數, 是 int 型 檔名 abc.txt 如果還沒有2進位制檔案,則可以自己建1個,假定資料為: // int mark[1000]={60,70,80,95,30}; // char m[1000][25]={"zhang","wang","Li","Zhao","Fang"}; 開啟寫入: // fin=fopen(namein,"wb+"); // for (i=0;i<n;i++) { fwrite(&mark[i],4,1,fin);fwrite(m[i],25,1,fin);} // fclose(fin); 再執行。 下面沒有使用“結構”,分數存 mark[], 人名存 m[][25]. #include <stdio.h> int main() { FILE *fin; char namein[80]="abc.txt"; int mark[1000],t; char m[1000][25],ts[25]; int i,j,n=0; fin=fopen(namein,"rb+"); if (!fin){ printf("open %s error\n",namein); } while(1){ fread(&mark[n],4,1,fin); if (feof(fin)) break; fread(&m[n],25,1,fin); if (feof(fin)) break; n++; } printf("I read %d data\n",n); for (i=0;i<n;i++) printf("%d %s\n",mark[i],m[i]); for (i=0;i<n-1;i++) for (j=i+1;j<n;j++){ if (mark[j]>mark[i]){ t = mark[i];mark[i]=mark[j];mark[j]=t; strcpy(ts,m[i]); strcpy(m[i],m[j]);strcpy(m[j],ts); } } rewind(fin); for (i=0;i<n;i++) { fwrite(&mark[i],4,1,fin);fwrite(m[i],25,1,fin);} fclose(fin); return 0; }