Day2
思维导图
作业
1、使用fread、fwrite完成两个文件的拷贝
代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
//
if(argc != 3)
{
puts("input file error!");
puts("usage:./a.out srcfile destfile");
return 0;
}
FILE *srcfp=0;
FILE *destfp=0;
//源文件只读打开
if((srcfp=fopen(argv[1],"r"))==0)
{
perror("srcfile open error");
return -1;
}
//目标文件只写打开
if((destfp=fopen(argv[2],"w"))==0)
{
perror("destfile open error");
return -1;
}
//定义一个字符搬运工
char buf[10]="";
while(!feof(srcfp))
{
int res=fread(buf,1,sizeof(buf),srcfp);
fwrite(buf,1,res,destfp);
}
fclose(srcfp);
fclose(destfp);
puts("copy success");
return 0;
}
2、将注册登录框架重新实现一遍
代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int do_register()
{
//Open file for append
FILE *wfp=0;
char account_reg[20];
char pwd_reg[20];
printf("please enter account_reg:");
fgets(account_reg,sizeof(account_reg),stdin);
printf("please enter pwd_reg:");
fgets(pwd_reg,sizeof(pwd_reg),stdin);
//将字符串中的换行改为'\0'
account_reg[strlen(account_reg)-1]='\0';
pwd_reg[strlen(pwd_reg)-1]='\0';
//打开文件
if((wfp=fopen("./usr.txt","a+"))==NULL)
{
perror("fopen error!");
return -1;
}
//将注册账号和注册密码写入到文件中,中间用空格隔开,每组用换行隔开
fprintf(wfp,"%s %s\n",account_reg,pwd_reg);
fclose(wfp);
printf("register succsee!");
return 0;
}
int do_login() //登录
{
//存放登录账号密码
char account_login[20];
char pwd_login[20];
char account[20];
char pwd[20];
printf("please enter account_login:");
fgets(account_login,sizeof(account_login),stdin);
printf("please enter pwd_login:");
fgets(pwd_login,sizeof(pwd_login),stdin);
account_login[strlen(account_login)-1]='\0';
pwd_login[strlen(pwd_login)-1]='\0';
FILE *rfp=0;
if((rfp=fopen("./usr.txt","r"))==NULL)
{
perror("fopen error!");
return -1;
}
//循环遍历账户
while(1)
{
int res =fscanf(rfp,"%s %s",account,pwd);
if(res < 0)
{
puts("log in error");
fclose(rfp);
return 1;
}
if(strcmp(account,account_login)==0 && strcmp(pwd_login,pwd)==0)
{
puts("log in success!");
fclose(rfp);
return 0;
}
}
}
int main(int argc, const char *argv[])
{
char menu;
//制作菜单框架
while(1)
{
printf("\t\t====1.register====\n");
printf("\t\t====2.Log in====\n");
printf("\t\t====0.exit====\n");
printf("Please enter function options:");
scanf("%c",&menu);
while(getchar() != '\n');
//对菜单选项多分支选择
switch(menu)
{
case '1':
{
do_register();
}
break;
case '2':
{
do_login();
}
break;
case '0':
exit(1);
default:
{
printf("enter error!!!");
}
}
printf("Enter any key to clear the screen:");
while(getchar() != '\n');
system("clear");
}
return 0;
}
运行结果
3、完成图像文件信息的读写操作
代码
#include<stdio.h>
int main(int argc, const char *argv[])
{
//定义文件指针打开文件
FILE *fp = NULL;
if((fp = fopen("./1.bmp", "r+")) == NULL)
{
perror("fopen error");
return -1;
}
//更改像素
unsigned char color[3] = {255, 0, 0}; //纯蓝色
//将光标偏移到图像数据处
fseek(fp, 54, SEEK_SET);
for(int i=0; i<100; i++) //外行
{
for(int j=0; j<720; j++) //内列
{
fwrite(color, sizeof(color), 1, fp);
}
}
//关闭文件
fclose(fp);
return 0;
}
运行结果
面试题整理