1. 程式人生 > >文字檔案、二進位制檔案操作01(C)

文字檔案、二進位制檔案操作01(C)

現有一個二進位制檔案 E81_data.bin,其中儲存了 20 個整數, 請將檔案儲存至 C 盤根目錄下的 cdata 資料夾。 編寫程式
完成如下功能:
(1) 編寫一個函式, 讀取出這些整數。
(2) 編寫一個函式,對所有整數按照從小到大排序。
(3) 編寫一個函式, 將排序後的所有整數寫到 C 盤根目錄下的 cdata 資料夾中的文字檔案 E81_result.txt 中,每個整數佔一行。
(4) 編寫測試程式。
 

/*=========================================================================
*學號:1527403059
*作業:E81
*功能:(1) 編寫一個函式,讀取出這些整數。 
       (2) 編寫一個函式,對所有整數按照從小到大排序。 
       (3) 編寫一個函式,將排序後的所有整數寫到 C 盤根目錄下的 cdata 資料夾
           中的文字檔案 E81_result.txt 中,每個整數佔一行。 
       (4) 編寫測試程式。 
*作者:陸胤任
*日期:2016.1.3
*=========================================================================*/
#include<stdio.h>
#include<stdlib.h>

struct NumberNode                                                                //結構體
{
	int num;
};

/*function define
*@brief:讀取出這些整數
*@param:*Filename:檔名
        NumberNode *node:結構體陣列首元素地址名
*@reval:void
*/
void ReadInfo(char *Filename,struct NumberNode *node)
{
	FILE *fp;                                                            //定義指向FILE型別檔案的指標變數
	int i;
	fp=fopen(Filename,"rb");                                             //開啟二進位制檔案
	if(NULL==fp)                                                         //檢查檔案是否開啟成功
	{
		printf("開啟檔案失敗!\n");
		exit(0);
	}
	for(i=0;i<20;i++)                                                    //二進位制方式讀取檔案
	{
		fread(&node[i],sizeof(struct NumberNode),1,fp);
	}
	fclose(fp);                                                           //關閉檔案
}

/*function define
*@brief:對所有整數按照從小到大排序。
*@param:struct NumberNode *node:結構體陣列首元素的地址
*@reval:void
*/
void Sort_NumberNode(struct NumberNode *node)
{
	int i,j,min;
	struct NumberNode temp;
	for(i=0;i<19;i++)                                                    //選擇排序
	{
		min=i;
		for(j=i+1;j<20;j++)
		{
			if(node[j].num<node[min].num)
			{
				min=j;
			}
		}
		if(min!=i)
		{
			temp=node[min];
			node[min]=node[i];
			node[i]=temp;
		}
	}
}

/*function define
*@brief:將排序後的所有整數寫到 C 盤根目錄下的 cdata 資料夾中的文字檔案 E81_result.txt 中,每個整數佔一行。
*@param:*Filename:檔名
        struct NumberNode *node:結構體陣列首元素的地址
*@reval:void
*/
void Save_sort_NumberNode(char *Filename,struct NumberNode *node)
{
	FILE *fp;
	int i;
	fp=fopen(Filename,"w");
	if(NULL==fp)                                                       //檢查是否開啟檔案失敗
	{
		printf("檔案開啟失敗!\n");
		exit(0);
	}
	for(i=0;i<20;i++)                                                  //二進位制方式寫入檔案
	{
		fprintf(fp,"%d",node[i].num);
		fprintf(fp,"\n");                                             //格式化輸入換行符
		printf("%d",node[i].num);                                     //在螢幕上輸出整數
		printf("\n");                                                 //在螢幕上輸出換行符
	}
}

int main()
{
	struct NumberNode node[20];                                        //定義結構體陣列
	ReadInfo("C:\\cdata\\E81_data.bin",node);                          //呼叫函式
	Sort_NumberNode(node);                                             //呼叫函式
	printf("排序後的整數為:\n");
	Save_sort_NumberNode("C:\\cdata\\E81_result.txt",node);            //呼叫函式
    return 0;
}