0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言_文件操作相關(guān)練習(xí)題

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-08-14 09:55 ? 次閱讀

當(dāng)前文章列出了4個(gè)文件編程相關(guān)的練習(xí)題。文件拷貝實(shí)現(xiàn)、 文件加密、學(xué)生管理系統(tǒng)鏈表模板(未添加文件操作)、學(xué)生管理系統(tǒng)模板(通過文件系統(tǒng)保存信息)、等4個(gè)例子。

1.1 文件拷貝實(shí)現(xiàn)

#include 
#include 
#include 
int main()
{
	/*1. 打開源文件*/
	FILE *file_src;
	FILE *file_new;
	unsigned char buff[1024];
	unsigned int cnt;

	file_src=fopen("D:/123.pdf","rb");
	if(file_src==NULL)
	{
		printf("源文件打開失敗!\n");
		return -1;
	}
	/*2. 創(chuàng)建新文件*/
	file_new=fopen("D:/456.pdf","wb");
	if(file_new==NULL)
	{
		printf("新文件創(chuàng)建失敗!\n");
		return -1;
	}
	/*3. 拷貝文件*/
	while(!feof(file_src))
	{
		cnt=fread(buff,1,1024,file_src);
		fwrite(buff,1,cnt,file_new);
	}
	/*4. 關(guān)閉文件*/
	fclose(file_new);
	fclose(file_src);
	printf("文件拷貝成功!\n");
	return 0;
}

1.2 文件加密

使用: 異或 ^
密碼類型: (1) 整型密碼 (2) 字符串密碼
比如: 銀行提款機(jī)的密碼、QQ密碼
加密代碼:

#include 
#include 
#include 
int main()
{
	/*1. 打開源文件*/
	FILE *file_src;
	FILE *file_new;
	unsigned char buff[1024];
	unsigned int cnt;
	unsigned int password=123456; //密碼數(shù)據(jù)
	unsigned int data;  //存放讀取的數(shù)據(jù)

	file_src=fopen("D:/123.pdf","rb");
	if(file_src==NULL)
	{
		printf("源文件打開失敗!\n");
		return -1;
	}
	/*2. 創(chuàng)建新文件*/
	file_new=fopen("D:/456.pdf","wb");
	if(file_new==NULL)
	{
		printf("新文件創(chuàng)建失敗!\n");
		return -1;
	}
	/*3. 文件加密*/
	while(!feof(file_src))
	{
		cnt=fread(&data,1,4,file_src);
		data=data^password;//文件數(shù)據(jù)加密
		fwrite(&data,1,cnt,file_new);
	}
	/*4. 關(guān)閉文件*/
	fclose(file_new);
	fclose(file_src);
	printf("文件加密成功!\n");
	return 0;
}

解密代碼:

?
#include 
#include 
#include 
int main()
{
	/*1. 打開源文件*/
	FILE *file_src;
	FILE *file_new;
	unsigned char buff[1024];
	unsigned int cnt;
	unsigned int password=123456; //密碼數(shù)據(jù)
	unsigned int data;  //存放讀取的數(shù)據(jù)

	file_src=fopen("D:/456.pdf","rb");
	if(file_src==NULL)
	{
		printf("源文件打開失敗!\n");
		return -1;
	}
	/*2. 創(chuàng)建新文件*/
	file_new=fopen("D:/789.pdf","wb");
	if(file_new==NULL)
	{
		printf("新文件創(chuàng)建失敗!\n");
		return -1;
	}
	/*3. 文件加密*/
	while(!feof(file_src))
	{
		cnt=fread(&data,1,4,file_src);
		data=data^password;//文件數(shù)據(jù)加密
		fwrite(&data,1,cnt,file_new);
	}
	/*4. 關(guān)閉文件*/
	fclose(file_new);
	fclose(file_src);
	printf("文件解密成功!\n");
	return 0;
}

1.3 學(xué)生管理系統(tǒng)鏈表模板(未添加文件操作)

#include 
#include 
#include 

//存放信息的結(jié)構(gòu)體
struct MyStruct
{
	char Name[50]; //存放姓名
	int Number;    //存放編號(hào)
	struct MyStruct *next; //存放下一個(gè)節(jié)點(diǎn)的地址
};

//鏈表相關(guān)的函數(shù)接口
struct MyStruct *ListHead=NULL; //鏈表頭
struct MyStruct *CreateListHead(struct MyStruct *head);
void AddrListInfo(struct MyStruct *head,struct MyStruct data);
void DeleteListInfo(struct MyStruct *head,int number);
void PrintListAllInfo(struct MyStruct *head);
int main()
{
	struct MyStruct data1={"張三",123};
	struct MyStruct data2={"李四",456};
	struct MyStruct data3={"小王",789};
	ListHead=CreateListHead(ListHead);
	
	//添加信息
	AddrListInfo(ListHead,data1);
	AddrListInfo(ListHead,data2);
	AddrListInfo(ListHead,data3);

	//刪除節(jié)點(diǎn)
	DeleteListInfo(ListHead,123);
	DeleteListInfo(ListHead,789);

	//打印
	PrintListAllInfo(ListHead);
	return 0;
}
/*
函數(shù)功能: 創(chuàng)建鏈表頭
*/
struct MyStruct *CreateListHead(struct MyStruct *head)
{
	if(head==NULL)
	{
		head=malloc(sizeof(struct MyStruct));
		head->next=NULL;
	}
	return head;
}

