2024.12.09标准IO(作业)

1、使用这fscanf和fprintf两个函数实现文件的拷贝。

#include <myhead.h>

int main(int argc, const char *argv[])
{
	//使用这fscanf和fprintf两个函数实现文件的拷贝
	FILE *fp1 = fopen("./1.txt","r"); 	//打开被拷贝的文件1.txt
	if(NULL== fp1)
	{
		perror("fopen1");
		return -1;
	}
	FILE *fp2 = fopen("./2.txt","w"); 	//只写的方式打开
	if(NULL == fp2)
	{
		perror("fopen2");
		return -1;
	}
	char buff[1024];
	while(EOF != fscanf(fp1,"%1023s",buff)) 	//限制打小,防止溢出
	{
		fprintf(fp2,"%s\n",buff); 				//保持换行一致
	}
	fclose(fp1);
	fclose(fp2);
	return 0;
}

2、fwrite和fread实现文件拷贝。

#include <myhead.h>

int main(int argc, const char *argv[])
{
	FILE *fp1,*fp2;
	fp1 = fopen("./1.txt","r");
	if(NULL == fp1)
	{
		perror("fp1");
		return -1;
	}
	fp2 = fopen("./2.txt","w");
	if(NULL == fp2)
	{
		perror("fp2");
		return -1;
	}
	int res;
	char buff[1024];
	while(res = fread(buff,1,sizeof(buff),fp1)!=0)
	{
		fwrite(buff,res,sizeof(buff),fp2);
	}
	fseek(fp1,SEEK_CUR,-1024);
	bzero(buff,sizeof(buff));
	fread(buff,sizeof(buff),1,fp1);
	fwrite(buff,sizeof(buff),1,fp2);
	fclose(fp1);
	fclose(fp2);

	return 0;
}

3、登录注册实现一遍。

#include"fun.h"
int main(int argc, const char *argv[])
{
    int ch;
    printf("argc = %d\targv[0] = %s\tagrv[1] = %s\n",argc,argv[0],argv[1]);
    if(argc!=2)
    {
        printf("参数错误\n");
        return -1;
    }
    while(1)
    {
        printf("\t\t\t1、注册\n");
        printf("\t\t\t2、登录\n");
        printf("\t\t\t0、退出\n");
        printf("请输入你的选择:");
        scanf("%d",&ch);
        getchar();//吸收回车
        switch(ch)
        {
            case 1:
            regist(argv[1]);//注册函数
            break;
            case 2:
            login(argv[1]);//登录函数
            break;
            case 0:
            exit(EXIT_SUCCESS);//成功退出
            //exit(EXIT_FAILURE);//失败退出
            break;
            default:
            printf("输入有误请重新输入\n");
        }
    }
    return 0;
}



#include"fun.h"
int regist(const char *File)
{
    char name[20],code[20];
    printf("请输入注册账户:");
    fgets(name,sizeof(name),stdin);//输入账户
    printf("请输入注册密码:");
    fgets(code,sizeof(code),stdin);//输入密码
    name[strlen(name)-1] = '\0';
    code[strlen(code)-1] = '\0';
    
    FILE *fp = fopen(File,"a");//追加写的方式写入文件
    if(fp==NULL)
    {
        perror("fopen");
        return -1;
    }
    fprintf(fp,"%s %s ",name,code);//将账户密码写入文件
    fclose(fp);//关闭文件
    return 0;
}
int login(const char *File)
{
    char dname[20],dcode[20];//存储输入的账户密码
    char name[20],code[20];//存储读取的账户密码
    printf("请输入登录账户:");
    fgets(dname,sizeof(dname),stdin);//输入账户
    printf("请输入登录密码:");
    fgets(dcode,sizeof(dcode),stdin);//输入密码
    dname[strlen(dname)-1] = '\0';
    dcode[strlen(dcode)-1] = '\0';
    

    //循环读取文件内容与账户密码匹配
    FILE *fp = fopen(File,"r");//只读方式打开
    if(fp==NULL)
    {
        perror("fopen");
        return -1;
    }
    int flag=0;
    while(1)
    {
        int res = fscanf(fp,"%s %s",name,code);//读取到的账户密码
        if(res==EOF)//读取到文件末尾退出
        {
            break;
        }
        if(strcmp(dname,name)==0&&strcmp(dcode,code)==0)
        {
            printf("登录成功!!!\n");
            flag=1;
            return 0;
        }
    }
    if(flag==0)
    {
        printf("登录失败,请重新输入\n");
    }
    fclose(fp);//关闭文件
    return 0;
}


#ifndef _FUN_H_
#define _FUN_H_
#include<myhead.h>
int regist(const char *);
int login(const char *);
#endif

思维导图

相关推荐
利刃大大2 小时前
【回溯+剪枝】找出所有子集的异或总和再求和 && 全排列Ⅱ
c++·算法·深度优先·剪枝
马立杰3 小时前
H3CNE-33-BGP
运维·网络·h3cne
Rachela_z3 小时前
代码随想录算法训练营第十四天| 二叉树2
数据结构·算法
细嗅蔷薇@3 小时前
迪杰斯特拉(Dijkstra)算法
数据结构·算法
追求源于热爱!3 小时前
记5(一元逻辑回归+线性分类器+多元逻辑回归
算法·机器学习·逻辑回归
ElseWhereR3 小时前
C++ 写一个简单的加减法计算器
开发语言·c++·算法
Smark.3 小时前
Gurobi基础语法之 addConstr, addConstrs, addQConstr, addMQConstr
算法
S-X-S3 小时前
算法总结-数组/字符串
java·数据结构·算法
云空4 小时前
《DeepSeek 网页/API 性能异常(DeepSeek Web/API Degraded Performance):网络安全日志》
运维·人工智能·web安全·网络安全·开源·网络攻击模型·安全威胁分析
深度Linux4 小时前
Linux网络编程中的零拷贝:提升性能的秘密武器
linux·linux内核·零拷贝技术