2021.1.2 IO 作业

思维导图

2021.1.2 IO 作业_第1张图片2021.1.2 IO 作业_第2张图片

练习题

1> 使用fread、fwrite完成两个文件的拷贝

#include 
#include 
#include 

int main(int argc, const char *argv[])
{
	//定义文件指针
	FILE *file=fopen("./register.txt","r");
	//拷贝文件
	FILE *file2=fopen("./test.txt","w");
	if(file==NULL || file2==NULL)
	{
		perror("文找到文件");
		return 1;
	}

	char buf[10];
	//循环从文件中读取数据
	while(1)
	{
		//fread读取file中的字符
		fread(buf,sizeof(buf),1,file);	
		//fwrite写入字符到file2中
		fwrite(buf,sizeof(buf),1,file2);
		//清空buf残留的字符
		memset(buf,0,sizeof(buf));
		//file中光标到末尾结束循环
		if(feof(file)) break;
	}

	fclose(file);
	fclose(file2);
	puts("拷贝成功");
	return 0;
}

2021.1.2 IO 作业_第3张图片

2> 将注册登录框架

#include 
#include 
#include 
//注册操作
int do_register()
{
	//追加读写操作,注册内容追加写入
	FILE *file=fopen("./register.txt","a+");
	char access[20];
	char password[20];
	if(file==NULL)
	{
		perror("文件不存在");
		return -1;
	}
	//通过fgets获取终端输入字符串,存入access和password中
	printf("输入账号:");
	fgets(access,sizeof(access),stdin);
	printf("输入密码:");
	fgets(password,sizeof(password),stdin);
	//将字符数组变为字符串
	access[strlen(access)-1]='\0';
	password[strlen(password)-1]='\0';
	//向文件中写入数据
	fprintf(file,"%s %s\n",access,password);

	fclose(file);

	puts("注册成功");

	return 0;
}
//登录操作
int do_login()
{
	FILE *file=fopen("./register.txt","r");
	if(file==NULL)
	{
		perror("文件不存在");
		return -1;
	}
	char access[20];
	char password[20];
	char username[20];
	char userpass[20];
	//存入终端输入的账号密码
	printf("输入账号:");
	fgets(username,sizeof(username),stdin);
	printf("输入密码:");
	fgets(userpass,sizeof(userpass),stdin);
	
	username[strlen(username)-1]='\0';
	userpass[strlen(userpass)-1]='\0';
	//循环遍历文件中的内容
	while(1)
	{
		//将fscanf返回个数进行判断,并将找到的数据存入access和password
		int res=fscanf(file,"%s %s",access,password);
		if(res<=0)
		{
			puts("未注册");
			fclose(file);
			break;
		}
		//通过strcmp比较
		if(strcmp(access,username)==0 && strcmp(password,userpass)==0)
		{
			puts("登录成功");
			fclose(file);
			break;
		}
	}
	return 0;

}

int main(int argc, const char *argv[])
{
	char num;
	//循环打印选项
	while(1)
	{
		printf("-----1.注册-----\n");
		printf("-----2.登录-----\n");
		printf("-----0.退出-----\n");
		printf("请输入选项:");
		scanf("%c",&num);
		//通过循环吃掉从第二个字符开始的所有垃圾字符
		while(getchar()!='\n');
		switch(num)
		{
			case '1':
				do_register();
				break;
			case '2':
				do_login();
				break;
			case '0':
				exit(EXIT_SUCCESS);
				break;
			default:
				puts("error");
		}
		printf("按回车清屏");
		//吃掉回车前所有垃圾字符
		while(getchar()!='\n');
		system("clear");
	}

	return 0;
}

2021.1.2 IO 作业_第4张图片

2021.1.2 IO 作业_第5张图片

2021.1.2 IO 作业_第6张图片

3> 完成图像文件信息的读写操作

#include 
#include 
#include 

int main(int argc, const char *argv[])
{
	//file指向图片文件
	FILE *file=fopen("./1.bmp","r+");	
	if(file==NULL)
	{
		perror("文件不存在");
		return 1;
	}
	//向后偏移2字节,得到文件大小
	fseek(file,2,SEEK_SET);
	size_t size;
	//从文件中读取一个整形数据
	fread(&size,sizeof(size),1,file);
	//更改像素颜色
	unsigned char color[3]={0,255,0};
	//位图从54为开始为数据位
	fseek(file,54,SEEK_SET);
	//像素行数
	for(int i=0;i<400;i++)
	{
		//像素列数
		for(int j=0;j<886;j++)
		{
			//写入新的像素的颜色
			fwrite(color,sizeof(color),1,file);
		}
	}
	fclose(file);
	return 0;
}

2021.1.2 IO 作业_第7张图片

你可能感兴趣的:(网络,算法)