/*
函數(shù)功能: 在鏈表結(jié)尾添加節(jié)點(diǎn)
*/
void AddrListInfo(struct MyStruct *head,struct MyStruct data)
{
	struct MyStruct *p=head;
	struct MyStruct *tmp=NULL;

	while(p->next!=NULL)
	{
		p=p->next;
	}
	tmp=malloc(sizeof(struct MyStruct));
	memcpy(tmp,&data,sizeof(struct MyStruct));
	p->next=tmp;
	tmp->next=NULL;
}

/*
函數(shù)功能: 根據(jù)結(jié)構(gòu)體里特有的成員區(qū)分進(jìn)行刪除鏈表節(jié)點(diǎn)信息
函數(shù)參數(shù): int numbe  編號(hào)
*/
void DeleteListInfo(struct MyStruct *head,int number)
{
	struct MyStruct *p=head;
	struct MyStruct *tmp=NULL;

	while(p->next!=NULL)
	{
		tmp=p; //保存上一個(gè)節(jié)點(diǎn)的信息
		p=p->next;
		if(p->Number==number)
		{
			tmp->next=tmp->next->next;
			free(p);
			p=head; //鏈表頭歸位
		}
	}
}

/*
函數(shù)功能: 打印所有節(jié)點(diǎn)信息
函數(shù)參數(shù): int numbe  編號(hào)
*/
void PrintListAllInfo(struct MyStruct *head)
{
	struct MyStruct *p=head;
	int cnt=0;
	printf("\n鏈表全部信息如下:\n");
	while(p->next!=NULL)
	{
		p=p->next;
		cnt++;
		printf("第%d個(gè)節(jié)點(diǎn)信息: %s,%d\n",cnt,p->Name,p->Number);
	}
}

1.4 學(xué)生管理系統(tǒng)模板(通過文件系統(tǒng)保存信息)

#include 
#include 
#include 

//存放信息的結(jié)構(gòu)體
struct MyStruct
{
	char Name[50]; //存放姓名
	int Number;    //存放編號(hào)
	struct MyStruct *next; //存放下一個(gè)節(jié)點(diǎn)的地址
};

//鏈表相關(guān)的函數(shù)接口
struct MyStruct *ListHead=NULL; //鏈表頭
struct MyStruct *CreateListHead(struct MyStruct *head);
void AddrListInfo(struct MyStruct *head,struct MyStruct data);
void DeleteListInfo(struct MyStruct *head,int number);
void PrintListAllInfo(struct MyStruct *head);

//文件操作相關(guān)函數(shù)
void SaveListAllInfo(struct MyStruct *head,char *path);
void GetListAllInfo(struct MyStruct *head,char *path);

#if 0
int main()
{
	struct MyStruct data1={"張三",123};
	struct MyStruct data2={"李四",456};
	struct MyStruct data3={"小王",789};
	ListHead=CreateListHead(ListHead);
	
	AddrListInfo(ListHead,data1);
	AddrListInfo(ListHead,data2);
	AddrListInfo(ListHead,data3);

	//保存節(jié)點(diǎn)信息
	SaveListAllInfo(ListHead,"D:/list.ini");

	//打印
	PrintListAllInfo(ListHead);
	return 0;
}
#endif

#if 1
int main()
{
	ListHead=CreateListHead(ListHead);

	//獲取節(jié)點(diǎn)信息
	GetListAllInfo(ListHead,"D:/list.ini");

	//打印
	PrintListAllInfo(ListHead);
	return 0;
}
#endif

/*
函數(shù)功能: 創(chuàng)建鏈表頭
*/
struct MyStruct *CreateListHead(struct MyStruct *head)
{
	if(head==NULL)
	{
		head=malloc(sizeof(struct MyStruct));
		head->next=NULL;
	}
	return head;
}

/*
函數(shù)功能: 在鏈表結(jié)尾添加節(jié)點(diǎn)
*/
void AddrListInfo(struct MyStruct *head,struct MyStruct data)
{
	struct MyStruct *p=head;
	struct MyStruct *tmp=NULL;

	while(p->next!=NULL)
	{
		p=p->next;
	}
	tmp=malloc(sizeof(struct MyStruct));
	memcpy(tmp,&data,sizeof(struct MyStruct));
	p->next=tmp;
	tmp->next=NULL;
}

/*
函數(shù)功能: 根據(jù)結(jié)構(gòu)體里特有的成員區(qū)分進(jìn)行刪除鏈表節(jié)點(diǎn)信息
函數(shù)參數(shù): int numbe  編號(hào)
*/
void DeleteListInfo(struct MyStruct *head,int number)
{
	struct MyStruct *p=head;
	struct MyStruct *tmp=NULL;

	while(p->next!=NULL)
	{
		tmp=p; //保存上一個(gè)節(jié)點(diǎn)的信息
		p=p->next;
		if(p->Number==number)
		{
			tmp->next=tmp->next->next;
			free(p);
			p=head; //鏈表頭歸位
		}
	}
}

