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;
}
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;
}
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;
}