IO day2

思维daotu

IO day2_第1张图片使用fread、fwrite实现文件拷贝

#include
#include
#include

int main(int argc, const char *argv[])
{
        //定义两个文件
        FILE * fpr=NULL;
        FILE * fpw=NULL;

        //判断文件是否正常打开
        if((fpr=fopen(argv[1],"r"))==NULL)
        {
                perror("fopen error r");
                return -1;
        }

        if((fpw=fopen(argv[2],"w"))==NULL)
        {
                perror("fopen error w");
                return -1;
        }

        //定义一个用于中间数组
        char tbuf[5]="";
        //判断文件是否读取到末尾并进行拷贝
        while(!feof(fpr))
        {
                fread(tbuf,1,sizeof(tbuf),fpr);

                fwrite(tbuf,1,sizeof(tbuf),fpw);
        }

        //关闭文件
        fclose(fpr);
        fclose(fpw);

        return 0;
}

IO day2_第2张图片

#include
#include
#include
//定义注册函数
int do_register()
{
        //以追加形式打开文件
        FILE * wfp=NULL;
        char username_reg[20];
        char pwd_reg[20];
        //将注册账号和注册密码写入到文件中,中间有空格隔开,每组用换行隔开
        printf("请输入注册账号:");
        fgets(username_reg,sizeof(username_reg),stdin);
        printf("请输入注册密码:");
        fgets(pwd_reg,sizeof(pwd_reg),stdin);

        //讲两个字符串中的换行改成'\0'
        username_reg[strlen(username_reg)-1]='\0';
        pwd_reg[strlen(pwd_reg)-1]='\0';

        //打开文件
        if((wfp=fopen("./user.txt","a+"))==NULL)
        {
                perror("fopen error");
                return -1;
        }

        //将注册账号和注册密码写入到文件中,中间有空格隔开,每组用换行隔开
        fprintf(wfp,"%s %s\n",username_reg,pwd_reg);

        fclose(wfp);

        printf("注册成功!!\n");
        return 0;
}

int do_login()
{
        char username_log[20];    //定义数组储存登录用户名及密码
        char pwd_log[20];

        char username[20];
        char pwd[20];

        printf("请输入登录账号:");
        fgets(username_log,sizeof(username_log),stdin);
        printf("请输入登录密码:");
        fgets(pwd_log,sizeof(pwd_log),stdin);

        username_log[strlen(username_log)-1]='\0';    //在字符串最后加上'\0'
        pwd_log[strlen(pwd_log)-1]='\0';

        FILE * rfp=NULL;
        if((rfp=fopen("./user.txt","r"))==NULL)
        {
                perror("fopen error");
                return -1;
        }

        while(1)    //循环匹配用户名与密码
        {
                int res=fscanf(rfp,"%s %s",username,pwd);
                if(res<0)
                {
                        printf("登录失败\n");
                        fclose(rfp);
                        return 1;
                }
                if(strcmp(username_log,username)==0 && strcmp(pwd_log,pwd)==0)
                {
                        printf("登录成功\n");
                        fclose(rfp);
                        return 0;
                }
        }


}


int main(int argc, const char *argv[])
{
        //定义菜单编号
        char menu;

        while(1)
        {
                printf("\t\t=====1,注册=====\n");
                printf("\t\t=====2,登录=====\n");
                printf("\t\t=====0,退出=====\n");

                printf("please enter: ");
                scanf("%c",&menu);
                while(getchar()!='\n');

                switch(menu)    //菜单选择逻辑
                {
                case '1':
                        {
                                do_register();
                        }
                        break;
                case '2':
                        {
                                do_login();
                        }
                        break;
                case '0':
                        exit(EXIT_SUCCESS);    //退出菜单程序
                default:printf("enter error!!\n");
                }
                printf("press any key to clear");    //任意键清屏
                while(getchar()!='\n');
                system("clear");
        }
        return 0;
}

IO day2_第3张图片

修改图片

#include
#include
#include

int main(int argc, const char *argv[])
{
        FILE * fp=NULL;
        if((fp=fopen("shield.bmp","r+"))==NULL)
        {
                perror("fp open");
                return -1;
        }

        fseek(fp,2,SEEK_SET);    //向后偏移两个字节得到文件大小

        unsigned int size;
        fread(&size,sizeof(size),1,fp);    //读取一个整形数据
        printf("size=%d\n",size);

        unsigned char color[3]={255,0,0};    //蓝色

        fseek(fp,54,SEEK_SET);    //偏移光标

        for (int i=0; i<200; i++)
        {
                for(int j=0;j<200;j++)
                {
                        fwrite(color,sizeof(color),1,fp);
                }
        }

        return 0;
}

IO day2_第4张图片

IO day2_第5张图片

你可能感兴趣的:(算法,linux,运维)