/*
函數(shù)功能: 打印所有節(jié)點(diǎn)信息
函數(shù)參數(shù): int numbe  編號(hào)
*/
void PrintListAllInfo(struct MyStruct *head)
{
	struct MyStruct *p=head;
	int cnt=0;
	printf("\n鏈表全部信息如下:\n");
	while(p->next!=NULL)
	{
		p=p->next;
		cnt++;
		printf("第%d個(gè)節(jié)點(diǎn)信息: %s,%d\n",cnt,p->Name,p->Number);
	}
}
/*
函數(shù)功能: 保存鏈表節(jié)點(diǎn)信息
*/
void SaveListAllInfo(struct MyStruct *head,char *path)
{
	struct MyStruct *p=head;
	FILE *file;
	file=fopen(path,"a+b");
	if(file==NULL)
	{
		printf("保存信息的文件打開失敗!\n");
		return ;
	}
	while(p->next!=NULL)
	{
		p=p->next;
		fwrite(p,1,sizeof(struct MyStruct),file);
	}
	fclose(file);
}

/*
函數(shù)功能: 從文件里獲取鏈表節(jié)點(diǎn)信息
*/
void GetListAllInfo(struct MyStruct *head,char *path)
{
	struct MyStruct *p=head;
	FILE *file;
	struct MyStruct data;

	file=fopen(path,"rb");
	if(file==NULL)
	{
		printf("保存信息的文件打開失敗!\n");
		return;
	}
	//循環(huán)讀取文件里的數(shù)據(jù)
	while(!feof(file))
	{
		fread(&data,1,sizeof(struct MyStruct),file); //讀取鏈表節(jié)點(diǎn)數(shù)據(jù)
		AddrListInfo(head,data); //添加鏈表節(jié)點(diǎn)
	}
	fclose(file);
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134056
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3521

    瀏覽量

    93268
  • 文件操作
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    5326
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    UG練習(xí)題

    UG練習(xí)題,學(xué)校老師給的還不錯(cuò)
    發(fā)表于 07-18 21:10

    C語言典型練習(xí)題及答案

    C語言典型練習(xí)題及答案 c語言初學(xué)者必備
    發(fā)表于 08-10 12:34

    multisim練習(xí)題

    大家有沒有multisim的練習(xí)題目和教程???想學(xué)這方面的知識(shí),還望各位大神幫幫忙!小弟實(shí)在感激不盡!有的話麻煩發(fā)到我的郵箱1400769604@qq.com謝謝了。
    發(fā)表于 10-13 00:51

    電容器練習(xí)題

    電容器練習(xí)題
    發(fā)表于 11-16 11:36 ?50次下載

    Verilog HDL練習(xí)題

    Verilog HDL練習(xí)題
    發(fā)表于 11-03 16:47 ?193次下載

    labview論壇-labview經(jīng)典基礎(chǔ)練習(xí)題+解答

    labview論壇-labview經(jīng)典基礎(chǔ)練習(xí)題+解答
    發(fā)表于 09-12 10:31 ?648次下載

    C語言基礎(chǔ)習(xí)題

    c語言練習(xí)題。。。。。。。。。。。。。。。。。。。。。
    發(fā)表于 11-12 15:02 ?0次下載

    高頻諧振練習(xí)題

    高頻諧振練習(xí)題,有需要的可以下載看看,學(xué)習(xí)一下!
    發(fā)表于 12-18 11:06 ?1次下載

    子網(wǎng)劃分練習(xí)題

    子網(wǎng)劃分練習(xí)題,老師自己出的題。
    發(fā)表于 06-17 17:40 ?0次下載

    C語言編程的經(jīng)典練習(xí)題資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語言編程的經(jīng)典練習(xí)題資料免費(fèi)下載。
    發(fā)表于 06-04 08:00 ?16次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>編程的經(jīng)典<b class='flag-5'>練習(xí)題</b>資料免費(fèi)下載

    C語言程序設(shè)計(jì)上機(jī)考試練習(xí)題和答案免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語言程序設(shè)計(jì)上機(jī)考試練習(xí)題和答案免費(fèi)下載
    發(fā)表于 10-28 08:00 ?15次下載

    Python的練習(xí)題實(shí)例免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Python的練習(xí)題實(shí)例免費(fèi)下載。
    發(fā)表于 01-15 08:58 ?17次下載

    復(fù)變函數(shù)與積分變換練習(xí)題及解答

    復(fù)變函數(shù)與積分變換練習(xí)題及解答
    發(fā)表于 06-27 09:19 ?5次下載

    Java編程思想練習(xí)題源碼

    Java編程思想練習(xí)題源碼,配合《Java編程思想》進(jìn)行學(xué)習(xí)。
    發(fā)表于 09-26 14:24 ?0次下載

    Thinking In Java練習(xí)題源碼

    Thinking In Java 練習(xí)題源碼文件分享
    發(fā)表于 09-26 14:23 ?0次下載